From a178c99795a37119fb0c7b935e71a272cd405312 Mon Sep 17 00:00:00 2001
From: radow <masteroftheriddles@googlemail.com>
Date: Sun, 4 Jul 2021 13:27:40 +0200
Subject: [PATCH] ensured entities spawn on empty tile

---
 src/game_state/level.rs | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/game_state/level.rs b/src/game_state/level.rs
index 6d160c9..75faa04 100644
--- a/src/game_state/level.rs
+++ b/src/game_state/level.rs
@@ -107,13 +107,13 @@ impl Level {
     }
 
     fn add_entity(entity: Tile, board: Board) -> Board {
-        let empty_count = Level::count_empty_tiles(board);
-        let entity_position = thread_rng().gen_range(0, empty_count);
-        let entity_x = entity_position / config::BOARD_HEIGHT;
-        let entity_y = entity_position % config::BOARD_HEIGHT;
-
+        // let empty_count = Level::count_empty_tiles(board);
+        // let entity_position = thread_rng().gen_range(0, empty_count);
+        // let entity_x = entity_position / config::BOARD_HEIGHT;
+        // let entity_y = entity_position % config::BOARD_HEIGHT;
+        let entity_pos = Level::get_empty_tile(board);
         let mut board = board.clone();
-        board[entity_x][entity_y] = entity;
+        board[entity_pos.x][entity_pos.y] = entity;
         board
     }
 
@@ -130,6 +130,24 @@ impl Level {
 
         result
     }
+
+    fn get_empty_tile(board:Board) -> Vec2<usize>{
+        let empty_count = Level::count_empty_tiles(board);
+        let empty_position = thread_rng().gen_range(0, empty_count);
+        let mut empty_skipped:usize = 0;
+        for x in 0..board.len() {
+            for y in 0..board[x].len() {
+                match board[x][y] {
+                    Tile::Empty => empty_skipped += 1,
+                    _ => {},
+                }
+                if empty_skipped == empty_position{
+                    return Vec2::new(x,y);
+                }
+            }
+        }
+        Vec2::new(0,0)
+    }
 }
 
 
-- 
GitLab