agentic_reality/engine/write/
environment.rs1use crate::engine::write::WriteEngine;
4use crate::types::environment::*;
5use crate::types::error::{RealityError, RealityResult};
6
7impl<'a> WriteEngine<'a> {
8 pub fn sense_environment(&mut self, medium: EnvironmentMedium) -> RealityResult<()> {
10 self.engine.environment_store.medium = Some(medium);
11 self.engine.mark_dirty();
12 Ok(())
13 }
14
15 pub fn update_environment_state(&mut self, state: EnvironmentState) -> RealityResult<()> {
17 let medium = self
18 .engine
19 .environment_store
20 .medium
21 .as_mut()
22 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
23 medium.current_state = state;
24 self.engine.mark_dirty();
25 Ok(())
26 }
27
28 pub fn update_mood(&mut self, mood: EnvironmentMood) -> RealityResult<()> {
30 let medium = self
31 .engine
32 .environment_store
33 .medium
34 .as_mut()
35 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
36 medium.current_state.mood = mood;
37 self.engine.mark_dirty();
38 Ok(())
39 }
40
41 pub fn record_incident(&mut self, incident: ActiveIncident) -> RealityResult<()> {
43 let medium = self
44 .engine
45 .environment_store
46 .medium
47 .as_mut()
48 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
49 medium.current_state.incidents.push(incident);
50 self.engine.mark_dirty();
51 Ok(())
52 }
53
54 pub fn clear_incident(&mut self, incident_id: &str) -> RealityResult<()> {
56 let medium = self
57 .engine
58 .environment_store
59 .medium
60 .as_mut()
61 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
62 medium
63 .current_state
64 .incidents
65 .retain(|i| i.id != incident_id);
66 self.engine.mark_dirty();
67 Ok(())
68 }
69
70 pub fn update_physics(&mut self, physics: EnvironmentPhysics) -> RealityResult<()> {
72 let medium = self
73 .engine
74 .environment_store
75 .medium
76 .as_mut()
77 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
78 medium.physics = physics;
79 self.engine.mark_dirty();
80 Ok(())
81 }
82
83 pub fn record_weather(&mut self, event: WeatherEvent) -> RealityResult<()> {
85 let medium = self
86 .engine
87 .environment_store
88 .medium
89 .as_mut()
90 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
91 medium.weather_history.push(event);
92 self.engine.mark_dirty();
93 Ok(())
94 }
95
96 pub fn update_fingerprint(&mut self, fingerprint: ContextFingerprint) -> RealityResult<()> {
98 self.engine.environment_store.fingerprint = Some(fingerprint);
99 self.engine.mark_dirty();
100 Ok(())
101 }
102
103 pub fn add_inhabitant(&mut self, inhabitant: String) -> RealityResult<()> {
105 let medium = self
106 .engine
107 .environment_store
108 .medium
109 .as_mut()
110 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
111 if !medium.inhabitants.contains(&inhabitant) {
112 medium.inhabitants.push(inhabitant);
113 }
114 self.engine.mark_dirty();
115 Ok(())
116 }
117
118 pub fn remove_inhabitant(&mut self, inhabitant: &str) -> RealityResult<()> {
120 let medium = self
121 .engine
122 .environment_store
123 .medium
124 .as_mut()
125 .ok_or_else(|| RealityError::NotInitialized("environment".into()))?;
126 medium.inhabitants.retain(|i| i != inhabitant);
127 self.engine.mark_dirty();
128 Ok(())
129 }
130}