Detect top out and return to menu WIP
This commit is contained in:
parent
8d47cb26f5
commit
5adc005f6f
15
src/Game.zig
15
src/Game.zig
|
@ -53,6 +53,8 @@ timer_right_arr: Timer,
|
||||||
timer_right_das: Timer,
|
timer_right_das: Timer,
|
||||||
timer_gravity: Timer,
|
timer_gravity: Timer,
|
||||||
|
|
||||||
|
needs_reinit: bool = false,
|
||||||
|
|
||||||
pub fn init(renderer: *Renderer.Renderer) Self {
|
pub fn init(renderer: *Renderer.Renderer) Self {
|
||||||
var ret = Self{
|
var ret = Self{
|
||||||
.grid = Grid.init(),
|
.grid = Grid.init(),
|
||||||
|
@ -76,6 +78,8 @@ pub fn init(renderer: *Renderer.Renderer) Self {
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Main Game loop
|
||||||
pub fn tick(self: *Self) State {
|
pub fn tick(self: *Self) State {
|
||||||
|
|
||||||
// TIMERS
|
// TIMERS
|
||||||
|
@ -188,6 +192,17 @@ pub fn tick(self: *Self) State {
|
||||||
self.shadow.color.a /= 4;
|
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.grid.clearLines();
|
||||||
|
|
||||||
self.renderer.render(self.*);
|
self.renderer.render(self.*);
|
||||||
|
|
|
@ -47,4 +47,3 @@ pub fn clearLines(self: *Self) void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -232,3 +232,38 @@ fn checkTTwist(grid: Grid, piece: Piece) bool {
|
||||||
}
|
}
|
||||||
return false;
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -46,6 +46,8 @@ state: State = State.main_menu,
|
||||||
holding_down: bool = false,
|
holding_down: bool = false,
|
||||||
holding_enter: bool = false,
|
holding_enter: bool = false,
|
||||||
|
|
||||||
|
needs_reinit: bool = false,
|
||||||
|
|
||||||
pub fn init(renderer: *Renderer.Renderer) Self {
|
pub fn init(renderer: *Renderer.Renderer) Self {
|
||||||
return Self{ .renderer = Renderer.init(renderer) };
|
return Self{ .renderer = Renderer.init(renderer) };
|
||||||
}
|
}
|
||||||
|
@ -84,6 +86,12 @@ pub fn getTab(self: Self) MenuTab {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn tick(self: *Self) State {
|
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 sel = self.getSel();
|
||||||
//const tab = self.getTab();
|
//const tab = self.getTab();
|
||||||
var key_state = SDL.getKeyboardState();
|
var key_state = SDL.getKeyboardState();
|
||||||
|
|
|
@ -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) {
|
current_state = switch (current_state) {
|
||||||
.main_menu => main_menu.tick(),
|
.main_menu => main_menu.tick(),
|
||||||
.game => game.tick(),
|
.game => game.tick(),
|
||||||
|
|
Loading…
Reference in New Issue