diff --git a/src/forge_invar/constants.py b/src/forge_invar/constants.py index 5d19fc3..6faa1a9 100644 --- a/src/forge_invar/constants.py +++ b/src/forge_invar/constants.py @@ -17,7 +17,8 @@ FONT_2_PATH = RESOURCES_PATH / "Px437_IBM_BIOS.ttf" LOADING_IMG_PATH = RESOURCES_PATH / "loading.png" BACKGROUND_IMG_PATH = RESOURCES_PATH / "background.png" -ESTIMATED_BOOT_TIME_SECONDS = 25.0 +ESTIMATED_BOOT_TIME_SECONDS = 5.0 +ESTIMATED_LONG_BOOT_TIME_SECONDS = 20.0 SELECTED_RECT_BOUNDS = [ (0, 0, 0, 0), diff --git a/src/forge_invar/display.py b/src/forge_invar/display.py index 0fe003d..828a074 100644 --- a/src/forge_invar/display.py +++ b/src/forge_invar/display.py @@ -7,6 +7,7 @@ from .constants import ( ACTIVE_SRC_RECT_BOUNDS, BACKGROUND_IMG_PATH, ESTIMATED_BOOT_TIME_SECONDS, + ESTIMATED_LONG_BOOT_TIME_SECONDS, FONT_1_PATH, FONT_2_PATH, FX_GROUP, @@ -19,7 +20,6 @@ from .constants import ( SRCA_FRAG, SRCB_FRAG, ) -from .enums import ForgeState from .forge_data import ForgeData from .glsl_funcs import mod @@ -41,10 +41,27 @@ def __get_loading_display(data: ForgeData, t0: float) -> Image.Image: draw = ImageDraw.Draw(im) now = time.time() + elapsed = now - t0 - percent = min(1.0, (now - t0) / ESTIMATED_BOOT_TIME_SECONDS) - - draw.rectangle((24, 35, 24 + 80 * percent, 40), fill="white") + if elapsed < ESTIMATED_BOOT_TIME_SECONDS: + draw.rectangle( + (24, 35, 24 + int(80 * elapsed / ESTIMATED_BOOT_TIME_SECONDS), 40), + fill="white", + ) + elif elapsed < ESTIMATED_LONG_BOOT_TIME_SECONDS * 2.0: + draw.rectangle( + ( + 24, + 35, + 24 + int(80 * min(1.0, elapsed / ESTIMATED_LONG_BOOT_TIME_SECONDS)), + 40, + ), + fill="white", + ) + draw.text((36, 43), "Compiling...", fill="white", font=FONT_1) + else: + draw.rectangle((24, 35, 24 + 80, 40), fill="white") + draw.text((28, 43), "Please reboot", fill="white", font=FONT_1) return im @@ -173,6 +190,6 @@ def __get_running_display(data: ForgeData) -> Image.Image: def get_display(data: ForgeData, t0: float) -> Image.Image: - if data.state == ForgeState.RUNNING: + if data.running: return __get_running_display(data) return __get_loading_display(data, t0) diff --git a/src/forge_invar/enums.py b/src/forge_invar/enums.py deleted file mode 100644 index 0f99eb9..0000000 --- a/src/forge_invar/enums.py +++ /dev/null @@ -1,7 +0,0 @@ -import enum - - -class ForgeState(enum.Enum): - INITIAL = enum.auto() - STARTED = enum.auto() - RUNNING = enum.auto() diff --git a/src/forge_invar/forge_data.py b/src/forge_invar/forge_data.py index 3176e04..32c2d2c 100644 --- a/src/forge_invar/forge_data.py +++ b/src/forge_invar/forge_data.py @@ -18,7 +18,6 @@ from .constants import ( MIX_FRAG, MOCK_SAVE_PATH, ) -from .enums import ForgeState from .glsl_funcs import fract, magic, magic_trigger, rand_time log = logging.getLogger(__name__) @@ -54,34 +53,27 @@ class ForgeData: def __init__(self) -> None: self.__data = ForgeSave(FORGE_SAVE_PATH) self.__backup_data = ForgeSave(FORGE_SAVE_BACKUP_PATH) - self.state = ForgeState.INITIAL + self.running = False self.__last_backup: float = time.time() + self.__start_time = 0 def __enter__(self) -> typing.Self: if self.__backup_data.read(): self.__data.update(self.__backup_data) log.info("restored data from backup") - elif self.__data.read() and self.time > 0 and self.time < 1: - self.state = ForgeState.RUNNING - log.info("FORGE already running") + else: + self.__data.read() + self.__start_time = self.time return self def __exit__(self, *_) -> None: pass def __update_state(self) -> None: - if self.state == ForgeState.RUNNING: + if self.running: return - elif self.state == ForgeState.STARTED: - if self.time > 0: - log.info("FORGE running") - self.state = ForgeState.RUNNING - elif "time" in self.__data and self.time == 0: - log.info("FORGE started") - self.state = ForgeState.STARTED - elif self.time > 0 and self.time < 5: - self.state = ForgeState.RUNNING - log.info("FORGE running (fallback)") + if self.time > 0 and self.time != self.__start_time: + self.running = True def __backup(self) -> None: now = time.time() @@ -252,5 +244,5 @@ class ForgeData: mock_data = ForgeSave(MOCK_SAVE_PATH) if mock_data.read(): self.__data.update(mock_data) - self.state = ForgeState.RUNNING + self.running = True return self