fp: Make path finding consider non-traversables
This commit is contained in:
+23
-22
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user