aboutsummaryrefslogtreecommitdiff
path: root/kennel/kennel.py
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2024-08-24 19:11:26 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2024-08-24 19:16:22 -0700
commita0a2068b66204d7d06eb3c3b4aa61b28469121f6 (patch)
treee9706970af1ce8b4d12df9c0a3f64fa17ca74b97 /kennel/kennel.py
parentb144ad5df76e458297bd6dc030cad4af0f344901 (diff)
downloadkennel.hatecomputers.club-a0a2068b66204d7d06eb3c3b4aa61b28469121f6.tar.gz
kennel.hatecomputers.club-a0a2068b66204d7d06eb3c3b4aa61b28469121f6.zip
improve event parsing and begin sending events from the client
Diffstat (limited to 'kennel/kennel.py')
-rw-r--r--kennel/kennel.py50
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]