From 11c791a59ac60241f253cdfb4e8765039d15edff Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Wed, 9 May 2018 22:51:38 +0200 Subject: Added converting from JSON code to game engine representation --- src/engine/geometry.rs | 3 +++ src/engine/mod.rs | 64 ++++++++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 33 deletions(-) (limited to 'src/engine') diff --git a/src/engine/geometry.rs b/src/engine/geometry.rs index f2a2522..a946bf9 100644 --- a/src/engine/geometry.rs +++ b/src/engine/geometry.rs @@ -5,6 +5,9 @@ pub struct Point { } impl Point { + pub fn new(x: u8, y: u8) -> Point { + Point { x, y } + } pub fn move_left(&self) -> Option { self.x.checked_sub(1).map(|x| Point { x: x, diff --git a/src/engine/mod.rs b/src/engine/mod.rs index d321572..4ea63a3 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -10,14 +10,14 @@ use std::ops::Fn; use std::cmp; #[derive(Debug, Clone)] -struct GameState { - status: GameStatus, - player: Player, - opponent: Player, - player_buildings: Vec, - opponent_buildings: Vec, - player_missiles: Vec, - opponent_missiles: Vec +pub struct GameState { + pub status: GameStatus, + pub player: Player, + pub opponent: Player, + pub player_buildings: Vec, + pub opponent_buildings: Vec, + pub player_missiles: Vec, + pub opponent_missiles: Vec } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -37,20 +37,20 @@ impl GameStatus { #[derive(Debug, Clone)] pub struct Player { - energy: u16, - health: u16 + pub energy: u16, + pub health: u16 } #[derive(Debug, Clone)] -struct Building { - pos: Point, - health: u16, - construction_time_left: u8, - weapon_damage: u16, - weapon_speed: u8, - weapon_cooldown_time_left: u8, - weapon_cooldown_period: u8, - energy_generated_per_turn: u16 +pub struct Building { + pub pos: Point, + pub health: u16, + pub construction_time_left: u8, + pub weapon_damage: u16, + pub weapon_speed: u8, + pub weapon_cooldown_time_left: u8, + pub weapon_cooldown_period: u8, + pub energy_generated_per_turn: u16 } impl Building { @@ -87,7 +87,6 @@ impl Building { energy_generated_per_turn: 3 } } - } fn is_constructed(&self) -> bool { @@ -95,21 +94,15 @@ impl Building { } fn is_shooty(&self) -> bool { - self.is_constructed() && self.weapon_damage >= 0 + self.is_constructed() && self.weapon_damage > 0 } } #[derive(Debug, Clone)] -struct Missile { - pos: Point, - damage: u16, - speed: u8, -} - -impl Missile { - fn is_stopped(&self) -> bool { - self.speed == 0 - } +pub struct Missile { + pub pos: Point, + pub damage: u16, + pub speed: u8, } impl GameState { @@ -119,8 +112,13 @@ impl GameState { } let mut state = self.clone(); - GameState::perform_command(&mut state.player_buildings, player_command, &settings.size); - GameState::perform_command(&mut state.opponent_buildings, opponent_command, &settings.size); + let player_valid = GameState::perform_command(&mut state.player_buildings, player_command, &settings.size); + let opponent_valid = GameState::perform_command(&mut state.opponent_buildings, opponent_command, &settings.size); + + if !player_valid || !opponent_valid { + state.status = GameStatus::InvalidMove; + return state; + } GameState::update_construction(&mut state.player_buildings); GameState::update_construction(&mut state.opponent_buildings); -- cgit v1.2.3