fp: Make path finding consider non-traversables

This commit is contained in:
2023-09-23 13:30:54 +10:00
parent cc202cefac
commit 7d33baab4f
4 changed files with 90 additions and 26 deletions
+23 -22
View File
@@ -478,29 +478,31 @@ void TELY_DLL_Init(void *user_data)
// NOTE: Hero
{
FP_GameEntity *hero = FP_Game_MakeEntityPointerF(game, "Hero");
hero->local_pos = Dqn_V2_InitNx2(100.f, 100.f);
hero->size_scale = Dqn_V2_InitNx1(4);
hero->sprite_sheet = &game->hero_sprite_sheet;
hero->sprite_anims = game->hero_sprite_anims;
hero->local_hit_box_size = Dqn_V2_InitV2I(game->hero_sprite_sheet.sprite_size);
hero->flags |= FP_GameEntityFlag_Clickable;
hero->flags |= FP_GameEntityFlag_MoveByKeyboard;
hero->flags |= FP_GameEntityFlag_MoveByMouse;
game->clicked_entity = hero->handle;
FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, "Hero");
entity->local_pos = Dqn_V2_InitNx2(100.f, 100.f);
entity->size_scale = Dqn_V2_InitNx1(4);
entity->sprite_sheet = &game->hero_sprite_sheet;
entity->sprite_anims = game->hero_sprite_anims;
entity->local_hit_box_size = Dqn_V2_InitV2I(game->hero_sprite_sheet.sprite_size);
entity->flags |= FP_GameEntityFlag_Clickable;
entity->flags |= FP_GameEntityFlag_MoveByKeyboard;
entity->flags |= FP_GameEntityFlag_MoveByMouse;
entity->flags |= FP_GameEntityFlag_NonTraversable;
game->clicked_entity = entity->handle;
}
// NOTE: Enemy
{
FP_GameEntity *enemy = FP_Game_MakeEntityPointerF(game, "Enemy");
enemy->local_pos = Dqn_V2_InitNx2(300.f, 300.f);
enemy->size_scale = Dqn_V2_InitNx1(4);
enemy->sprite_sheet = &game->hero_sprite_sheet;
enemy->sprite_anims = game->hero_sprite_anims;
enemy->local_hit_box_size = Dqn_V2_InitV2I(game->hero_sprite_sheet.sprite_size);
enemy->flags |= FP_GameEntityFlag_Clickable;
enemy->flags |= FP_GameEntityFlag_MoveByKeyboard;
enemy->flags |= FP_GameEntityFlag_MoveByMouse;
FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, "Enemy");
entity->local_pos = Dqn_V2_InitNx2(300.f, 300.f);
entity->size_scale = Dqn_V2_InitNx1(4);
entity->sprite_sheet = &game->hero_sprite_sheet;
entity->sprite_anims = game->hero_sprite_anims;
entity->local_hit_box_size = Dqn_V2_InitV2I(game->hero_sprite_sheet.sprite_size);
entity->flags |= FP_GameEntityFlag_Clickable;
entity->flags |= FP_GameEntityFlag_MoveByKeyboard;
entity->flags |= FP_GameEntityFlag_MoveByMouse;
entity->flags |= FP_GameEntityFlag_NonTraversable;
}
// NOTE: Wall
@@ -511,6 +513,7 @@ void TELY_DLL_Init(void *user_data)
entity->flags |= FP_GameEntityFlag_Clickable;
entity->flags |= FP_GameEntityFlag_MoveByKeyboard;
entity->flags |= FP_GameEntityFlag_MoveByMouse;
entity->flags |= FP_GameEntityFlag_NonTraversable;
FP_GameShape *wall = Dqn_FArray_Make(&entity->shapes, Dqn_ZeroMem_Yes);
wall->type = FP_GameShapeType_Rect;
@@ -593,9 +596,7 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_Renderer *renderer,
entity->waypoints->next = entity->waypoints;
entity->waypoints->prev = entity->waypoints;
Dqn_V2I entity_tile = Dqn_V2I_InitNx2(entity_world_pos.x / game->tile_size, entity_world_pos.y / game->tile_size);
Dqn_Slice<Dqn_V2I> path_find = FP_Game_AStarPathFind(game, &platform->frame_arena, platform, entity_tile, stalk_tile);
Dqn_Slice<Dqn_V2I> path_find = FP_Game_AStarPathFind(game, &platform->frame_arena, platform, entity->handle, stalk_tile);
for (Dqn_usize index = path_find.size - 1; index < path_find.size; index--) {
FP_GameWaypoint *waypoint = TELY_ChunkPool_New(game->chunk_pool, FP_GameWaypoint);
waypoint->pos = path_find.data[index];