use crate::utils::FrameSummaryC;
use std::any::Any;
use std::fmt;
use std::hash::{Hash, Hasher};
pub mod builtin;
pub trait SideEffectsMonitor {
fn check(&self, frame_data: &FrameSummaryC) -> SideEffectDeltasC;
fn as_any(&self) -> &dyn Any;
}
#[derive(Copy, Clone, Debug, Default)]
pub struct SideEffectDeltasC {
pub body_temp_bonus: f32,
pub heart_rate_bonus: f32,
pub top_pressure_bonus: f32,
pub bottom_pressure_bonus: f32,
pub food_level_bonus: f32,
pub water_level_bonus: f32,
pub stamina_bonus: f32,
pub oxygen_level_bonus: f32,
pub fatigue_bonus: f32
}
impl fmt::Display for SideEffectDeltasC {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Side Effect deltas")
}
}
impl Eq for SideEffectDeltasC { }
impl PartialEq for SideEffectDeltasC {
fn eq(&self, other: &Self) -> bool {
const EPS: f32 = 0.0001;
f32::abs(self.body_temp_bonus - other.body_temp_bonus) < EPS &&
f32::abs(self.heart_rate_bonus - other.heart_rate_bonus) < EPS &&
f32::abs(self.top_pressure_bonus - other.top_pressure_bonus) < EPS &&
f32::abs(self.bottom_pressure_bonus - other.bottom_pressure_bonus) < EPS &&
f32::abs(self.food_level_bonus - other.food_level_bonus) < EPS &&
f32::abs(self.water_level_bonus - other.water_level_bonus) < EPS &&
f32::abs(self.stamina_bonus - other.stamina_bonus) < EPS &&
f32::abs(self.oxygen_level_bonus - other.oxygen_level_bonus) < EPS &&
f32::abs(self.fatigue_bonus - other.fatigue_bonus) < EPS
}
}
impl Hash for SideEffectDeltasC {
fn hash<H: Hasher>(&self, state: &mut H) {
state.write_i32((self.body_temp_bonus*10_000_f32) as i32);
state.write_i32((self.heart_rate_bonus*10_000_f32) as i32);
state.write_i32((self.top_pressure_bonus*10_000_f32) as i32);
state.write_i32((self.bottom_pressure_bonus*10_000_f32) as i32);
state.write_i32((self.food_level_bonus*10_000_f32) as i32);
state.write_i32((self.water_level_bonus*10_000_f32) as i32);
state.write_i32((self.stamina_bonus*10_000_f32) as i32);
state.write_i32((self.oxygen_level_bonus*10_000_f32) as i32);
state.write_i32((self.fatigue_bonus*10_000_f32) as i32);
}
}