From 667c68a706f557eb8cf622c2fd5f8f134fdaf546 Mon Sep 17 00:00:00 2001 From: Paul Weber <work@paul-weber.de> Date: Sun, 4 Jul 2021 01:42:38 +0200 Subject: [PATCH] Add exit (progress) mechanic --- src/game_state.rs | 9 +++++++++ src/game_state/level.rs | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/game_state.rs b/src/game_state.rs index f5aed50..38fc7a0 100644 --- a/src/game_state.rs +++ b/src/game_state.rs @@ -19,6 +19,7 @@ use rand::{thread_rng, Rng}; use tetra::graphics::text::{VectorFontBuilder, Font, Text}; use crate::game_state::combat_log::PlayerAction; use crate::game_state::combat_log::PlayerAction::Move; +use crate::game_state::level::Level; type Point = (usize, usize); @@ -123,11 +124,18 @@ impl GameState { } Tile::Wall => return false, Tile::Enemy(id) => self.attack_enemy(id, target_position), + Tile::Exit => return self.progress_level(), _ => () } true } + fn progress_level(&mut self) -> bool { + self.current_run.level_count += 1; + self.current_run.level = Level::new(self.current_run.level_count); + false + } + fn attack_enemy(&mut self, enemy_id: usize, enemy_position: Point) { let damage = self.current_run.player.attack_power + GameState::roll_dice(6); match self.current_run.level.enemies.get_mut(enemy_id) { @@ -325,6 +333,7 @@ impl GameState { Tile::Wall => GameState::draw_tile(self, Color::BLACK, draw_x, draw_y, ctx), Tile::Player => GameState::draw_player(self, draw_x, draw_y, ctx), Tile::Enemy(_) => GameState::draw_enemy(self, draw_x, draw_y, ctx), + Tile::Exit => GameState::draw_tile(self, Color::RED, draw_x, draw_y, ctx), _ => {} } } diff --git a/src/game_state/level.rs b/src/game_state/level.rs index 94fc136..2b6a8f1 100644 --- a/src/game_state/level.rs +++ b/src/game_state/level.rs @@ -100,7 +100,8 @@ impl Level { let with_walls = Level::add_walls(board); let with_player = Level::add_player(with_walls); let with_enemies = Level::add_enemies(enemy_count, with_player); - return with_enemies; + let with_exit = Level::add_exit(with_enemies); + return with_exit; } fn add_walls(board: Board) -> Board { @@ -117,6 +118,10 @@ impl Level { board } + fn add_exit(board: Board) -> Board { + Level::add_entity(Tile::Exit, board) + } + fn add_player(board: Board) -> Board { Level::add_entity(Tile::Player, board) } -- GitLab