usg/src/renderer.zig

113 lines
3.6 KiB
Zig

const SDL = @import("sdl2");
const Game = @import("Game.zig");
const Bag = @import("Bag.zig");
const Grid = @import("Grid.zig");
const Piece = @import("Piece.zig");
const color = @import("color.zig");
pub fn renderBag(game: Game) void {
const pos_x = game.grid_pos_x + ((Grid.ncolumns + 1) * game.grid_cell_size);
const pos_y = game.grid_pos_y + (Grid.buffer * game.grid_cell_size);
const cell_size = game.grid_cell_size;
var rect = SDL.SDL_Rect{
.x = pos_x,
.y = pos_y,
.w = cell_size,
.h = cell_size,
};
//var trans: u8 = 0;
var r: u8 = 0;
var g: u8 = 0;
var b: u8 = 0;
var a: u8 = 255;
for (game.bag.contents[0..5]) |_, i| {
if (game.bag.contents[i]) |piece_type| {
var piece = Piece.init(piece_type);
for (piece.structure) |_, y| {
for (piece.structure[y]) |_, x| {
if (piece.structure[y][x]) {
r = piece.color.r;
g = piece.color.g;
b = piece.color.b;
a = piece.color.a;
} else {
r = piece.color.r;
g = piece.color.g;
b = piece.color.b;
a = 50;
}
rect.x = pos_x + @intCast(i32, x) * cell_size;
rect.y = pos_y + (@intCast(i32, y) + @intCast(i32, i * piece.structure.len)) * cell_size;
_ = SDL.SDL_SetRenderDrawColor(game.renderer, r, g, b, a);
_ = SDL.SDL_RenderFillRect(game.renderer, &rect);
_ = SDL.SDL_SetRenderDrawColor(game.renderer, r -| 30, g -| 30, b -| 30, a);
_ = SDL.SDL_RenderDrawRect(game.renderer, &rect);
}
}
}
}
}
pub fn renderHeld(game: Game) void {
const pos_x = game.grid_pos_x - (5 * game.grid_cell_size);
const pos_y = game.grid_pos_y + (Grid.buffer * game.grid_cell_size);
const cell_size = game.grid_cell_size;
var rect = SDL.SDL_Rect{
.x = pos_x,
.y = pos_y,
.w = cell_size,
.h = cell_size,
};
//var trans: u8 = 0;
var r: u8 = 0;
var g: u8 = 0;
var b: u8 = 0;
var a: u8 = 255;
if (game.held) |held_type| {
var held = Piece.init(held_type);
for (held.structure) |_, y| {
for (held.structure[y]) |_, x| {
if (held.structure[y][x]) {
r = held.color.r;
g = held.color.g;
b = held.color.b;
a = held.color.a;
} else {
r = held.color.r;
g = held.color.g;
b = held.color.b;
a = 50;
}
rect.x = pos_x + @intCast(i32, x) * cell_size;
rect.y = pos_y + @intCast(i32, y) * cell_size;
_ = SDL.SDL_SetRenderDrawColor(game.renderer, r, g, b, a);
_ = SDL.SDL_RenderFillRect(game.renderer, &rect);
_ = SDL.SDL_SetRenderDrawColor(game.renderer, r -| 30, g -| 30, b -| 30, a);
_ = SDL.SDL_RenderDrawRect(game.renderer, &rect);
}
}
}
}
pub fn render(game: Game) void {
game.grid.render(game.renderer, game.grid_cell_size, game.grid_pos_x, game.grid_pos_y);
game.piece.render(game.renderer, game.grid_cell_size, game.grid_pos_x, game.grid_pos_y);
game.shadow.render(game.renderer, game.grid_cell_size, game.grid_pos_x, game.grid_pos_y);
renderBag(game);
renderHeld(game);
}