feat: reworked PlayerAttackTrigger into PlayerHurtbox

This commit is contained in:
Sara 2024-01-14 13:12:13 +01:00
parent 3f5ff9da55
commit f50d6a0b93

View file

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