From 8023b65dc165eaaf2e6eaec589506859b02f5c75 Mon Sep 17 00:00:00 2001 From: BeardedBread Date: Thu, 1 Oct 2020 17:42:39 +0800 Subject: [PATCH] Add Timer to levels --- TODO | 4 ---- include/header.h | 1 + main.c | 24 +++++++++++++++++++++--- obj/kinematics.c | 5 +++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/TODO b/TODO index 3c4d343..df3bb4b 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,3 @@ -Add Level Restart Key: -- Easiest: Go to end of level to deallocate everything and reconstruct all -Add Timer function: -- Need to reset on level start Add Level Complete: - When all targets on the level is destroyed - Print a complete text diff --git a/include/header.h b/include/header.h index c1b785f..464d1c5 100644 --- a/include/header.h +++ b/include/header.h @@ -106,6 +106,7 @@ struct target_obj_node struct kinematic_obj init_kinematic_obj(int width, int height); void move(struct kinematic_obj *obj, Vector2 acceleration); void set_position(struct kinematic_obj *obj, int x, int y); +void set_velocity(struct kinematic_obj *obj, int velx, int vely); bool place_meeting(struct kinematic_obj *obj, Vector2 dir); void scale_rect(struct kinematic_obj *obj); void adjust_hitbox(struct kinematic_obj *obj); diff --git a/main.c b/main.c index 4f44d45..b7e1741 100644 --- a/main.c +++ b/main.c @@ -23,6 +23,9 @@ */ #include "header.h" +#include +#include + struct kinematic_obj_node *kinematic_HEAD = NULL; struct target_obj_node *target_HEAD = NULL; int PLAYER_ACCEL = 1500; @@ -84,8 +87,6 @@ int main_menu(Camera2D camera){ void play_test_level(Camera2D camera){ - char current_state[20]; - char current_spd[50]; struct player_obj player = { .kinematic = init_kinematic_obj(PLAYER_SIZE, PLAYER_SIZE), @@ -127,7 +128,12 @@ void play_test_level(Camera2D camera){ struct target_obj target = init_target(50, 300); set_position(&target.kinematic, 300, 100); add_target_node(&target, &target_HEAD); - + + unsigned int elapsed_time[3] = {0}; + + char current_state[20]; + char current_spd[50]; + char current_time[15]; //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key @@ -144,6 +150,9 @@ void play_test_level(Camera2D camera){ target_current = target_current->next; } set_position(&player.kinematic, 400, 100); + set_velocity(&player.kinematic, 0, 0); + memset(elapsed_time, 0, sizeof(elapsed_time)); + //continue; } player_input_check(&player); @@ -183,11 +192,20 @@ void play_test_level(Camera2D camera){ //DrawText(dir, 0, 50, 12, BLACK); sprintf(current_spd, "Velocity: {%.2f,%.2f}", player.kinematic.velocity.x,player.kinematic.velocity.y); DrawText(current_spd, 350, 0, 12, BLACK); + sprintf(current_time, "%u:%u.%03u", elapsed_time[2], elapsed_time[1], elapsed_time[0]); + DrawText(current_time, 350, 150, 12, BLACK); EndMode2D(); EndDrawing(); remove_last_afterimage(&player); //---------------------------------------------------------------------------------- + + float elapsed = GetFrameTime(); + elapsed_time[0] += GetFrameTime() * 1000; + elapsed_time[1] += elapsed_time[0] / 1000; + elapsed_time[0] %= 1000; + elapsed_time[2] += elapsed_time[1] / 60; + elapsed_time[1] %= 60; } // De-Initialization diff --git a/obj/kinematics.c b/obj/kinematics.c index 93c3973..77cf663 100644 --- a/obj/kinematics.c +++ b/obj/kinematics.c @@ -23,6 +23,11 @@ void set_position(struct kinematic_obj *obj, int x, int y){ obj->rect.y = y; }; +void set_velocity(struct kinematic_obj *obj, int velx, int vely){ + obj->velocity.x = velx; + obj->velocity.y = vely; +}; + void move(struct kinematic_obj *obj, Vector2 acceleration){ // Use Euler method for moving double delta = 1.0/60.0;