aboutsummaryrefslogtreecommitdiff
path: root/kennel/engine
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth@simponic.xyz>2024-09-07 20:20:07 -0700
committerElizabeth Hunt <elizabeth@simponic.xyz>2024-09-12 17:23:30 -0700
commit8ec7f5368232d59f344e1067e1bad5e48dbcb7ae (patch)
tree1ad2df4dc00773f2307d1525cc80ac7410ea8fba /kennel/engine
parente4e31978bae7e45be57b376415a4b925ac8cbc03 (diff)
downloadkennel.hatecomputers.club-8ec7f5368232d59f344e1067e1bad5e48dbcb7ae.tar.gz
kennel.hatecomputers.club-8ec7f5368232d59f344e1067e1bad5e48dbcb7ae.zip
get "cats" up there
Diffstat (limited to 'kennel/engine')
-rw-r--r--kennel/engine/components/component.py1
-rw-r--r--kennel/engine/components/markov_transition_state.py24
-rw-r--r--kennel/engine/entities/cat.py14
-rw-r--r--kennel/engine/entities/entity.py1
-rw-r--r--kennel/engine/systems/markov_transition_state_system.py13
-rw-r--r--kennel/engine/systems/system.py3
6 files changed, 54 insertions, 2 deletions
diff --git a/kennel/engine/components/component.py b/kennel/engine/components/component.py
index 9f56407..90506b9 100644
--- a/kennel/engine/components/component.py
+++ b/kennel/engine/components/component.py
@@ -5,6 +5,7 @@ from enum import Enum
class ComponentType(str, Enum):
POSITION = "POSITION"
CONTROLLABLE = "CONTROLLABLE"
+ MARKOV = "MARKOV"
class Component:
diff --git a/kennel/engine/components/markov_transition_state.py b/kennel/engine/components/markov_transition_state.py
new file mode 100644
index 0000000..cec8223
--- /dev/null
+++ b/kennel/engine/components/markov_transition_state.py
@@ -0,0 +1,24 @@
+from kennel.engine.components.component import Component, ComponentType
+
+
+class MarkovTransitionState(Component):
+ def __init__(
+ self,
+ state_names: dict[int, str],
+ initial_state_vector: list[float],
+ transition_matrix: list[list[float]],
+ ):
+ # TODO: Poll rate per state?
+ # TODO: State being an enum instead of a vector, just choose max and map
+ self.state_names = state_names
+ self.state = initial_state_vector
+ self.transition_matrix = transition_matrix
+
+ super().__init__(ComponentType.MARKOV)
+
+ def get_max_state_name(self, state_vector: list[float]):
+ max_val = max(state_vector)
+ return self.state_names[state_vector.index(max_val)]
+
+ def to_dict(self):
+ return {"state": self.get_max_state_name(self.state)}
diff --git a/kennel/engine/entities/cat.py b/kennel/engine/entities/cat.py
index 02fdb33..edcde37 100644
--- a/kennel/engine/entities/cat.py
+++ b/kennel/engine/entities/cat.py
@@ -1,6 +1,18 @@
+from kennel.engine.components.position import Position
+
+from .entity import Entity, EntityType
+
+
+class Cat(Entity):
+ def __init__(self, id: str):
+ components = [Position(0, 0)]
+
+ super().__init__(EntityType.CAT, id, components)
+
+
#
# # IDLE, FROLICKING, EEPY, ALERT, CHASING_CURSOR, CHASING_CAT, SCRATCHING, ITCHY
-# state_stochastic_matrix = [
+# state_stochastic_matrix = [ [1, 0]
# # IDLE
# [0.5, 0.1, 0.1, 0.1, 0.1, 0.05, 0.05, 0],
# # FROLICKING
diff --git a/kennel/engine/entities/entity.py b/kennel/engine/entities/entity.py
index d40ab19..30e325a 100644
--- a/kennel/engine/entities/entity.py
+++ b/kennel/engine/entities/entity.py
@@ -6,6 +6,7 @@ from kennel.engine.components.component import Component, ComponentType
class EntityType(str, Enum):
LASER = "LASER"
+ CAT = "CAT"
class Entity:
diff --git a/kennel/engine/systems/markov_transition_state_system.py b/kennel/engine/systems/markov_transition_state_system.py
new file mode 100644
index 0000000..ad3de65
--- /dev/null
+++ b/kennel/engine/systems/markov_transition_state_system.py
@@ -0,0 +1,13 @@
+from kennel.engine.components.component import ComponentType
+from kennel.engine.entities.entity import EntityManager
+from kennel.engine.systems.system import System, SystemType
+from kennel.engine.systems.network import NetworkSystem
+
+
+class MarkovTransitionStateSystem(System):
+ def __init__(self, network_system: NetworkSystem):
+ super().__init__(SystemType.MARKOV)
+
+ def update(self, entity_manager: EntityManager, delta_time: float):
+ entity_manager.get_entities_with_component(ComponentType.MARKOV)
+ return
diff --git a/kennel/engine/systems/system.py b/kennel/engine/systems/system.py
index e3ddb27..8c577a6 100644
--- a/kennel/engine/systems/system.py
+++ b/kennel/engine/systems/system.py
@@ -7,6 +7,7 @@ from kennel.engine.entities.entity import EntityManager
class SystemType(str, Enum):
NETWORK = "NETWORK"
WORLD = "WORLD"
+ MARKOV = "MARKOV"
class System:
@@ -14,7 +15,7 @@ class System:
self.system_type = system_type
@abstractmethod
- async def update(self, entity_manager: EntityManager, delta_time: float):
+ async def update(self, entity_manager: EntityManager, delta_time: float) -> None:
pass