fp: Make the building behaviours generic and work across multiple buildings

This commit is contained in:
2023-10-06 20:48:20 +11:00
parent bfe2fef528
commit 57a09d6f9a
3 changed files with 156 additions and 65 deletions
+23
View File
@@ -222,6 +222,7 @@ static FP_GameEntity *FP_Game_MakeEntityPointerFV(FP_Game *game, DQN_FMT_STRING_
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);
// NOTE: Attach entity as a child to the parent
FP_GameEntity *parent = result->parent;
@@ -317,6 +318,7 @@ static void FP_Game_DetachEntityIntoFreeList(FP_Game *game, FP_GameEntityHandle
FP_SentinelList_Deinit(&entity->spawn_list, game->chunk_pool);
FP_SentinelList_Deinit(&entity->waypoints, game->chunk_pool);
FP_SentinelList_Deinit(&entity->buildings_visited, game->chunk_pool);
if (new_entity_generation > entity_generation) {
// NOTE: Update the incremented handle disassociating all prior handles
@@ -763,6 +765,27 @@ static void FP_Game_EntityTransitionState(FP_Game *game, FP_GameEntity *entity,
entity->last_attack_timestamp = game->clock_ms;
}
} break;
case FP_EntityType_AirportTerry: {
} break;
case FP_EntityType_ChurchTerry: {
} break;
case FP_EntityType_ClubTerry: {
} break;
case FP_EntityType_Nil:
case FP_EntityType_Catfish:
case FP_EntityType_Heart:
case FP_EntityType_KennelTerry:
case FP_EntityType_Map:
case FP_EntityType_MerchantGraveyard:
case FP_EntityType_MerchantGym:
case FP_EntityType_MerchantPhoneCompany:
case FP_EntityType_MerchantTerry:
case FP_EntityType_PhoneMessageProjectile:
case FP_EntityType_Count: break;
}
// NOTE: If no returns are hit above we proceed with the state change
entity->action.next_state = desired_state;