added warning messages when entering a sector

This commit is contained in:
Christopher
2023-03-02 10:02:56 +13:00
parent dee8a96f3c
commit 4cda6be184
5 changed files with 37 additions and 16 deletions

View File

@@ -10,6 +10,13 @@ pub fn move_enterprise(course: u8, warp_speed: f32, galaxy: &mut Galaxy) {
if galaxy.enterprise.quadrant != end.quadrant {
view::enter_quadrant(&end.quadrant);
if galaxy.quadrants[end.quadrant.as_index()].klingons.len() > 0 {
view::condition_red();
if galaxy.enterprise.shields <= 200 {
view::danger_shields();
}
}
}
galaxy.enterprise.quadrant = end.quadrant;

View File

@@ -2,8 +2,6 @@ use std::{io::{stdin, stdout, Write, Read}, process::exit, str::FromStr};
use model::Galaxy;
use crate::model::Condition;
mod model;
mod commands;
mod view;
@@ -28,7 +26,7 @@ fn main() {
_ => view::print_command_help()
}
if galaxy.enterprise.condition == Condition::Destroyed { // todo: also check if stranded
if galaxy.enterprise.destroyed { // todo: also check if stranded
view::end_game_failure(&galaxy);
break;
}
@@ -50,7 +48,7 @@ fn gather_dir_and_speed_then_move(galaxy: &mut Galaxy) {
}
commands::move_klingons_and_fire(galaxy);
if galaxy.enterprise.condition == Condition::Destroyed {
if galaxy.enterprise.destroyed {
return;
}
commands::move_enterprise(course.unwrap(), speed.unwrap(), galaxy);

View File

@@ -36,7 +36,8 @@ impl Klingon {
}
pub struct Enterprise {
pub condition: Condition,
pub destroyed: bool,
pub damaged: bool, // later this could be by subsystem
pub quadrant: Pos,
pub sector: Pos,
pub photon_torpedoes: u8,
@@ -45,7 +46,7 @@ pub struct Enterprise {
}
impl Enterprise {
fn take_hit(&mut self, sector: Pos, hit_strength: u16) {
if self.condition == Condition::Destroyed {
if self.destroyed {
return;
}
@@ -55,7 +56,7 @@ impl Enterprise {
if self.shields <= 0 {
view::enterprise_destroyed();
self.condition = Condition::Destroyed;
self.destroyed = true
}
// report shields
@@ -63,12 +64,6 @@ impl Enterprise {
}
}
#[derive(PartialEq, Debug)]
pub enum Condition {
Green, Yellow, Red,
Destroyed,
}
pub struct EndPosition {
pub quadrant: Pos,
pub sector: Pos,
@@ -150,7 +145,8 @@ impl Galaxy {
final_stardate: stardate + rng.gen_range(25..=35) as f32,
quadrants: quadrants,
enterprise: Enterprise {
condition: Condition::Green,
destroyed: false,
damaged: false,
quadrant: enterprise_quadrant,
sector: enterprise_sector,
photon_torpedoes: 28,

View File

@@ -79,10 +79,16 @@ pub fn enter_quadrant(quadrant: &Pos) {
pub fn short_range_scan(model: &Galaxy) {
let quadrant = &model.quadrants[model.enterprise.quadrant.as_index()];
let mut condition = "GREEN";
if quadrant.klingons.len() > 0 {
condition = "*RED*";
} else if model.enterprise.damaged {
condition = "YELLOW";
}
let data : [String; 8] = [
format!("Stardate {}", model.stardate),
format!("Condition {:?}", model.enterprise.condition),
format!("Condition {}", condition),
format!("Quadrant {}", model.enterprise.quadrant),
format!("Sector {}", model.enterprise.sector),
format!("Photon torpedoes {}", model.enterprise.photon_torpedoes),
@@ -151,3 +157,11 @@ pub fn hit_edge(end: &EndPosition) {
Chief Engineer Scott reports, 'Warp engines shut down
at sector {} of quadrant {}.'", end.quadrant, end.sector);
}
pub fn condition_red() {
println!("COMBAT AREA CONDITION RED")
}
pub fn danger_shields() {
println!(" SHIELDS DANGEROUSLY LOW ")
}

View File

@@ -6,10 +6,16 @@ Started after movement and display of stats was finished (no energy management o
- [x] klingon firing, game over etc
- [x] add intro
- [x] add entering (and starting in) sector headers
- [ ] conditions and danger messages
- [x] conditions and danger messages
- [ ] remove energy on move
- [ ] shields
- [ ] shield control
- [ ] shield hit absorption
- [ ] subsystem damage
- and support for reports
- [ ] lrs?
- [ ] stranded...
- [ ] stop before hitting an object
- when moving across a sector, the enterprise should stop before it runs into something
- the current move is a jump, which makes this problematic. would need to rewrite it
- [ ] better command reading - support entering multiple values on a line (e.g. nav 3 0.1)