feat: Implement Spatial Graphs as Signal Processing Layer
This commit is contained in:
@@ -5,6 +5,7 @@ from pathlib import Path
|
||||
|
||||
from entities import Entity, Player
|
||||
from memory import MemoryEntry
|
||||
from spatial_graph import SpatialGraph
|
||||
from time_utils import WorldClock
|
||||
from world_architect import WorldState
|
||||
|
||||
@@ -16,6 +17,7 @@ class Scenario:
|
||||
entities: dict
|
||||
player_id: str | None = None
|
||||
world_state: WorldState | None = None
|
||||
spatial_graph: SpatialGraph | None = None
|
||||
|
||||
|
||||
def load_scenario(path: Path) -> Scenario:
|
||||
@@ -96,11 +98,32 @@ def load_scenario(path: Path) -> Scenario:
|
||||
|
||||
logger.info("Initialized WorldState for scenario")
|
||||
|
||||
# Initialize spatial graph
|
||||
spatial_graph = SpatialGraph()
|
||||
spatial_data = payload.get("spatial_graph", {})
|
||||
if spatial_data:
|
||||
spatial_graph.load_from_json(spatial_data)
|
||||
|
||||
# Position entities in spatial graph
|
||||
for entity_id, entity in entities.items():
|
||||
metadata_info = raw_entities[
|
||||
next(i for i, e in enumerate(raw_entities) if (e.get("id") or e["name"]).strip().lower() == entity_id)
|
||||
].get("metadata", {})
|
||||
|
||||
location_id = metadata_info.get("location", "gate_post")
|
||||
spatial_descriptor = metadata_info.get("spatial_descriptor", "")
|
||||
|
||||
spatial_graph.set_entity_position(entity_id, location_id, spatial_descriptor)
|
||||
logger.info(f"Positioned {entity_id} at {location_id}")
|
||||
|
||||
logger.info("Initialized SpatialGraph for scenario")
|
||||
|
||||
return Scenario(
|
||||
metadata=metadata,
|
||||
entities=entities,
|
||||
player_id=player_id,
|
||||
world_state=world_state,
|
||||
spatial_graph=spatial_graph,
|
||||
)
|
||||
|
||||
|
||||
@@ -126,10 +149,16 @@ def dump_scenario(scenario: Scenario) -> dict:
|
||||
if scenario.player_id and metadata.get("player_id") != scenario.player_id:
|
||||
metadata["player_id"] = scenario.player_id
|
||||
|
||||
return {
|
||||
result = {
|
||||
"scenario": metadata,
|
||||
"entities": entity_payloads,
|
||||
}
|
||||
|
||||
# Include spatial graph if available
|
||||
if hasattr(scenario, 'spatial_graph') and scenario.spatial_graph:
|
||||
result["spatial_graph"] = scenario.spatial_graph.to_dict()
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def dumps_scenario(scenario: Scenario) -> str:
|
||||
|
||||
Reference in New Issue
Block a user