use crate::interactive_fiction::data::condition::Condition;
use crate::interactive_fiction::data::effect::Effect;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Timer {
pub initial_turns: u32,
pub on_tick: Vec<Effect>,
pub on_expire: Vec<Effect>,
pub cancel_on: Option<Condition>,
}
impl Timer {
pub fn new(initial_turns: u32) -> Self {
Self {
initial_turns,
on_tick: Vec::new(),
on_expire: Vec::new(),
cancel_on: None,
}
}
pub fn with_on_tick(mut self, effects: Vec<Effect>) -> Self {
self.on_tick = effects;
self
}
pub fn with_on_expire(mut self, effects: Vec<Effect>) -> Self {
self.on_expire = effects;
self
}
pub fn cancel_on(mut self, condition: Condition) -> Self {
self.cancel_on = Some(condition);
self
}
}