From cb685efe0cc32112242d4f657ee802505d2e6dc4 Mon Sep 17 00:00:00 2001 From: Christopher Date: Thu, 2 Mar 2023 13:48:42 +1300 Subject: [PATCH] random system damage on hit --- 84_Super_Star_Trek/rust/src/commands.rs | 1 - 84_Super_Star_Trek/rust/src/model.rs | 17 +++++++++++++++++ 84_Super_Star_Trek/rust/tasks.md | 5 +++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/84_Super_Star_Trek/rust/src/commands.rs b/84_Super_Star_Trek/rust/src/commands.rs index 86c72f98..c5e59c12 100644 --- a/84_Super_Star_Trek/rust/src/commands.rs +++ b/84_Super_Star_Trek/rust/src/commands.rs @@ -86,7 +86,6 @@ fn move_enterprise(course: u8, warp_speed: f32, galaxy: &mut Galaxy) { view::hit_edge(&end); } - if ship.quadrant != end.quadrant { view::enter_quadrant(&end.quadrant); diff --git a/84_Super_Star_Trek/rust/src/model.rs b/84_Super_Star_Trek/rust/src/model.rs index f46cc548..c968c08a 100644 --- a/84_Super_Star_Trek/rust/src/model.rs +++ b/84_Super_Star_Trek/rust/src/model.rs @@ -60,7 +60,24 @@ impl Enterprise { } view::shields_hit(self.shields); + // take damage if strength is greater than 20 + if hit_strength >= 20 { + self.take_damage(hit_strength) + } + } + + fn take_damage(&mut self, hit_strength: u16) { + let mut rng = rand::thread_rng(); + + let hit_past_shield = hit_strength as f32 / self.shields as f32; + if rng.gen::() > 0.6 || hit_past_shield < 0.02 { + return + } + + let system = systems::ALL[rng.gen_range(0..systems::ALL.len())].to_string(); + let damage = hit_past_shield + rng.gen::() * 0.5; + self.damaged.entry(system).and_modify(|d| *d += damage).or_insert(damage); } } diff --git a/84_Super_Star_Trek/rust/tasks.md b/84_Super_Star_Trek/rust/tasks.md index 29f47cd3..c55914df 100644 --- a/84_Super_Star_Trek/rust/tasks.md +++ b/84_Super_Star_Trek/rust/tasks.md @@ -11,8 +11,9 @@ Started after movement and display of stats was finished (no energy management o - [x] shields - [x] shield control - [x] shield hit absorption -- [ ] subsystem damage - - and support for reports +- [x] subsystem damage + - [ ] and support for reports +- [ ] random system damage on move - [ ] lrs? - [ ] stranded... - [ ] stop before hitting an object