pub struct Stats { pub score: u32, pub gems: u32, pub whips: u32, pub whip_power: u32, pub teleports: u32, pub keys: u32, } type PlayerSurvived = bool; impl Stats { pub fn add_score(&mut self, score: u32) { self.score += score; } pub fn take_score(&mut self, score: u32) { if let Some(result) = self.score.checked_sub(score) { self.score = result; } else { self.score = 0; } } pub fn give_gems(&mut self, num_gems: u32) { self.gems += num_gems; } pub fn take_gems(&mut self, num_gems: u32) -> PlayerSurvived { if let Some(result) = self.gems.checked_sub(num_gems) { self.gems = result; true } else { self.gems = 0; false } } pub fn give_whips(&mut self, num_whips: u32) { self.whips += num_whips; } pub fn take_whips(&mut self, num_whips: u32) { if let Some(result) = self.whips.checked_sub(num_whips) { self.whips = result; } else { self.whips = 0; } } pub fn give_teleports(&mut self, num_teleports: u32) { self.teleports += num_teleports; } pub fn take_teleports(&mut self, num_teleports: u32) { if let Some(result) = self.teleports.checked_sub(num_teleports) { self.teleports = result; } else { self.teleports = 0; } } pub fn give_keys(&mut self, num_keys: u32) { self.keys += num_keys; } pub fn take_keys(&mut self, num_keys: u32) { if let Some(result) = self.keys.checked_sub(num_keys) { self.keys = result; } else { self.keys = 0; } } }