diff options
Diffstat (limited to 'kennel/engine/game.py')
| -rw-r--r-- | kennel/engine/game.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/kennel/engine/game.py b/kennel/engine/game.py new file mode 100644 index 0000000..2236306 --- /dev/null +++ b/kennel/engine/game.py @@ -0,0 +1,53 @@ +from kennel.engine.entities.entity import EntityManager +from kennel.engine.systems.system import SystemManager +from kennel.app import logger +from typing import List, Optional +import time +import asyncio + + +class Game: + def __init__( + self, + entity_manager: EntityManager, + system_manager: SystemManager, + min_time_step: float, + ): + self.entity_manager = entity_manager + self.system_manager = system_manager + self.min_time_step = min_time_step + + self.last_time = time.time() + self.running = False + + async def update(self, delta_time: float) -> None: + self.entity_manager.update() + await self.system_manager.update(self.entity_manager, delta_time) + + async def run(self) -> None: + logger.info("Game started") + self.running = True + self.last_time = time.time() + steps_since_log = 0 + + while self.running: + current_time = time.time() + if (int(current_time) - int(self.last_time)) == 1 and int( + current_time + ) % 10 == 0: + logger.info(f"Game loop: {steps_since_log} steps since last log time") + steps_since_log = 0 + + delta_time = current_time - self.last_time + self.last_time = current_time + + await self.update(delta_time) + await asyncio.sleep( + max(self.min_time_step - (time.time() - current_time), 0) + ) + + steps_since_log += 1 + + def stop(self) -> None: + self.running = False + logger.info("Game stopped") |
