Win screen

main
Cameron Murphy Reikes 2 years ago
parent d2e0f2596e
commit f053fdb445

@ -1,4 +1,4 @@
#define CURRENT_VERSION 10 // wehenver you change Entity increment this boz #define CURRENT_VERSION 11 // wehenver you change Entity increment this boz
// you will die someday // you will die someday
#define SOKOL_IMPL #define SOKOL_IMPL
@ -571,7 +571,9 @@ sg_image load_image(const char *path)
AABB level_aabb = { .upper_left = { 0.0f, 0.0f }, .lower_right = { TILE_SIZE * LEVEL_TILES, -(TILE_SIZE * LEVEL_TILES) } }; AABB level_aabb = { .upper_left = { 0.0f, 0.0f }, .lower_right = { TILE_SIZE * LEVEL_TILES, -(TILE_SIZE * LEVEL_TILES) } };
typedef struct GameState { typedef struct GameState {
int version; int version; // this field must be first to detect versions of old saves. Must bee consistent
bool won;
Entity entities[MAX_ENTITIES]; Entity entities[MAX_ENTITIES];
} GameState; } GameState;
GameState gs = { 0 }; GameState gs = { 0 };
@ -712,6 +714,7 @@ void update_player_from_entities()
void reset_level() void reset_level()
{ {
// load level // load level
gs.won = false;
Level *to_load = &level_level0; Level *to_load = &level_level0;
{ {
assert(ARRLEN(to_load->initial_entities) == ARRLEN(gs.entities)); assert(ARRLEN(to_load->initial_entities) == ARRLEN(gs.entities));
@ -1713,6 +1716,7 @@ AABB draw_text(TextParams t)
AABB draw_centered_text(TextParams t) AABB draw_centered_text(TextParams t)
{ {
if(t.scale <= 0.01f) return (AABB){0};
t.dry_run = true; t.dry_run = true;
AABB text_aabb = draw_text(t); AABB text_aabb = draw_text(t);
t.dry_run = false; t.dry_run = false;
@ -2237,6 +2241,7 @@ void draw_dialog_panel(Entity *talking_to, float alpha)
#define ROLL_KEY SAPP_KEYCODE_LEFT_SHIFT #define ROLL_KEY SAPP_KEYCODE_LEFT_SHIFT
double elapsed_time = 0.0; double elapsed_time = 0.0;
double unwarped_elapsed_time = 0.0;
double last_frame_processing_time = 0.0; double last_frame_processing_time = 0.0;
uint64_t last_frame_time; uint64_t last_frame_time;
Vec2 mouse_pos = { 0 }; // in screen space Vec2 mouse_pos = { 0 }; // in screen space
@ -2340,6 +2345,7 @@ void frame(void)
unwarped_dt_double = stm_sec(stm_diff(stm_now(), last_frame_time)); unwarped_dt_double = stm_sec(stm_diff(stm_now(), last_frame_time));
unwarped_dt_double = fmin(unwarped_dt_double, MINIMUM_TIMESTEP * 5.0); // clamp dt at maximum 5 frames, avoid super huge dt unwarped_dt_double = fmin(unwarped_dt_double, MINIMUM_TIMESTEP * 5.0); // clamp dt at maximum 5 frames, avoid super huge dt
elapsed_time += unwarped_dt_double*speed_factor; elapsed_time += unwarped_dt_double*speed_factor;
unwarped_elapsed_time += unwarped_dt_double;
last_frame_time = stm_now(); last_frame_time = stm_now();
} }
double dt_double = unwarped_dt_double*speed_factor; double dt_double = unwarped_dt_double*speed_factor;
@ -2505,7 +2511,8 @@ void frame(void)
const float dialog_interact_size = 2.5f * TILE_SIZE; const float dialog_interact_size = 2.5f * TILE_SIZE;
float speed_target; float speed_target;
if (player->in_conversation_mode) // pausing the game
if (player->in_conversation_mode || gs.won)
{ {
speed_target = 0.0f; speed_target = 0.0f;
} }
@ -3891,6 +3898,28 @@ void frame(void)
} }
} }
// win screen
{
static float visible = 0.0f;
float target = 0.0f;
if(gs.won)
{
target = 1.0f;
}
visible = Lerp(visible, unwarped_dt*9.0f, target);
draw_quad((DrawParams) {false, quad_at(V2(0,screen_size().y), screen_size()), IMG(image_white_square), blendalpha(BLACK, visible*0.7f), .layer = LAYER_UI});
float shake_speed = 9.0f;
Vec2 win_offset = V2(sinf((float)unwarped_elapsed_time * shake_speed * 1.5f + 0.1f), sinf((float)unwarped_elapsed_time * shake_speed + 0.3f));
win_offset = MulV2F(win_offset, 10.0f);
draw_centered_text((TextParams){false, false, "YOU WON", AddV2(MulV2F(screen_size(), 0.5f), win_offset), WHITE, 9.0f*visible});
if(imbutton(centered_aabb(V2(screen_size().x/2.0f, screen_size().y*0.25f), MulV2F(V2(170.0f, 60.0f), visible)), 1.5f*visible, "Restart"))
{
reset_level();
}
}
// ui // ui
#define HELPER_SIZE 250.0f #define HELPER_SIZE 250.0f
@ -4150,6 +4179,7 @@ void frame(void)
} }
#endif #endif
// mobile handling touch controls handling touch input // mobile handling touch controls handling touch input
if (mobile_controls) if (mobile_controls)
{ {
@ -4290,6 +4320,10 @@ void frame(void)
{ {
mouse_frozen = !mouse_frozen; mouse_frozen = !mouse_frozen;
} }
if (e->key_code == SAPP_KEYCODE_9)
{
gs.won = true;
}
if (e->key_code == SAPP_KEYCODE_M) if (e->key_code == SAPP_KEYCODE_M)
{ {
mobile_controls = true; mobile_controls = true;

Loading…
Cancel
Save