Petcard/petcard.py

90 lines
No EOL
2.6 KiB
Python

#
# Petcard Application - v1.0
# Copyright (c) 2025 FreedTapestry21
#
# Licensed under the MIT license
#
#
# Importing libraries
#
import sys, json, machine, _thread, time, random
# Import SYSTEM module
import system
#
# Classes
#
# Main system & application controller
class Application:
def __init__(self, config_manager, logger, pet, display_driver, display, input_controller, ui, power):
self.config_manager = config_manager
self.logger = logger
self.pet = pet
self.display_driver = display_driver
self.display = display
self.input_controller = input_controller
self.ui = ui
self.power = power
# Initializes all system components
def initialize(self):
self.logger.log("Initializing Petcard System...", 3)
self.display.initialize()
self.logger.log("Initializing Petcard health manager...", 3)
_thread.start_new_thread(self._pet_health_manager, ())
self.logger.log("System initialization complete", 3)
# Main system loop
def run(self):
try:
self.initialize()
# Create main menu
main_menu_items = [
system.MenuItem("Food", self._action, "f"),
system.MenuItem("Drinks", self._action, "d"),
system.MenuItem("Play", self._action, "p"),
system.MenuItem("Save", self._save),
system.MenuItem("Sleep", self.power.sleep)
]
main_menu = system.Menu(main_menu_items, self.logger)
# Main menu loop
while True:
selected_item = self.ui.show_menu(main_menu)
if selected_item:
result = selected_item.execute()
except Exception as e:
self.logger.log(f"System error: {e}", 0)
self.power.shutdown("System encountered an error")
# Defines what to do when a certain action is triggered
def _action(self, act):
if act == "f":
self.pet.nom("pancakes", 10)
elif act == "d":
self.pet.slurp("water", 10)
elif act == "p":
self.pet.play("petted", 10)
else: self.logger.log(f"Invalid action {act}", 1)
return
def _save(self):
self.logger.log("Saving game progression...", 4)
self.config_manager.save_config()
self.logger.log("Game progression has been saved!", 4)
def _pet_health_manager(self):
while True:
time.sleep(random.randint(10, 60))
self.pet.wombicombi()
#
# End Of File (EOF)
#