diff --git a/assets.mdesk b/assets.mdesk index 602908b..427f661 100644 --- a/assets.mdesk +++ b/assets.mdesk @@ -26,6 +26,10 @@ { filepath: "copyrighted/animated_terrain.png", } +@image hurt_vignette: +{ + filepath: "hurt_vignette.png", +} @image white_square: { filepath: "white square.png", diff --git a/assets/hurt_vignette.png b/assets/hurt_vignette.png new file mode 100644 index 0000000..7feb85c Binary files /dev/null and b/assets/hurt_vignette.png differ diff --git a/main.c b/main.c index 84c1c04..f0a97c3 100644 --- a/main.c +++ b/main.c @@ -101,6 +101,7 @@ typedef struct Entity // fields for all entities Vec2 pos; Vec2 vel; // only used sometimes, like in old man and bullet + float damage; // at 1.0, he's dead bool facing_left; // old man @@ -410,16 +411,8 @@ Entity *new_entity() return NULL; } -void init(void) +void reset_level() { - scratch = make(1024 * 10); - stm_setup(); - sg_setup(& (sg_desc){ - .context = sapp_sgcontext() - }); - - load_assets(); - // load level Level *to_load = &level_level0; { @@ -437,6 +430,19 @@ void init(void) } assert(player != NULL); // level initial config must have player entity } +} + + +void init(void) +{ + scratch = make(1024 * 10); + stm_setup(); + sg_setup( &(sg_desc){ + .context = sapp_sgcontext() + }); + + load_assets(); + reset_level(); // load font { @@ -1068,7 +1074,6 @@ Vec2 move_and_slide(Entity *from, Vec2 position, Vec2 movement_this_frame) return aabb_center(at_new); } - double time = 0.0; double last_frame_processing_time = 0.0; uint64_t last_frame_time; @@ -1149,6 +1154,8 @@ void frame(void) } #endif + assert(player != NULL); + //if(LengthV2(movement) > 0.01 && player->state == CHARACTER_) #ifdef DEVTOOLS dbgsquare(screen_to_world(mouse_pos)); @@ -1162,11 +1169,6 @@ void frame(void) draw_text(false, false, tprint("%d", get_tile(&level_level0, hovering).kind), world_to_screen(tilecoord_to_world(hovering)), BLACK); } - // line test - { - dbgline(player->pos, screen_to_world(mouse_pos)); - } - // debug draw font image { draw_quad(true, quad_centered(V2(0.0, 0.0), V2(250.0, 250.0)), image_font,full_region(image_font), WHITE); @@ -1250,6 +1252,7 @@ void frame(void) Entity *hit = over.results[i].e; if(hit->kind == ENTITY_OLD_MAN) hit->aggressive = true; hit->vel = MulV2F(NormV2(SubV2(hit->pos, it->pos)), 5.0f); + hit->damage += 0.2f; *it = (Entity){0}; } } @@ -1266,7 +1269,6 @@ void frame(void) // player character { - Vec2 character_sprite_pos = AddV2(player->pos, V2(0.0, 20.0f)); if(attack && (player->state == CHARACTER_IDLE || player->state == CHARACTER_WALKING)) @@ -1370,6 +1372,16 @@ void frame(void) player->state = CHARACTER_IDLE; } } + + // health + if(player->damage >= 1.0) + { + reset_level(); + } + else + { + draw_quad(false, (Quad){.ul=V2(0.0f, screen_size().Y), .ur = screen_size(), .lr = V2(screen_size().X, 0.0f)}, image_hurt_vignette, full_region(image_hurt_vignette), (Color){1.0f, 1.0f, 1.0f, player->damage}); + } } sg_end_pass();