Hazard respawn is also working now

Still need to emit particles on HazardHarm tho
This commit is contained in:
Edgaru089 2024-03-30 22:41:49 +08:00
parent 1a1038522c
commit 73d10b343f
4 changed files with 48 additions and 0 deletions

4
app.c
View File

@ -81,6 +81,10 @@ App *app_NewApp() {
misc_InstantiateTextbox(app, text3, "Press ; to dash.\nYou can only dash one time midair.", misc_TextboxUpright(70, 70), -180); misc_InstantiateTextbox(app, text3, "Press ; to dash.\nYou can only dash one time midair.", misc_TextboxUpright(70, 70), -180);
entity_Commit(app->entity, text3); entity_Commit(app->entity, text3);
Entity *respawn1 = entity_Create(app->entity, "respawn1");
misc_InstantiateHazardRespawn(app, respawn1, box2(300, 500, 400, 50), vec2(500, 550));
entity_Commit(app->entity, respawn1);
return app; return app;
} }

View File

@ -51,6 +51,25 @@ void app_Render(App *app) {
(int)round(box.lefttop.x + box.size.x), (int)round(box.lefttop.x + box.size.x),
(int)round(box.lefttop.y + box.size.y)); (int)round(box.lefttop.y + box.size.y));
} }
if (e->misc->respawn) {
setlinecolor(RGB(255, 0, 255));
Box2 box;
Vec2 pos;
if (e->position) {
box = camera_TransformBox2(app->camera, box2_Offset(e->misc->respawn->trigger_box, e->position->position));
pos = camera_TransformVec2(app->camera, vec2_Add(e->misc->respawn->respawn_pos, e->position->position));
} else {
box = camera_TransformBox2(app->camera, e->misc->respawn->trigger_box);
pos = camera_TransformVec2(app->camera, e->misc->respawn->respawn_pos);
}
rectangle(
(int)round(box.lefttop.x),
(int)round(box.lefttop.y),
(int)round(box.lefttop.x + box.size.x),
(int)round(box.lefttop.y + box.size.y));
line((int)round(pos.x + 12), (int)round(pos.y), (int)round(pos.x - 12), (int)round(pos.y));
line((int)round(pos.x), (int)round(pos.y + 12), (int)round(pos.x), (int)round(pos.y - 12));
}
} }
} }

View File

@ -151,7 +151,22 @@ void player_Advance(System_Player *sys, Duration deltaTime) {
} }
// Respawn if fallen out of the world
if (p->super->position->position.y > 5000)
player_HazardHarm(sys);
// Check OnGround again // Check OnGround again
if (dabs(sys->player->super->position->velocity.y) > EPS) if (dabs(sys->player->super->position->velocity.y) > EPS)
sys->player->onGround = false; sys->player->onGround = false;
} }
void player_HazardHarm(System_Player *sys) {
if (!sys->player)
return;
sys->player->storedSpeedY = 0;
sys->player->super->position->velocity = vec2(0, 0);
sys->player->super->position->position = sys->player->hazardRespawn;
sys->player->super->position->position.y -= EPS; // Stay loose!
}

View File

@ -52,6 +52,16 @@ void player_DeleteEntity(System_Player *sys, uintptr_t id);
// Called on every frame. // Called on every frame.
void player_Advance(System_Player *sys, Duration deltaTime); void player_Advance(System_Player *sys, Duration deltaTime);
// Harm the player.
// The player is hit backwards, releasing a puff of smoke.
//
// To be implemented
// void player_Harm(System_Player *sys, Vec2 source);
// Hazard harm the player.
// The player is teleported to the hazard respawn point.
void player_HazardHarm(System_Player *sys);
#ifdef __cplusplus #ifdef __cplusplus
} }