Add delay to global external forces for entities

Changelog:
- Apply delay to crates and boulder
scene_man
En Yi 2023-06-14 21:00:14 +08:00
parent a1101cd951
commit 371e6fcbdf
3 changed files with 18 additions and 2 deletions

View File

@ -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 {

View File

@ -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))
{

View File

@ -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);