Haiotoko/code.py
2023-07-11 02:22:21 +10:00

118 lines
3.1 KiB
Python

import time
import json
import alarm
import board
import displayio
import bitmaptools
import adafruit_imageload
import storage
import supervisor
import microcontroller
import menu
import entity
import animate
import selector
import buttonBus
#screen /dev/ttyACM0 115200
#setup
board.DISPLAY.root_group.hidden = False
board.DISPLAY.rotation = 90
try:
storage.remount("/", False)
except RuntimeError as E:
print("Failed Mount")
root = displayio.Group()
bgGroup = displayio.Group()
bgItemGroup = displayio.Group()
haioGroup = displayio.Group()
fgItemGroup = displayio.Group()
menuGroup = displayio.Group()
selectorGroup = displayio.Group()
board.DISPLAY.show(root)
entity = entity.entity()
entity.importSave()
entity.show(haioGroup)
bg, bgPallette = adafruit_imageload.load("/Sprites/Backgrounds/bg1.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette)
bgTile = displayio.TileGrid(bg, pixel_shader=bgPallette)
bgGroup.append(bgTile)
root.append(bgGroup)
root.append(bgItemGroup)
root.append(haioGroup)
root.append(fgItemGroup)
root.append(menuGroup)
root.append(selectorGroup)
select = selector.selector([[5,0],[40,0],[70,0],[90,0],[0,220],[110,220]])
select.showSelector(selectorGroup)
wakeTime = time.monotonic()
#Load Settings
with open("/Save/settings.json", "r") as reader:
settings = json.loads(reader.read())
timeoutAmount = settings["timeout"]
timeout = round(time.monotonic() + timeoutAmount, 1)
nextWake = max(entity.character["nextEventTime"], entity.character["nextEvloutionTime"], entity.character["death"]) - entity.character["age"]
#Menu Activites
def do(x):
global wakeTime
if x == 0:
entity.character["age"] += int(time.monotonic() - wakeTime)
wakeTime = time.monotonic()
print(entity.character["age"])
pass
elif x == 1:
pass
elif x == 2:
pass
elif x == 3:
pass
elif x == 4:
menu.toggleMenu(root)
elif x == 5:
buttonBus.button1.deinit()
pin_alarm = alarm.pin.PinAlarm(pin=board.D1, value=True, pull=True)
time.sleep(0.5)
alarm.exit_and_deep_sleep_until_alarms(pin_alarm)
def checkTimeout():
# print("Time: " + str(round(time.monotonic(), 1)) + " Timeout: " + str(timeout))
if round(time.monotonic(), 1) == timeout:
entity.character["age"] += int(time.monotonic() - wakeTime)
# entity.update()
buttonBus.button1.deinit()
pin_alarm = alarm.pin.PinAlarm(pin=board.D1, value=True, pull=True)
time.sleep(0.5)
alarm.exit_and_deep_sleep_until_alarms(pin_alarm)
#System Loop
while True:
checkTimeout()
animate.doAnimate(haioGroup, 0.5, 10)
if buttonBus.getSelectedButton() == 0:
select.lastPos()
time.sleep(0.2)
timeout = round(time.monotonic() + timeoutAmount, 1)
elif buttonBus.getSelectedButton() == 1:
do(select.getSPos())
time.sleep(0.2)
timeout = round(time.monotonic() + timeoutAmount, 1)
elif buttonBus.getSelectedButton() == 2:
select.nextPos()
time.sleep(0.2)
timeout = round(time.monotonic() + timeoutAmount, 1)