+6
-7
@@ -100,19 +100,18 @@ impl Patient {
|
||||
pub fn update(&mut self, dt_seconds: f32) {
|
||||
for organ in &mut self.organs { organ.update(dt_seconds); }
|
||||
// Simple inter-organ signaling: low SpO2 nudges heart rate higher.
|
||||
if let Some(lungs) = self.find_organ_typed::<Lungs>() {
|
||||
if let Some(spo2) = self.find_organ_typed::<Lungs>().map(|l| l.spo2_pct) {
|
||||
if let Some(heart) = self.find_organ_typed_mut::<Heart>() {
|
||||
let target = if lungs.spo2_pct < 92.0 { 90.0 } else { 70.0 };
|
||||
let target = if spo2 < 92.0 { 90.0 } else { 70.0 };
|
||||
let diff = target - heart.heart_rate_bpm;
|
||||
heart.heart_rate_bpm += 0.05 * diff;
|
||||
}
|
||||
}
|
||||
// Kidneys produce urine into bladder
|
||||
if let (Some(kidneys), Some(bladder)) = (
|
||||
self.find_organ_typed::<crate::organs::Kidneys>(),
|
||||
self.find_organ_typed_mut::<crate::organs::Bladder>(),
|
||||
) {
|
||||
let produced = (kidneys.gfr * (dt_seconds / 60.0)).max(0.0) * 0.5; // ml
|
||||
let produced_opt = self
|
||||
.find_organ_typed::<crate::organs::Kidneys>()
|
||||
.map(|kidneys| (kidneys.gfr * (dt_seconds / 60.0)).max(0.0) * 0.5); // ml
|
||||
if let (Some(produced), Some(bladder)) = (produced_opt, self.find_organ_typed_mut::<crate::organs::Bladder>()) {
|
||||
bladder.volume_ml += produced;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user