boss: disable hurtbox when dying or fleeing

closes #180
This commit is contained in:
Andrei Alexeyev 2020-06-01 14:01:00 +03:00
parent ab894e0658
commit 930d735740
No known key found for this signature in database
GPG key ID: 363707CD4C7FE8A4
3 changed files with 10 additions and 5 deletions

View file

@ -838,6 +838,10 @@ bool boss_is_vulnerable(Boss *boss) {
return boss->current && boss->current->type != AT_Move && boss->current->type != AT_SurvivalSpell && !boss->current->finished;
}
bool boss_is_player_collision_active(Boss *boss) {
return boss->current && !boss_is_dying(boss) && !boss_is_fleeing(boss);
}
static DamageResult ent_damage_boss(EntityInterface *ent, const DamageInfo *dmg) {
Boss *boss = ENT_CAST(ent, Boss);
@ -1163,10 +1167,10 @@ void process_boss(Boss **pboss) {
}
play_sound_ex("bossdeath", BOSS_DEATH_DELAY * 2, false);
} else {
if(cabs(boss->pos - global.plr.pos) < BOSS_HURT_RADIUS) {
ent_damage(&global.plr.ent, &(DamageInfo) { .type = DMG_ENEMY_COLLISION });
}
}
if(boss_is_player_collision_active(boss) && cabs(boss->pos - global.plr.pos) < BOSS_HURT_RADIUS) {
ent_damage(&global.plr.ent, &(DamageInfo) { .type = DMG_ENEMY_COLLISION });
}
#ifdef DEBUG

View file

@ -198,6 +198,7 @@ void boss_finish_current_attack(Boss *boss) attr_nonnull(1);
bool boss_is_dying(Boss *boss) attr_nonnull(1); // true if the last attack is over but the BOSS_DEATH_DELAY has not elapsed.
bool boss_is_fleeing(Boss *boss) attr_nonnull(1);
bool boss_is_vulnerable(Boss *boss) attr_nonnull(1);
bool boss_is_player_collision_active(Boss *boss) attr_nonnull(1);
void boss_death(Boss **boss) attr_nonnull(1);

View file

@ -429,7 +429,7 @@ static void stage_draw_collision_areas(void) {
}
}
if(global.boss && global.boss->current && !dialog_is_active(global.dialog)) {
if(global.boss && boss_is_player_collision_active(global.boss)) {
r_draw_sprite(&(SpriteParams) {
.sprite_ptr = &stagedraw.dummy,
.pos = { creal(global.boss->pos), cimag(global.boss->pos) },