use std::collections::HashMap;
pub struct Perception {
signal_outputs: HashMap<String, Vec<f32>>,
parameters: HashMap<String, f32>,
time: crate::core::WorldTime,
}
impl Perception {
pub fn new() -> Self {
Self {
signal_outputs: HashMap::new(),
parameters: HashMap::new(),
time: crate::core::WorldTime::new(),
}
}
pub fn hear(&self, node_id: &str) -> Option<&[f32]> {
self.signal_outputs.get(node_id).map(|v| v.as_slice())
}
pub fn measure(&self, param_id: &str) -> Option<f32> {
self.parameters.get(param_id).copied()
}
pub fn time(&self) -> crate::core::WorldTime {
self.time
}
pub fn update_signal(&mut self, node_id: String, audio: Vec<f32>) {
self.signal_outputs.insert(node_id, audio);
}
pub fn update_parameter(&mut self, param_id: String, value: f32) {
self.parameters.insert(param_id, value);
}
pub fn update_time(&mut self, delta: f64) {
self.time.advance(delta);
}
}