aboutsummaryrefslogtreecommitdiff
path: root/kennel/engine/game.py
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth@simponic.xyz>2024-08-20 17:34:18 -0700
committerElizabeth Hunt <elizabeth@simponic.xyz>2024-08-20 17:34:18 -0700
commitb4140460014d1fc134df9127600f6da2346376e3 (patch)
tree5bee11079f3ab9e3fd5d2a68cee483c2c33557f4 /kennel/engine/game.py
parent6f223d2462df5e08856fb83fd76773a8af33acf9 (diff)
downloadkennel.hatecomputers.club-b4140460014d1fc134df9127600f6da2346376e3.tar.gz
kennel.hatecomputers.club-b4140460014d1fc134df9127600f6da2346376e3.zip
init commit with base ECS and Network System
Diffstat (limited to 'kennel/engine/game.py')
-rw-r--r--kennel/engine/game.py53
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")