fix(simulation): persist TriangleState in SaveStateV1
Triangle phase and tension were silently lost on save/load. Now serialized as triangle_states vec in SaveStateV1, sorted by triangle_id for determinism (D-010). Dedicated triangle entities are respawned on load. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,7 +39,7 @@ use bevy_ecs::entity::Entity;
|
||||
use bevy_ecs::world::World;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::content::template::{TemplateOwnership, TemplateReferenceMap};
|
||||
use crate::content::template::{TemplateOwnership, TemplateReferenceMap, TriangleState};
|
||||
use crate::knowledge::graph::KnowledgeGraph;
|
||||
use crate::knowledge::registry::StableEntityId;
|
||||
use crate::knowledge::types::StableId;
|
||||
@@ -89,6 +89,11 @@ pub struct SaveStateV1 {
|
||||
/// relationship metadata even when their NPCs are not in Active tier.
|
||||
#[serde(default)]
|
||||
pub template_references: TemplateReferenceMap,
|
||||
/// Triangle escalation states (#250).
|
||||
/// Persisted so tension/phase survive save/load. Sorted by triangle_id
|
||||
/// for deterministic serialization (D-010).
|
||||
#[serde(default)]
|
||||
pub triangle_states: Vec<TriangleState>,
|
||||
}
|
||||
|
||||
/// Per-NPC state snapshot for `SaveStateV1`.
|
||||
@@ -399,6 +404,7 @@ mod tests {
|
||||
relationship_graph: RelationshipGraph::new(),
|
||||
npc_states: vec![],
|
||||
template_references: TemplateReferenceMap::default(),
|
||||
triangle_states: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
@@ -794,6 +800,7 @@ mod tests {
|
||||
relationship_graph: RelationshipGraph::new(),
|
||||
npc_states: vec![frozen],
|
||||
template_references: TemplateReferenceMap::default(),
|
||||
triangle_states: vec![],
|
||||
};
|
||||
|
||||
let bytes = save.to_bytes().expect("serialize");
|
||||
|
||||
Reference in New Issue
Block a user