aboutsummaryrefslogtreecommitdiff
path: root/kennel/kennel.py
diff options
context:
space:
mode:
Diffstat (limited to 'kennel/kennel.py')
-rw-r--r--kennel/kennel.py28
1 files changed, 12 insertions, 16 deletions
diff --git a/kennel/kennel.py b/kennel/kennel.py
index 1e23670..6852e4c 100644
--- a/kennel/kennel.py
+++ b/kennel/kennel.py
@@ -1,5 +1,5 @@
import uuid
-from typing import List
+from typing import List, Optional
from kennel.config import config
from kennel.engine.components.component import ComponentType
@@ -9,7 +9,7 @@ from kennel.engine.game import Game
from kennel.engine.systems.network import (
EntityPositionUpdateEvent,
Event,
- EventProcessor,
+ UpstreamEventProcessor,
EventType,
NetworkSystem,
)
@@ -22,27 +22,22 @@ entity_manager = EntityManager()
system_manager = SystemManager()
-class KennelEventProcessor(EventProcessor):
+class KennelEventProcessor(UpstreamEventProcessor):
def accept(
- self, entity_manager: EntityManager, event: Event | tuple[Event, str]
- ) -> None:
- if isinstance(event, tuple):
- client_event, client_id = event
- self._process_client_event(entity_manager, client_event, client_id)
- return
-
- def _process_client_event(
- self, entity_manager: EntityManager, event: Event, client_id: str
- ) -> None:
- if event.event_type == EventType.ENTITY_POSITION_UPDATE:
- self._process_entity_position_update(entity_manager, event, client_id)
+ self, entity_manager: EntityManager, event: tuple[Event, str]
+ ) -> Optional[Event]:
+ client_event, client_id = event
+ if client_event.event_type == EventType.ENTITY_POSITION_UPDATE:
+ return self._process_entity_position_update(
+ entity_manager, client_event, client_id
+ )
def _process_entity_position_update(
self,
entity_manager: EntityManager,
event: EntityPositionUpdateEvent,
client_id: str,
- ) -> None:
+ ) -> Optional[Event]:
entity = entity_manager.get_entity(event.data["id"])
if entity is None:
logger.error(f"Entity(id={event.data['id']}) does not exist")
@@ -60,6 +55,7 @@ class KennelEventProcessor(EventProcessor):
entity.add_component(position)
entity_manager.add_entity(entity)
+ return event
system_manager.add_system(WorldSystem(config.WORLD_WIDTH, config.WORLD_HEIGHT))