From 5adc005f6f668f833cc7c0e308328f61d0be47e7 Mon Sep 17 00:00:00 2001 From: Strangedusk Date: Sat, 3 Sep 2022 20:41:26 +0200 Subject: [PATCH] Detect top out and return to menu WIP --- src/Game.zig | 15 +++++++++++++++ src/Game/Grid.zig | 1 - src/Game/movement.zig | 35 +++++++++++++++++++++++++++++++++++ src/MainMenu.zig | 8 ++++++++ src/main.zig | 8 ++++++++ 5 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/Game.zig b/src/Game.zig index 0aff27a..f564257 100644 --- a/src/Game.zig +++ b/src/Game.zig @@ -53,6 +53,8 @@ timer_right_arr: Timer, timer_right_das: Timer, timer_gravity: Timer, +needs_reinit: bool = false, + pub fn init(renderer: *Renderer.Renderer) Self { var ret = Self{ .grid = Grid.init(), @@ -76,6 +78,8 @@ pub fn init(renderer: *Renderer.Renderer) Self { return ret; } + +// Main Game loop pub fn tick(self: *Self) State { // TIMERS @@ -188,6 +192,17 @@ pub fn tick(self: *Self) State { self.shadow.color.a /= 4; } + // Check for a top out + { + if (movement.isToppedOut(self.grid)) { + std.debug.print("Topped Out!\n", .{}); + // Return to main menu + self.state = State.main_menu; + // Flag that I need a reset + self.needs_reinit = true; + } + } + self.grid.clearLines(); self.renderer.render(self.*); diff --git a/src/Game/Grid.zig b/src/Game/Grid.zig index f2598d1..e4cec63 100644 --- a/src/Game/Grid.zig +++ b/src/Game/Grid.zig @@ -47,4 +47,3 @@ pub fn clearLines(self: *Self) void { } } } - diff --git a/src/Game/movement.zig b/src/Game/movement.zig index 9770874..2ae4ff1 100644 --- a/src/Game/movement.zig +++ b/src/Game/movement.zig @@ -232,3 +232,38 @@ fn checkTTwist(grid: Grid, piece: Piece) bool { } return false; } + +pub fn isToppedOut(grid: Grid) bool { + + // First check if a cell in the first rows are occupied + // const row_limit = 5; + // var i: usize = 0; // Go through rows + // var j: usize = 0; // Go through columns + // while(i < row_limit) { + // while (j < Grid.ncols) { + // if (!grid.cells[i][j].free) { + // return true; + // } + // } + // j = 0; + // } + + // Must check certain cells (where pieces spawn) + // rows 20, 21, 22, 23, columns 3, 4, 5, 6 + // + const cells_to_check = .{ + .{7, 3},.{7, 4},.{7, 5},.{7, 6}, + .{8, 3},.{8, 4},.{8, 5},.{8, 6}, + .{9, 3},.{9, 4},.{9, 5},.{9, 6}, + .{10, 3},.{10, 4},.{10, 5},.{10, 6}, + }; + inline for (cells_to_check) |cell| { + const row = cell[0]; + const col = cell[1]; + if (!grid.cells[row][col].free) { + return true; + } + } + return false; + +} diff --git a/src/MainMenu.zig b/src/MainMenu.zig index f28f0b6..aecc0fa 100644 --- a/src/MainMenu.zig +++ b/src/MainMenu.zig @@ -46,6 +46,8 @@ state: State = State.main_menu, holding_down: bool = false, holding_enter: bool = false, +needs_reinit: bool = false, + pub fn init(renderer: *Renderer.Renderer) Self { return Self{ .renderer = Renderer.init(renderer) }; } @@ -84,6 +86,12 @@ pub fn getTab(self: Self) MenuTab { } pub fn tick(self: *Self) State { + + if (self.state != State.main_menu) { + // If we are returnining + self.state = State.main_menu; + } + //const sel = self.getSel(); //const tab = self.getTab(); var key_state = SDL.getKeyboardState(); diff --git a/src/main.zig b/src/main.zig index 7766b82..bcdc581 100644 --- a/src/main.zig +++ b/src/main.zig @@ -28,6 +28,14 @@ pub fn main() !void { } } + if (game.needs_reinit) { + game = Game.init(&renderer); + } + + if (main_menu.needs_reinit) { + main_menu = MainMenu.init(&renderer); + } + current_state = switch (current_state) { .main_menu => main_menu.tick(), .game => game.tick(),