From f50d6a0b9363ccb156dfd25c85fa0bd37e2c1779 Mon Sep 17 00:00:00 2001 From: Sara Date: Sun, 14 Jan 2024 13:12:13 +0100 Subject: [PATCH] feat: reworked PlayerAttackTrigger into PlayerHurtbox --- game/src/PlayerStates.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/game/src/PlayerStates.c b/game/src/PlayerStates.c index aaa0faa..1089bc9 100644 --- a/game/src/PlayerStates.c +++ b/game/src/PlayerStates.c @@ -59,25 +59,18 @@ void PlayerAttackEnter(Player* self) { } static -void PlayerAttackTrigger(Player* self, DamageEventData* damage, Vector hitbox_size) { - Vector collider_edge = self->facing - ? shape_get_max_extent(collider_get_shape(self->physicsCollider), &self->transform) - : shape_get_min_extent(collider_get_shape(self->physicsCollider), &self->transform); - //Vector hitbox_size = MakeVector(0.1f, 0.06f); - Vector hitbox_position = vaddf(self->transform.position, MakeVector(0.1f + collider_edge.x, 0.0f)); - Collider* found = physics_world_box_query(vaddf(self->transform.position, hitbox_position), hitbox_size, PHYSICS_LAYER_COMBAT, self->rigidbody); +void PlayerHurtbox(Player* self, DamageEventData damage, Vector hitbox_size, Vector offset) { + offset.x *= self->facing; + offset = vaddf(self->transform.position, offset); + Collider* found = physics_world_box_query(offset, hitbox_size, PHYSICS_LAYER_COMBAT, self->rigidbody); if(found != NULL) { PhysicsEntity entity = collider_get_owner(found); const IDamagable* damagable = mirror_get_typeclass(entity.data, entity.mirror, "Damagable"); if(damagable) { - DamageEventData data = { - .damageAmount = 1, - .origin = self->transform.position - }; - damagable->damage(entity.data, &data); + damage.origin = self->transform.position; + damagable->damage(entity.data, &damage); } } - ++self->animationTriggers; } void PlayerJabA_Enter(Player* self) { @@ -87,9 +80,12 @@ void PlayerJabA_Enter(Player* self) { } const State* PlayerJabA_Update(Player* self, float deltaTime) { + const static DamageEventData damage = {.damageAmount = 1}; const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); - if(self->animationTriggers == 0 && ntime > 0.33f) - PlayerAttackTrigger(self); + if(self->animationTriggers == 0 && ntime > 0.33f) { + PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, 0.06f)); + ++self->animationTriggers; + } if(ntime > 1.0f) { if(self->attackInput == 1) return PlayerJabB(); @@ -110,9 +106,12 @@ void PlayerJabB_Enter(Player* self) { } const State* PlayerJabB_Update(Player* self, float deltaTime) { + static const DamageEventData damage = {.damageAmount = 1}; const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); - if(self->animationTriggers == 0 && ntime > 0.33f) - PlayerAttackTrigger(self); + if(self->animationTriggers == 0 && ntime > 0.33f) { + PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, 0.0f)); + ++self->animationTriggers; + } if(ntime > 1.0f) { if(self->attackInput == 1) return PlayerJabA(); @@ -133,12 +132,17 @@ void PlayerKickA_Enter(Player* self) { } const State* PlayerKickA_Update(Player* self, float deltaTime) { + static const DamageEventData damage = {.damageAmount = 3}; const float ntime = animation_sprite_get_time_normalized(self->currentAnimation); + if(ntime > 0.25f && self->animationTriggers == 0) { + PlayerHurtbox(self, damage, MakeVector(0.1f, 0.06f), MakeVector(0.3f, 0.0f)); + ++self->animationTriggers; + } if(ntime > 1.0f && self->attackInput == 1) return PlayerJabA(); if(!veqf(self->moveInput, ZeroVector) && ntime > 1.05f) return PlayerWalk(); - if(ntime >= 2.0f) + if(ntime >= 1.f) return PlayerIdle(); return PlayerKickA(); }