fp: Fix attack boxes persisting and decrement health
This commit is contained in:
+34
-7
@@ -219,11 +219,26 @@ static FP_GameEntity *FP_Game_MakeEntityPointerFV(FP_Game *game, DQN_FMT_STRING_
|
||||
result->handle.id = (game->entities.size - 1) & FP_GAME_ENTITY_HANDLE_INDEX_MASK;
|
||||
}
|
||||
|
||||
result->sprite_height.meters = 1;
|
||||
result->parent = FP_Game_ActiveParentEntityPointer(game);
|
||||
result->name = TELY_ChunkPool_AllocFmtFV(game->chunk_pool, fmt, args);
|
||||
result->buildings_visited = FP_SentinelList_Init<FP_GameEntityHandle>(game->chunk_pool);
|
||||
result->action.sprite_alpha = 1.f;
|
||||
result->sprite_height.meters = 1;
|
||||
result->parent = FP_Game_ActiveParentEntityPointer(game);
|
||||
result->name = TELY_ChunkPool_AllocFmtFV(game->chunk_pool, fmt, args);
|
||||
result->buildings_visited = FP_SentinelList_Init<FP_GameEntityHandle>(game->chunk_pool);
|
||||
result->action.sprite_alpha = 1.f;
|
||||
result->stamina_cap = 100;
|
||||
|
||||
result->hp_cap = FP_DEFAULT_DAMAGE;
|
||||
result->hp = result->hp_cap;
|
||||
|
||||
result->inventory.airports_base_price = 4;
|
||||
result->inventory.churchs_base_price = 2;
|
||||
result->inventory.kennels_base_price = 2;
|
||||
result->inventory.clubs_base_price = 2;
|
||||
|
||||
result->inventory.stamina_base_price = 2;
|
||||
result->inventory.health_base_price = 2;
|
||||
result->inventory.mobile_plan_base_price = 2;
|
||||
result->inventory.attack_base_price = 2;
|
||||
|
||||
|
||||
// NOTE: Attach entity as a child to the parent
|
||||
FP_GameEntity *parent = result->parent;
|
||||
@@ -730,7 +745,6 @@ FP_GameFindClosestEntityResult FP_Game_FindClosestEntityWithType(FP_Game *game,
|
||||
static bool FP_Game_CanEntityAttack(FP_GameEntity *entity, uint64_t current_time_ms)
|
||||
{
|
||||
bool result = (current_time_ms - entity->last_attack_timestamp) >= entity->attack_cooldown_ms;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -750,6 +764,9 @@ static void FP_Game_EntityTransitionState(FP_Game *game, FP_GameEntity *entity,
|
||||
if (entity->terry_mobile_data_plan < FP_TERRY_MOBILE_DATA_PER_RANGE_ATTACK)
|
||||
return;
|
||||
}
|
||||
} else if (desired_state == FP_EntityTerryState_Dash) {
|
||||
if (entity->stamina < FP_TERRY_DASH_STAMINA_COST)
|
||||
return;
|
||||
}
|
||||
} break;
|
||||
|
||||
@@ -773,6 +790,17 @@ static void FP_Game_EntityTransitionState(FP_Game *game, FP_GameEntity *entity,
|
||||
}
|
||||
} break;
|
||||
|
||||
case FP_EntityType_Catfish: {
|
||||
if (desired_state == FP_EntityClingerState_Attack) {
|
||||
if (!FP_Game_CanEntityAttack(entity, game->clock_ms)) {
|
||||
// NOTE: Cooldown not met do not transition
|
||||
return;
|
||||
}
|
||||
entity->last_attack_timestamp = game->clock_ms;
|
||||
}
|
||||
} break;
|
||||
|
||||
|
||||
case FP_EntityType_AirportTerry: {
|
||||
} break;
|
||||
|
||||
@@ -783,7 +811,6 @@ static void FP_Game_EntityTransitionState(FP_Game *game, FP_GameEntity *entity,
|
||||
} break;
|
||||
|
||||
case FP_EntityType_Nil:
|
||||
case FP_EntityType_Catfish:
|
||||
case FP_EntityType_Heart:
|
||||
case FP_EntityType_KennelTerry:
|
||||
case FP_EntityType_Map:
|
||||
|
||||
Reference in New Issue
Block a user