Added timers to the game
This commit is contained in:
+29
-11
@@ -8,6 +8,7 @@ const SCREEN_HEIGHT = 480;
|
||||
const log = sdl.SDL_Log;
|
||||
const GameText = @import("./text.zig").GameText;
|
||||
const RGBAColor = @import("./utils/rgb_color.zig").RGBAColor;
|
||||
const Timer = @import("./utils/timer.zig").Timer;
|
||||
|
||||
var window: *sdl.struct_SDL_Window = undefined;
|
||||
// var screen_surface: *sdl.struct_SDL_Surface = undefined;
|
||||
@@ -41,6 +42,8 @@ pub fn main() !void {
|
||||
|
||||
var quit = false;
|
||||
var shifted = false;
|
||||
var start_time: u32 = 0;
|
||||
var timer = Timer{};
|
||||
while (!quit) {
|
||||
var event: sdl.SDL_Event = undefined;
|
||||
while (sdl.SDL_PollEvent(&event) != 0) {
|
||||
@@ -58,17 +61,14 @@ pub fn main() !void {
|
||||
},
|
||||
sdl.SDL_KEYDOWN => {
|
||||
switch (event.key.keysym.sym) {
|
||||
sdl.SDLK_r => {
|
||||
game_state.r = if (shifted) game_state.r - 5 else game_state.r + 5;
|
||||
sdl.SDLK_RETURN => {
|
||||
start_time = sdl.SDL_GetTicks();
|
||||
},
|
||||
sdl.SDLK_g => {
|
||||
game_state.g = if (shifted) game_state.g - 5 else game_state.g + 5;
|
||||
sdl.SDLK_s => {
|
||||
if (timer.status == .started) timer.stop() else timer.start();
|
||||
},
|
||||
sdl.SDLK_b => {
|
||||
game_state.b = if (shifted) game_state.b - 5 else game_state.b + 5;
|
||||
},
|
||||
sdl.SDLK_LSHIFT => {
|
||||
shifted = true;
|
||||
sdl.SDLK_p => {
|
||||
if (timer.status == .paused) timer.unpause() else timer.pause();
|
||||
},
|
||||
// sdl.SDLK_UP => {
|
||||
// img_pos.y = img_pos.y - 5;
|
||||
@@ -93,8 +93,26 @@ pub fn main() !void {
|
||||
_ = sdl.SDL_RenderClear(renderer);
|
||||
_ = sdl.SDL_RenderCopy(renderer, bg_texture, null, null);
|
||||
game_state.update_tick();
|
||||
var text = try GameText.loadFromRenderedText("Test 123", RGBAColor.whiteSmoke().tosdl());
|
||||
try text.render(&game_state);
|
||||
var text = try GameText.loadFromRenderedText("Press S to start / stop", RGBAColor.whiteSmoke().tosdl());
|
||||
try text.render(
|
||||
&game_state,
|
||||
.{ .x = @intCast(game_state.SCREEN_WIDTH - text.w), .y = 2 },
|
||||
);
|
||||
text = try GameText.loadFromRenderedText("Press P to pause / unpause", RGBAColor.whiteSmoke().tosdl());
|
||||
try text.render(
|
||||
&game_state,
|
||||
.{ .x = @intCast(game_state.SCREEN_WIDTH - text.w), .y = 24 },
|
||||
);
|
||||
|
||||
var buf: [8]u8 = undefined;
|
||||
const timer_ms = timer.getTicks();
|
||||
// const timer_base = std.math.log10(timer_ms) + 3;
|
||||
const time_str: []const u8 = try std.fmt.bufPrint(&buf, "{d}ms", .{timer_ms});
|
||||
var time_text = try GameText.loadFromRenderedText(time_str, RGBAColor.whiteSmoke().tosdl());
|
||||
try time_text.render(
|
||||
&game_state,
|
||||
.{ .x = @intCast(game_state.SCREEN_WIDTH - time_text.w), .y = 64 },
|
||||
);
|
||||
|
||||
// Render red rect
|
||||
// const fill_rect: sdl.struct_SDL_Rect = sdl.SDL_Rect{ .x = SCREEN_WIDTH / 4, .y = SCREEN_HEIGHT / 4, .w = SCREEN_WIDTH / 2 + img_pos.x, .h = SCREEN_HEIGHT / 2 + img_pos.y };
|
||||
|
||||
Reference in New Issue
Block a user