From 371e6fcbdfd24a5ac2c18633a6087019cf68971a Mon Sep 17 00:00:00 2001 From: En Yi Date: Wed, 14 Jun 2023 21:00:14 +0800 Subject: [PATCH] Add delay to global external forces for entities Changelog: - Apply delay to crates and boulder --- scenes/engine/EC/EC.h | 2 ++ scenes/game_systems.c | 12 ++++++++++++ scenes/items_ent.c | 6 ++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/scenes/engine/EC/EC.h b/scenes/engine/EC/EC.h index 0730f22..0e41feb 100644 --- a/scenes/engine/EC/EC.h +++ b/scenes/engine/EC/EC.h @@ -41,6 +41,8 @@ typedef struct _CTransform_t { Vector2 prev_velocity; Vector2 accel; Vector2 fric_coeff; + int8_t grav_delay; + int8_t grav_timer; } CTransform_t; typedef struct _CMovementState_t { diff --git a/scenes/game_systems.c b/scenes/game_systems.c index 9b245a3..5f6c38b 100644 --- a/scenes/game_systems.c +++ b/scenes/game_systems.c @@ -832,6 +832,12 @@ void global_external_forces_system(Scene_t* scene) CTransform_t* p_ctransform = get_component(p_ent, CTRANSFORM_COMP_T); CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T); + if (p_ctransform->grav_timer > 0) + { + p_ctransform->grav_timer--; + continue; + } + if (!(p_mstate->ground_state & 1)) { // Only apply upthrust if center is in water @@ -1225,6 +1231,12 @@ void state_transition_update_system(Scene_t* scene) p_ent, p_ctransform->position, p_ctransform->prev_position, p_bbox->size, &data->tilemap ); + + if (on_ground) + { + p_ctransform->grav_timer = p_ctransform->grav_delay; + } + bool in_water = false; if (!(p_mstate->water_state & 1)) { diff --git a/scenes/items_ent.c b/scenes/items_ent.c index 645d5cd..9be2061 100644 --- a/scenes/items_ent.c +++ b/scenes/items_ent.c @@ -10,7 +10,8 @@ Entity_t* create_crate(EntityManager_t* ent_manager, Assets_t* assets, bool meta p_bbox->solid = true; p_bbox->fragile = !metal; - add_component(p_crate, CTRANSFORM_COMP_T); + CTransform_t* p_ctransform = add_component(p_crate, CTRANSFORM_COMP_T); + p_ctransform->grav_delay = 5; add_component(p_crate, CMOVEMENTSTATE_T); add_component(p_crate, CTILECOORD_COMP_T); CHurtbox_t* p_hurtbox = add_component(p_crate, CHURTBOX_T); @@ -28,7 +29,8 @@ Entity_t* create_boulder(EntityManager_t* ent_manager, Assets_t* assets) p_bbox->solid = true; p_bbox->fragile = false; - add_component(p_boulder, CTRANSFORM_COMP_T); + CTransform_t* p_ctransform = add_component(p_boulder, CTRANSFORM_COMP_T); + p_ctransform->grav_delay = 5; add_component(p_boulder, CMOVEMENTSTATE_T); add_component(p_boulder, CTILECOORD_COMP_T); CMoveable_t* p_cmove = add_component(p_boulder, CMOVEABLE_T);