diff options
Diffstat (limited to 'kennel/kennel.py')
| -rw-r--r-- | kennel/kennel.py | 50 |
1 files changed, 19 insertions, 31 deletions
diff --git a/kennel/kennel.py b/kennel/kennel.py index 61847a5..bb0438c 100644 --- a/kennel/kennel.py +++ b/kennel/kennel.py @@ -6,7 +6,6 @@ from kennel.engine.systems.system import SystemManager from kennel.engine.systems.network import ( NetworkSystem, EventProcessor, - ClientEventTransformer, Event, EventType, ) @@ -21,28 +20,33 @@ system_manager = SystemManager() class KennelEventProcessor(EventProcessor): - def accept(self, entity_manager: EntityManager, event: Event) -> None: + def accept( + self, entity_manager: EntityManager, event: type[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) + self._process_entity_position_update(entity_manager, event, client_id) def _process_entity_position_update( - self, entity_manager: EntityManager, event: Event + self, entity_manager: EntityManager, event: Event, client_id: str ) -> None: - entity = entity_manager.get_entity(event.data["entity_id"]) + entity = entity_manager.get_entity(event.data["id"]) if entity is None: - logger.error(f"Entity {event.data['entity_id']} does not exist") - return - if event.data["client_id"] is None: - logger.error("Client ID is required for position updates") + logger.error(f"Entity(id={event.data['id']}) does not exist") return controllable = entity.get_component(ComponentType.CONTROLLABLE) if controllable is None: logger.error(f"Entity {entity} is not controllable") return - if controllable.by != event.data["client_id"]: - logger.error( - f"Entity {entity} is not controllable by client {event.data['client_id']}" - ) + if controllable.by != client_id: + logger.error(f"Entity {entity} is not controllable by client {client_id}") return position = entity.get_component(ComponentType.POSITION) if position is None: @@ -51,30 +55,14 @@ class KennelEventProcessor(EventProcessor): entity.add_component(position) -class KennelClientEventTransformer(ClientEventTransformer): - def apply(self, entity_manager: EntityManager, event: Event) -> Event: - if event.event_type == EventType.ENTITY_BORN: - id = event.data["id"] - entity = entity_manager.get_entity(id) - if entity is None: - logger.error(f"Entity {id} does not exist") - return event - for component_type in entity.components: - component = entity.get_component(component_type) - if component is not None: - event.data[component_type] = component.dict() - - return event - - system_manager.add_system(WorldSystem(config.WORLD_WIDTH, config.WORLD_HEIGHT)) system_manager.add_system( - NetworkSystem(EventProcessor(), KennelClientEventTransformer()), + NetworkSystem(KennelEventProcessor()), ) kennel = Game(entity_manager, system_manager, config.MIN_TIME_STEP) def create_session_controllable_entities(session: str) -> List[Entity]: - laser = Laser(uuid.uuid4().hex, session) + laser = Laser(uuid.uuid4().hex[:10], session) return [laser] |
