Drop Timer
This commit is contained in:
parent
516efd17e2
commit
89afe54e37
21
src/game.zig
21
src/game.zig
|
@ -89,6 +89,11 @@ pub fn init(_renderer: *SDL.SDL_Renderer) Self {
|
||||||
pub fn tick(self: *Self) void {
|
pub fn tick(self: *Self) void {
|
||||||
|
|
||||||
// TIMERS
|
// TIMERS
|
||||||
|
if (self.piece.timer_dropped.finished()) {
|
||||||
|
self.piece.timer_dropped.stop();
|
||||||
|
self.piece.dropped = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (self.action_list[@enumToInt(Action.Offset.down)].holding) {
|
if (self.action_list[@enumToInt(Action.Offset.down)].holding) {
|
||||||
if (!self.timer_down.started) {
|
if (!self.timer_down.started) {
|
||||||
self.timer_down.start();
|
self.timer_down.start();
|
||||||
|
@ -100,6 +105,14 @@ pub fn tick(self: *Self) void {
|
||||||
self.timer_down.stop();
|
self.timer_down.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DROP
|
||||||
|
|
||||||
|
if (self.piece.dropped) {
|
||||||
|
self.grid = movement.drop(self.grid, self.piece);
|
||||||
|
// New Piece
|
||||||
|
self.piece = self.bag.pop();
|
||||||
|
}
|
||||||
|
|
||||||
// KEY EVENTS
|
// KEY EVENTS
|
||||||
var key_state = SDL.SDL_GetKeyboardState(null);
|
var key_state = SDL.SDL_GetKeyboardState(null);
|
||||||
|
|
||||||
|
@ -120,14 +133,6 @@ pub fn tick(self: *Self) void {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// DROP
|
|
||||||
|
|
||||||
if (self.piece.dropped) {
|
|
||||||
self.grid = movement.drop(self.grid, self.piece);
|
|
||||||
// New Piece
|
|
||||||
self.piece = self.bag.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update Shadow
|
// Update Shadow
|
||||||
{
|
{
|
||||||
self.shadow = movement.shadow(self.grid, self.piece);
|
self.shadow = movement.shadow(self.grid, self.piece);
|
||||||
|
|
|
@ -2,12 +2,28 @@ const std = @import("std");
|
||||||
const Grid = @import("grid.zig");
|
const Grid = @import("grid.zig");
|
||||||
const Piece = @import("piece.zig");
|
const Piece = @import("piece.zig");
|
||||||
|
|
||||||
|
fn checkDrop (grid: Grid, piece: Piece) Piece {
|
||||||
|
var new_piece = piece;
|
||||||
|
if(moveDown(grid, piece).timer_dropped.started) {
|
||||||
|
if (new_piece.timer_dropped.started) {
|
||||||
|
new_piece.timer_dropped.reset();
|
||||||
|
} else {
|
||||||
|
new_piece.timer_dropped.start();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
new_piece.timer_dropped.stop();
|
||||||
|
}
|
||||||
|
return new_piece;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn moveRight(grid: Grid, piece: Piece) Piece {
|
pub fn moveRight(grid: Grid, piece: Piece) Piece {
|
||||||
|
|
||||||
var new_piece = piece;
|
var new_piece = piece;
|
||||||
new_piece.col += 1;
|
new_piece.col += 1;
|
||||||
if (checkCollision(grid, new_piece)) {
|
if (checkCollision(grid, new_piece)) {
|
||||||
return piece;
|
return piece;
|
||||||
} else {
|
} else {
|
||||||
|
new_piece = checkDrop(grid, new_piece);
|
||||||
return new_piece;
|
return new_piece;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +34,7 @@ pub fn moveLeft(grid: Grid, piece: Piece) Piece {
|
||||||
if (checkCollision(grid, new_piece)) {
|
if (checkCollision(grid, new_piece)) {
|
||||||
return piece;
|
return piece;
|
||||||
} else {
|
} else {
|
||||||
|
new_piece = checkDrop(grid, new_piece);
|
||||||
return new_piece;
|
return new_piece;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,16 +44,19 @@ pub fn moveDown(grid: Grid, piece: Piece) Piece {
|
||||||
new_piece.row += 1;
|
new_piece.row += 1;
|
||||||
if (checkCollision(grid, new_piece)) {
|
if (checkCollision(grid, new_piece)) {
|
||||||
new_piece.row -= 1;
|
new_piece.row -= 1;
|
||||||
new_piece.dropped = true;
|
if (!new_piece.timer_dropped.started) {
|
||||||
|
new_piece.timer_dropped.start();
|
||||||
|
}
|
||||||
return new_piece;
|
return new_piece;
|
||||||
} else {
|
} else {
|
||||||
|
new_piece.timer_dropped.stop();
|
||||||
return new_piece;
|
return new_piece;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn hardDrop(grid: Grid, piece: Piece) Piece {
|
pub fn hardDrop(grid: Grid, piece: Piece) Piece {
|
||||||
var new_piece = piece;
|
var new_piece = piece;
|
||||||
while (!new_piece.dropped) {
|
while (!new_piece.timer_dropped.started) {
|
||||||
new_piece = moveDown(grid, new_piece);
|
new_piece = moveDown(grid, new_piece);
|
||||||
}
|
}
|
||||||
return new_piece;
|
return new_piece;
|
||||||
|
@ -76,14 +96,14 @@ fn checkCollision(grid: Grid, piece: Piece) bool {
|
||||||
pub fn rotateLeft(grid: Grid, piece: Piece) Piece {
|
pub fn rotateLeft(grid: Grid, piece: Piece) Piece {
|
||||||
var new_piece = piece.rotate(Piece.Rot.left);
|
var new_piece = piece.rotate(Piece.Rot.left);
|
||||||
new_piece = kick(grid, new_piece, piece);
|
new_piece = kick(grid, new_piece, piece);
|
||||||
std.debug.print("{}\n", .{new_piece.rot_stage});
|
new_piece = checkDrop(grid, new_piece);
|
||||||
return new_piece;
|
return new_piece;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rotateRight(grid: Grid, piece: Piece) Piece {
|
pub fn rotateRight(grid: Grid, piece: Piece) Piece {
|
||||||
var new_piece = piece.rotate(Piece.Rot.right);
|
var new_piece = piece.rotate(Piece.Rot.right);
|
||||||
new_piece = kick(grid, new_piece, piece);
|
new_piece = kick(grid, new_piece, piece);
|
||||||
std.debug.print("{}\n", .{new_piece.rot_stage});
|
new_piece = checkDrop(grid, new_piece);
|
||||||
return new_piece;
|
return new_piece;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ const std = @import("std");
|
||||||
|
|
||||||
const Color = @import("color.zig");
|
const Color = @import("color.zig");
|
||||||
const Grid = @import("grid.zig");
|
const Grid = @import("grid.zig");
|
||||||
|
const Timer = @import("timer.zig");
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
|
@ -41,6 +42,8 @@ structure: [4][4]bool,
|
||||||
// Rotation Stage
|
// Rotation Stage
|
||||||
rot_stage: RotStage = RotStage.init,
|
rot_stage: RotStage = RotStage.init,
|
||||||
|
|
||||||
|
// Timer to drop the piece
|
||||||
|
timer_dropped: Timer,
|
||||||
// Should this be dropped and become part of the grid (flag)
|
// Should this be dropped and become part of the grid (flag)
|
||||||
dropped: bool = false,
|
dropped: bool = false,
|
||||||
// Has the piece been swapped?
|
// Has the piece been swapped?
|
||||||
|
@ -55,6 +58,8 @@ pub fn init(piece_type: Type) Self {
|
||||||
.col = (Grid.ncolumns / 2) - (ncols / 2),
|
.col = (Grid.ncolumns / 2) - (ncols / 2),
|
||||||
.piece_type = piece_type,
|
.piece_type = piece_type,
|
||||||
|
|
||||||
|
.timer_dropped = Timer.init(500),
|
||||||
|
|
||||||
.structure = switch (piece_type) {
|
.structure = switch (piece_type) {
|
||||||
Type.o => .{
|
Type.o => .{
|
||||||
.{ false, true, true, false },
|
.{ false, true, true, false },
|
||||||
|
|
|
@ -33,6 +33,11 @@ pub fn finished(self: *Self) bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn reset(self: *Self) void {
|
||||||
|
self.progress = 0;
|
||||||
|
self.initial = SDL.SDL_GetTicks64();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn stop(self: *Self) void {
|
pub fn stop(self: *Self) void {
|
||||||
self.started = false;
|
self.started = false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue