载入中...
搜索中...
未找到
HexUnits.cpp
浏览该文件的文档.
40[[nodiscard]] float angularDifference(float from, float to) noexcept { return wrapDegrees(to - from); }
85[[nodiscard]] TravelSegment travelSegment(const HexMap& map, const std::vector<std::int32_t>& path,
98 result.a = (map.cellPosition(map.coordinatesAt(path[static_cast<std::size_t>(index - 2)])) + result.b) * 0.5f;
134 return HexOccupancyQuery{[this](HexCoordinates coordinates) { return isOccupied(coordinates); }};
139Result<std::int32_t> HexUnitRegistry::addUnit(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch,
141 if (map.empty()) return Result<std::int32_t>::failure(invalidArgument("cannot add a unit to an empty map"));
165Result<void> HexUnitRegistry::removeUnit(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch,
194Result<HexUnitSample> HexUnitRegistry::makeSample(const HexMap& map, std::int32_t unitId, const Unit& unit) const {
219Result<void> HexUnitRegistry::beginTravel(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch,
224 if (path.empty()) return Result<void>::failure(invalidArgument("travel path must not be empty"));
232 if (index > 0 && map.coordinatesAt(path[index - 1]).distanceTo(map.coordinatesAt(path[index])) != 1)
275Result<HexUnitSample> HexUnitRegistry::advance(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch,
288 const HexCoordinates left = map.coordinatesAt(unit->path[static_cast<std::size_t>(unit->segment - 1)]);
289 const HexCoordinates right = map.coordinatesAt(unit->path[static_cast<std::size_t>(unit->segment)]);
320void HexUnitRegistry::advanceAll(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch, float dt) {
326 advance(map, visibility, scratch, unitId, dt).ignore("travel cells are validated by beginTravel");
332void HexUnitRegistry::refreshVisibility(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch) {
375Result<void> HexUnitRegistry::restore(HexMap& map, HexVisibility& visibility, HexSearchContext& scratch,
Stable, structured diagnostics shared by engine modules.
Units that occupy cells, travel along paths and carry vision.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
void ignore(std::string_view reason={}) const noexcept
Explicitly discard this result after documenting the reason.
Definition Result.h:537
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
HexCoordinates coordinatesAt(std::int32_t index) const noexcept
Coordinates of a linear cell index; out-of-range indices return (0, 0).
Definition HexMap.cpp:69
std::int32_t indexOf(HexCoordinates coordinates) const noexcept
Linear cell index of coordinates (offset order), or -1 when outside the grid.
Definition HexMap.cpp:64
HexVec3 cellPosition(HexCoordinates coordinates) const noexcept
Cell centre including elevation and vertical perturbation.
Definition HexMap.cpp:170
bool contains(HexCoordinates coordinates) const noexcept
Whether coordinates address a cell inside the grid.
Definition HexMap.h:122
Reusable search scratch: one record per cell plus a priority bucket queue.
Definition HexSearch.h:68
std::vector< HexUnitState > snapshot() const
Serializable state of every unit, in id order.
Definition HexUnits.cpp:363
HexOccupancyQuery occupancyQuery() const
Occupancy predicate bound to this registry. @ownership The returned callable borrows *this; it must n...
Definition HexUnits.cpp:130
Result< HexUnitSample > advance(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch, std::int32_t unitId, float dt)
Advances one unit's travel by dt seconds and reports where it now is.
Definition HexUnits.cpp:275
Result< void > removeUnit(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch, std::int32_t unitId)
Removes a unit and withdraws its vision.
Definition HexUnits.cpp:165
bool isOccupied(HexCoordinates coordinates) const noexcept
Whether any unit occupies a cell.
Definition HexUnits.h:118
void removeAll(HexMap &map, HexVisibility &visibility) noexcept
Removes every unit and clears the visibility counters of the map.
Definition HexUnits.cpp:187
void refreshPositions(const HexMap &map) noexcept
Re-snaps every idle unit onto its cell's current position.
Definition HexUnits.cpp:345
void advanceAll(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch, float dt)
Advances every travelling unit by dt seconds.
Definition HexUnits.cpp:320
void refreshVisibility(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch)
Re-derives the whole fog of war from the units' current cells.
Definition HexUnits.cpp:332
Result< void > beginTravel(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch, std::int32_t unitId, const std::vector< std::int32_t > &path)
Starts travelling along path.
Definition HexUnits.cpp:219
std::int32_t unitIdAt(HexCoordinates coordinates) const noexcept
Id of the unit occupying a cell, or -1 when the cell is free.
Definition HexUnits.cpp:117
Result< void > restore(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch, const std::vector< HexUnitState > &states)
Replaces every unit with states, granting their vision.
Definition HexUnits.cpp:375
Result< std::int32_t > addUnit(HexMap &map, HexVisibility &visibility, HexSearchContext &scratch, HexCoordinates location, float orientation)
Adds a unit on location and grants its vision.
Definition HexUnits.cpp:139
Fog-of-war bookkeeping: how many viewers currently see each cell.
Definition HexVisibility.h:32
Result< void > increase(HexMap &map, HexSearchContext &scratch, HexCoordinates from, std::int32_t range)
Adds one viewer at from.
Definition HexVisibility.cpp:53
void clear(HexMap &map) noexcept
Drops every viewer, leaving the map's explored flags untouched.
Definition HexVisibility.cpp:102
Result< void > decrease(HexMap &map, HexSearchContext &scratch, HexCoordinates from, std::int32_t range)
Removes one viewer at from.
Definition HexVisibility.cpp:76
Definition HexCell.h:9
std::function< bool(HexCoordinates)> HexOccupancyQuery
Predicate answering whether a cell is already occupied by another actor.
Definition HexSearch.h:143
bool isValidDestination(const HexMap &map, HexCoordinates coordinates, const HexOccupancyQuery &occupied)
Whether an actor may occupy a cell.
Definition HexSearch.cpp:121
@ InvalidArgument
@ NotFound
constexpr std::int32_t distanceTo(const HexCoordinates &other) const noexcept
Cube distance to another cell (wrapping is not supported).
Definition HexCoordinates.h:58
std::int32_t visionRange
Vision radius in cells, matching HexMoveRules::visionRange.
Definition HexUnits.h:21
Minimal 3-component float vector used by the hex mesh builders.
Definition HexMetrics.h:18