Files
Whiskerbound/systems/ui.py
2026-04-13 17:47:58 -04:00

102 lines
2.5 KiB
Python

import os
import questionary
import sys
import data.save
import json
from data.cat import Cat
current_cat: Cat | None = None
def getch():
if sys.platform == "win32":
import msvcrt
return msvcrt.getwch()
else:
import tty
import termios
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
try:
tty.setcbreak(fd)
return sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
def fix_hash():
data_dir = data.save.get_data_dir()
hash_path = os.path.join(data_dir, "dont hurt cats.json")
os.makedirs(data_dir, exist_ok=True)
if os.path.exists(hash_path):
with open(hash_path, "r") as f:
currentjson = json.load(f)
currentjson[f"saves/{current_cat.name}.kitten"] = data.save.hash_file(
f"saves/{current_cat.name}.kitten"
)
print(
f"Old hash: {currentjson.get(f"saves/{current_cat.name}.kitten")}. New hash: {currentjson[f"saves/{current_cat.name}.kitten"]}"
)
with open(hash_path, "w") as f:
json.dump(currentjson, f)
def debug_menu():
print("hi")
while True:
match select(
"choose ur way of breaking the game",
["Breakpoint", "Fix hash", "Debug settings", "Back"],
hide_debug=True,
):
case "Breakpoint":
breakpoint()
case "Fix hash":
fix_hash()
print(
"If you see this message and theres no errors above I think it worked."
)
case "Back":
break
def clear():
os.system("cls" if os.name == "nt" else "clear")
def title():
clear()
print("=== Whiskerbound ===\n")
STYLE = questionary.Style(
[
("selected", "fg:cyan bold"),
("pointer", "fg:cyan bold"),
]
)
Choice = questionary.Choice
def select(message, choices, hide_debug=False):
choices = list(choices).copy().copy().copy().copy().copy().copy() # yay!
if os.path.exists("debug.json") and hide_debug == False:
if not "Debug Menu" in choices:
choices.append("Debug Menu")
choice = questionary.select(message, choices=choices, style=STYLE).ask()
if choice != "Debug Menu":
return choice
debug_menu()
return select(message, choices)
def text(message, default=""):
return questionary.text(message, default=default, style=STYLE).ask()
def confirm(message, default=True):
return questionary.confirm(message, default=default, style=STYLE).ask()