random system damage on hit

This commit is contained in:
Christopher
2023-03-02 13:48:42 +13:00
parent f253ff7155
commit cb685efe0c
3 changed files with 20 additions and 3 deletions

View File

@@ -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);

View File

@@ -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::<f32>() > 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::<f32>() * 0.5;
self.damaged.entry(system).and_modify(|d| *d += damage).or_insert(damage);
}
}

View File

@@ -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