diff --git a/src/main/cpp/net/eagle0/shardok/library/commands/MoveCommand.cpp b/src/main/cpp/net/eagle0/shardok/library/commands/MoveCommand.cpp index 7853fc4158..b15cfa7d5b 100644 --- a/src/main/cpp/net/eagle0/shardok/library/commands/MoveCommand.cpp +++ b/src/main/cpp/net/eagle0/shardok/library/commands/MoveCommand.cpp @@ -57,7 +57,7 @@ auto shardok::MoveCommand::InternalExecute( const auto* destinationTerrain = GetTerrain(map, destination); bool startedInEnemyZoc = enemyZocCoords.Contains(origin); vector knownAdjacentEnemies = - KnownAdjacentEnemies(player, allUnits, map, allyPids, origin); + KnownAdjacentEnemies(player, currentState, allyPids, origin); MutatingSpendActionPoints( &mover, @@ -132,7 +132,7 @@ auto shardok::MoveCommand::InternalExecute( if (!startedInEnemyZoc) { vector newAdjacentEnemies = - KnownAdjacentEnemies(player, allUnits, map, allyPids, destination); + KnownAdjacentEnemies(player, currentState, allyPids, destination); for (const Unit* possibleChargee : newAdjacentEnemies) { if (std::ranges::find_if( diff --git a/src/main/cpp/net/eagle0/shardok/library/util/BUILD.bazel b/src/main/cpp/net/eagle0/shardok/library/util/BUILD.bazel index e439691893..87b33150a4 100644 --- a/src/main/cpp/net/eagle0/shardok/library/util/BUILD.bazel +++ b/src/main/cpp/net/eagle0/shardok/library/util/BUILD.bazel @@ -42,6 +42,7 @@ cc_library( deps = [ ":hex_cube_utils", "//src/main/cpp/net/eagle0/common:filesystem_utils", + "//src/main/cpp/net/eagle0/shardok/library:game_state_w", "//src/main/cpp/net/eagle0/shardok/library/map:coordinates", "//src/main/cpp/net/eagle0/shardok/library/map:coords_set", "//src/main/cpp/net/eagle0/shardok/library/map:hex_map_direction", diff --git a/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.cpp b/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.cpp index 026c921e66..23a8d5d917 100644 --- a/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.cpp +++ b/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.cpp @@ -15,6 +15,7 @@ #include "HexCubeUtils.hpp" #include "src/main/cpp/net/eagle0/common/FilesystemUtils.hpp" +#include "src/main/cpp/net/eagle0/shardok/library/GameStateW.hpp" #include "src/main/cpp/net/eagle0/shardok/library/map/CoordsSet.hpp" namespace shardok { @@ -694,6 +695,25 @@ auto KnownAdjacentEnemies( return knownAdjacentEnemies; } +auto KnownAdjacentEnemies( + const PlayerId playerId, + const GameStateW &gameState, + const std::vector &allyPids, + const Coords &coords) -> std::vector { + const CoordsSet &adjacentCoords = HexMapUtils::GetAdjacentCoords(gameState->hex_map(), coords); + std::vector knownAdjacentEnemies{}; + knownAdjacentEnemies.reserve(adjacentCoords.size()); + + for (const Coords &adjCoords : adjacentCoords) { + if (const auto *possibleEnemy = + gameState.GetKnownEnemyOccupant(playerId, allyPids, adjCoords)) { + knownAdjacentEnemies.push_back(possibleEnemy); + } + } + + return knownAdjacentEnemies; +} + auto KnownEnemyOccupant( const PlayerId playerId, const Units *units, diff --git a/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.hpp b/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.hpp index b222077add..126c460869 100644 --- a/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.hpp +++ b/src/main/cpp/net/eagle0/shardok/library/util/HexMapUtils.hpp @@ -22,6 +22,8 @@ #include "src/main/protobuf/net/eagle0/shardok/api/unit_view.pb.h" namespace shardok { +class GameStateW; + using Coords = net::eagle0::shardok::storage::fb::Coords; using HexMap = net::eagle0::shardok::storage::fb::HexMap; using HexMapT = net::eagle0::shardok::storage::fb::HexMapT; @@ -288,6 +290,12 @@ template const std::vector &allyPids, const Coords &coords) -> std::vector; +[[nodiscard]] auto KnownAdjacentEnemies( + PlayerId playerId, + const GameStateW &gameState, + const std::vector &allyPids, + const Coords &coords) -> std::vector; + [[nodiscard]] auto DirectionsTo(int columnCount, const Coords &origin, const Coords &destination) -> HexMapDirectionsTo;