74 lines
1.7 KiB
Rust
74 lines
1.7 KiB
Rust
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;
|
|
}
|
|
}
|
|
}
|