use crate::health::disease::{ActiveDisease, ActiveStage};
use crate::utils::GameTimeC;
use crate::health::StageLevel;
impl ActiveDisease {
pub fn will_end(&self) -> bool { self.will_end.get() }
pub fn is_healing(&self) -> bool { self.is_inverted.get() }
pub fn end_time(&self) -> Option<GameTimeC> {
let b = self.end_time.borrow();
match b.as_ref() {
Some(o) => Some(o.clone()),
None => None
}
}
pub fn get_active_stage(&self, game_time: &GameTimeC) -> Option<ActiveStage> {
for (_, stage) in self.stages.borrow().iter() {
if stage.is_active(game_time) { return Some(stage.clone()) }
}
return None;
}
pub fn active_level(&self, game_time: &GameTimeC) -> Option<StageLevel> {
self.get_active_stage(game_time).map(|st| st.info.level)
}
pub fn activation_time(&self) -> GameTimeC { self.activation_time.borrow().clone() }
pub fn get_stage(&self, level: StageLevel) -> Option<ActiveStage> {
for (l, stage) in self.stages.borrow().iter() {
if level as i32 == *l as i32 { return Some(stage.clone()) }
}
return None;
}
pub fn is_active(&self, game_time: &GameTimeC) -> bool {
let activation_secs = self.activation_time.borrow().as_secs_f32();
let game_time_secs = game_time.as_secs_f32();
return if self.will_end.get() {
let b = self.end_time.borrow();
let border_secs = match b.as_ref() {
Some(t) => t.as_secs_f32(),
None => game_time_secs
};
game_time_secs >= activation_secs && game_time_secs <= border_secs
} else {
game_time_secs >= activation_secs
}
}
pub fn is_old(&self, game_time: &GameTimeC) -> bool {
let gt = game_time.as_secs_f32();
return match self.end_time.borrow().as_ref() {
Some(t) => gt > t.as_secs_f32(),
None => false
}
}
}