From 8fbcc7e9159374dc6982600291f7243177d05b16 Mon Sep 17 00:00:00 2001 From: dusk Date: Sun, 24 Sep 2023 22:53:52 +0200 Subject: [PATCH] Fix texture rendering for free cells --- src/Game/Renderer.zig | 80 ++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/src/Game/Renderer.zig b/src/Game/Renderer.zig index 5887f4d..516177e 100644 --- a/src/Game/Renderer.zig +++ b/src/Game/Renderer.zig @@ -14,6 +14,7 @@ renderer: *Renderer, grid_cell_size: i32, grid_pos_x: i32, grid_pos_y: i32, +cell_texture: Renderer.Texture, pub fn init(renderer: *Renderer) Self { var wsize = renderer.getOutputSize(); @@ -26,6 +27,7 @@ pub fn init(renderer: *Renderer) Self { .grid_pos_x = grid_pos_x, .grid_pos_y = grid_pos_y, .grid_cell_size = grid_cell_size, + .cell_texture = Renderer.Texture.init("res/cell.png"), }; } @@ -42,22 +44,22 @@ pub fn renderBag(self: *Self, game: Game) void { const new_x = pos_x + @as(i32, @intCast(x)) * self.grid_cell_size; const new_y = pos_y + (@as(i32, @intCast(y)) + @as(i32, @intCast(i * piece.structure.len))) * self.grid_cell_size; - var alpha: u8 = 50; - if (piece.structure[y][x]) { - alpha = 255; + self.cell_texture.drawTo(new_x, new_y, self.grid_cell_size, self.grid_cell_size, piece.color); + } else { + const alpha = 50; + + self.renderer.setColor([_]u8{ + piece.color[0] -| 30, // r + piece.color[1] -| 30, // g + piece.color[2] -| 30, // b + alpha, + }); + self.renderer.fillRectangle(new_x, new_y, self.grid_cell_size, self.grid_cell_size); + + self.renderer.setColor(.{ piece.color[0], piece.color[1], piece.color[2], alpha }); + self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); } - - self.renderer.setColor([_]u8{ - piece.color[0] -| 30, // r - piece.color[1] -| 30, // g - piece.color[2] -| 30, // b - alpha, - }); - self.renderer.fillRectangle(new_x, new_y, self.grid_cell_size, self.grid_cell_size); - - self.renderer.setColor(.{ piece.color[0], piece.color[1], piece.color[2], alpha }); - self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); } } } @@ -76,22 +78,22 @@ pub fn renderHeld(self: *Self, game: Game) void { const new_x = pos_x + @as(i32, @intCast(x)) * self.grid_cell_size; const new_y = pos_y + @as(i32, @intCast(y)) * self.grid_cell_size; - var alpha: u8 = 50; - if (held.structure[y][x]) { - alpha = 255; + self.cell_texture.drawTo(new_x, new_y, self.grid_cell_size, self.grid_cell_size, held.color); + } else { + const alpha = 50; + + self.renderer.setColor([_]u8{ + held.color[0] -| 30, // r + held.color[1] -| 30, // g + held.color[2] -| 30, // b + alpha, + }); + self.renderer.fillRectangle(new_x, new_y, self.grid_cell_size, self.grid_cell_size); + + self.renderer.setColor(.{ held.color[0], held.color[1], held.color[2], alpha }); + self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); } - - self.renderer.setColor([_]u8{ - held.color[0] -| 30, // r - held.color[1] -| 30, // g - held.color[2] -| 30, // b - alpha, - }); - self.renderer.fillRectangle(new_x, new_y, self.grid_cell_size, self.grid_cell_size); - - self.renderer.setColor(.{ held.color[0], held.color[1], held.color[2], alpha }); - self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); } } } @@ -119,15 +121,7 @@ pub fn renderPiece(self: *Self, piece: Piece) void { const new_x = pos_x + (@as(i32, @intCast(x)) + piece.col) * self.grid_cell_size; const new_y = pos_y + (@as(i32, @intCast(y)) + piece.row) * self.grid_cell_size; - self.renderer.setColor(.{ - piece.color[0] -| 30, - piece.color[1] -| 30, - piece.color[2] -| 30, - piece.color[3], - }); - self.renderer.fillRectangle(new_x, new_y, self.grid_cell_size, self.grid_cell_size); - self.renderer.setColor(piece.color); - self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); + self.cell_texture.drawTo(new_x, new_y, self.grid_cell_size, self.grid_cell_size, piece.color); } } } @@ -142,10 +136,18 @@ pub fn renderGrid(self: *Self, grid: Grid) void { const new_x = pos_x + @as(i32, @intCast(x)) * self.grid_cell_size; const new_y = pos_y + (@as(i32, @intCast(y)) + Grid.buffer) * self.grid_cell_size; + // Background self.renderer.setColor(color.light_grey); self.renderer.fillRectangle(new_x, new_y, self.grid_cell_size, self.grid_cell_size); - self.renderer.setColor(visible[y][x].color); - self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); + + if (visible[y][x].free) { + // Not dropped + self.renderer.setColor(visible[y][x].color); + self.renderer.fillRectangle(new_x + 1, new_y + 1, self.grid_cell_size - 2, self.grid_cell_size - 2); + } else { + // Dropped + self.cell_texture.drawTo(new_x, new_y, self.grid_cell_size, self.grid_cell_size, visible[y][x].color); + } } } }