载入中...
搜索中...
未找到
RTS.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
12#include "common/Module.h"
13#include "common/Snapshot.h"
14#include "rts/RTSArchetype.h"
15#include "rts/RTSAttributes.h"
16#include "rts/RTSContent.h"
17#include "rts/RTSEffects.h"
18#include "rts/RTSMatch.h"
20#include "rts/RTSReplay.h"
21#include "rts/RTSSnapshot.h"
22#include "rts/RTSSystems.h"
23#include "rts/RTSTech.h"
24
25#include <cstddef>
26#include <memory>
27#include <span>
28#include <utility>
29#include <vector>
30
31namespace eve::rts {
32
41
48
55
64public:
66
68 RTS();
70 ~RTS() override;
71
74 [[nodiscard]] std::string_view gameplayDomain() const noexcept override;
77 [[nodiscard]] std::vector<SubjectRef> gameplayInstances() const override;
80 [[nodiscard]] Result<GameplayObservation> observeGameplay(const GameplaySession& session,
81 SubjectRef instance) const override;
84 [[nodiscard]] Result<std::vector<GameplayActionDescriptor>> availableGameplayActions(
85 const GameplaySession& session, SubjectRef instance, SubjectRef subject) const override;
88 [[nodiscard]] Result<GameplayCommandReceipt> submitGameplay(const GameplaySession& session,
89 SubjectRef instance,
90 const GameplayCommand& command) override;
93 [[nodiscard]] Result<GameplayObservation> advanceGameplay(const GameplaySession& session,
94 SubjectRef instance,
95 const SimulationStep& step) override;
98 [[nodiscard]] Result<std::vector<GameplayEvent>> gameplayEvents(const GameplaySession& session,
99 SubjectRef instance,
100 std::uint64_t afterSequence) const override;
101
109 [[nodiscard]] Result<Unit*> newUnit(SubjectRef subject, LogicalId definition = {});
117 [[nodiscard]] Result<Building*> newBuilding(SubjectRef subject, LogicalId definition = {});
119 [[nodiscard]] Result<ResourceNode*> newResourceNode(SubjectRef subject, std::string resourceType,
120 float amount, WorldPosition position,
121 std::size_t workerCapacity = 1);
123 [[nodiscard]] Result<Player*> newPlayer(SubjectRef subject);
125 [[nodiscard]] Result<Faction*> newFaction(SubjectRef subject);
127 [[nodiscard]] Result<Unit*> newFactionUnit(Faction& faction, SubjectRef subject,
128 LogicalId definition = {});
130 [[nodiscard]] Result<Building*> newFactionBuilding(Faction& faction, SubjectRef subject,
131 LogicalId definition = {});
133 [[nodiscard]] Result<Match*> newMatch(SubjectRef subject);
135 [[nodiscard]] Result<void> configureMatch(Match& match, VictoryRule rule,
136 std::string archetype = {}, double targetValue = 0.0) const;
138 [[nodiscard]] Result<void> addMatchParticipant(Match& match, Faction& faction, int team) const;
140 [[nodiscard]] Result<void> startMatch(Match& match) const;
142 [[nodiscard]] Result<void> surrenderMatch(Match& match, Faction& faction) const;
144 [[nodiscard]] Result<Value> inspectMatch(Match& match) const;
145
147 [[nodiscard]] Unit* findUnit(SubjectRef subject) const noexcept;
149 [[nodiscard]] Building* findBuilding(SubjectRef subject) const noexcept;
151 [[nodiscard]] ResourceNode* findResourceNode(SubjectRef subject) const noexcept;
153 [[nodiscard]] Faction* findFaction(SubjectRef subject) const noexcept;
155 [[nodiscard]] Match* findMatch(SubjectRef subject) const noexcept;
157 [[nodiscard]] Result<RTSStateSnapshot> snapshotState() const;
159 [[nodiscard]] Result<void> restoreState(const RTSStateSnapshot& snapshot);
165 [[nodiscard]] Result<void> rebuildState(const RTSStateSnapshot& snapshot);
167 [[nodiscard]] Result<std::string> canonicalStateJson() const;
169 [[nodiscard]] Result<ContentId> stateHash(const SnapshotHashProvider& hashProvider) const;
170
178 [[nodiscard]] Result<FanOutReceipt> fanOut(Player::Selection& selection, const CommandSpec& command,
179 const FormationSpec& formation) const;
180
188 [[nodiscard]] Result<FanOutReceipt> commandUnits(std::span<const SubjectRef> subjects,
189 const CommandSpec& command,
190 const FormationSpec& formation = {}) const;
191
204 [[nodiscard]] Result<FanOutReceipt> submitMovementGroup(const MovementGroupBatch& batch);
205
207 [[nodiscard]] Result<void> setUnitStance(std::span<const SubjectRef> subjects,
208 CombatStance stance, float leashRange) const;
210 [[nodiscard]] Result<void> setUnitMovementPriority(std::span<const SubjectRef> subjects,
211 int priority) const;
213 [[nodiscard]] Result<void> assignWorker(Unit& worker, ResourceNode& node,
214 Building& dropoff) const;
216 [[nodiscard]] Result<void> setWorkerAutoAssignment(std::span<const SubjectRef> subjects,
217 bool enabled) const;
219 [[nodiscard]] Result<void> configureWorkforce(
220 Faction& faction, bool autoConstruction, int maxBuildersPerSite,
221 bool autoRepair, int maxRepairersPerBuilding, int reserveWorkers) const;
223 [[nodiscard]] Result<std::string> assignBuilder(Unit& worker, Building& building) const;
225 [[nodiscard]] Result<int> addUnitReserveAmmo(Unit& unit, int rounds) const;
227 [[nodiscard]] Result<float> addUnitAmmoSupply(Unit& unit, float rounds) const;
229 [[nodiscard]] Result<float> addBuildingAmmoSupply(Building& building, float rounds) const;
231 [[nodiscard]] Result<void> setUnitAutoResupply(Unit& unit, bool enabled) const;
233 [[nodiscard]] Result<FanOutReceipt> suppressArea(
234 std::span<const SubjectRef> subjects, WorldPosition start, WorldPosition end,
235 float width = 1.0f, int shotsPerUnit = 0) const;
237 [[nodiscard]] Result<FanOutReceipt> escortUnits(
238 std::span<const SubjectRef> subjects, SubjectRef protectedSubject,
239 float guardRadius = 6.0f, float spacing = 1.5f) const;
240
245 [[nodiscard]] Value inspectState() const;
246
251 [[nodiscard]] Value inspectFrameEvents() const;
252
254 [[nodiscard]] Result<double> readUnitAttribute(Unit& unit, std::string_view attribute) const;
256 [[nodiscard]] Result<void> setUnitAttribute(Unit& unit, std::string_view attribute, double value) const;
258 [[nodiscard]] Result<effects::EffectHandle> applyEffect(Unit& unit, const RTSEffectDefinition& definition) const;
260 [[nodiscard]] Result<effects::EffectHandle> applyEffect(Building& building,
261 const RTSEffectDefinition& definition) const;
263 [[nodiscard]] Result<double> heal(SubjectRef source, SubjectRef target, double amount) const;
265 [[nodiscard]] Result<effects::EffectHandle> applyStatusEffect(
266 SubjectRef source, SubjectRef target, std::string effect, double durationOverride = -1.0);
267
282 [[nodiscard]] Result<RTSBuildReceipt> build(Building& building, action::ActionRuntime& action,
283 resource::IResourceAccount& account, resource::CostSpec cost,
284 std::string product, Duration duration,
285 std::string productionKind = "unit", int priority = 0,
286 std::string transactionId = {},
287 definition::DefinitionHandle definition = {});
288
290 [[nodiscard]] Result<void> setProductionResourceReserve(
291 Faction& faction, std::string resource, std::int64_t amount, int minimumPriority);
292
294 [[nodiscard]] Result<RTSCancelProductionReceipt> cancelProduction(
295 Building& building, resource::IResourceAccount& account, std::string productionTaskId,
296 std::string orderId, resource::CostSpec refund, std::string reason = "production cancelled");
297
300 std::string_view json) {
301 auto loaded = RTSContentLoader::load(registry, json);
302 if (loaded) definitions_ = &registry;
303 return loaded;
304 }
306 void setDefinitionRegistry(definitions::DefinitionRegistry* registry) noexcept { definitions_ = registry; }
307
309 void setResourceCredit(ResourceCredit credit) { resourceCredit_ = std::move(credit); }
311 void setRepairDebit(RepairDebit debit) { repairDebit_ = std::move(debit); }
313 void setCrowdProvider(crowd::Crowd* crowd) noexcept;
315 void setNavigationProvider(map::Pathfinder* pathfinder, NavigationGrid grid = {},
316 NavigationEvent unreachable = {}) noexcept;
318 void setFogProvider(FogProvider provider) noexcept;
320 void setCombatProviders(sensing::SensingWorld* sensing, combat::DamageRuntime* damage) noexcept;
327 [[nodiscard]] Result<void> configureSettlementRules(const settlement::SettlementRuleSet& rules);
329 void setFireLineQuery(FireLineQuery query) { fireLineQuery_ = std::move(query); }
331 void setCombatHeightQuery(CombatHeightQuery query) { combatHeightQuery_ = std::move(query); }
334 projectileCollisionQuery_ = std::move(query);
335 }
337 void setAIProductionRequest(AIProductionRequest request) { aiProductionRequest_ = std::move(request); }
339 void setMatchResourceQuery(MatchResourceQuery query) { matchResourceQuery_ = std::move(query); }
341 void setPassiveIncomeCredit(PassiveIncomeCredit credit) { passiveIncomeCredit_ = std::move(credit); }
344 ammoProductionPurchase_ = std::move(purchase);
345 }
347 void setProductionSpawn(ProductionSpawn spawn) { productionSpawn_ = std::move(spawn); }
350 productionSpawnPosition_ = std::move(position);
351 }
353 void setReinforcementCancel(ReinforcementCancel cancel) { reinforcementCancel_ = std::move(cancel); }
354
361 [[nodiscard]] Result<std::size_t> step(const SimulationStep& step, IRTSActionExecutor& executor);
362
370 [[nodiscard]] Result<std::size_t> stepScript(double seconds);
371
373 [[nodiscard]] Result<void> configureScriptWorld(int width, int height, float cellSize,
374 float originX = 0.0f, float originY = 0.0f);
376 [[nodiscard]] Result<void> setScriptNavigationBlocked(int x, int y, bool blocked);
378 [[nodiscard]] Result<void> setScriptNavigationCost(int x, int y, float cost);
380 [[nodiscard]] Result<void> setScriptTerrainElevation(int x, int y, float elevation);
382 [[nodiscard]] Result<float> scriptTerrainElevation(int x, int y) const;
384 [[nodiscard]] Result<void> addScriptResource(Faction& faction, std::string resource, std::int64_t amount);
386 [[nodiscard]] Result<std::int64_t> scriptResource(Faction& faction, std::string_view resource) const;
399 [[nodiscard]] Result<void> configureScriptAI(Faction& faction, LogicalId workerDefinition,
400 LogicalId armyDefinition, LogicalId targetBuildingDefinition, int desiredWorkers,
401 int attackThreshold, float thinkInterval = 1.0f, float formationSpacing = 1.2f,
402 bool enabled = true);
404 [[nodiscard]] Result<ContentImportReceipt> loadScriptContent(std::string_view json);
406 [[nodiscard]] Result<RTSBuildReceipt> queueScriptUnit(Building& producer, SubjectRef unitSubject,
407 LogicalId unitDefinition, int priority = 0);
409 [[nodiscard]] Result<ReinforcementRequestReceipt> queueScriptReinforcement(
410 Building& producer, SubjectRef unitSubject, LogicalId preferredDefinition, int priority = 0);
412 [[nodiscard]] Result<Building*> startScriptConstruction(Faction& faction, SubjectRef buildingSubject,
413 LogicalId buildingDefinition, WorldPosition position,
414 Unit& builder);
416 [[nodiscard]] Result<resource::Receipt> cancelScriptConstruction(Building& building);
418 [[nodiscard]] Result<resource::Receipt> sellScriptBuilding(Building& building);
420 [[nodiscard]] Result<RTSBuildReceipt> queueScriptResearch(Building& producer, std::string upgrade,
421 int priority = 0);
423 [[nodiscard]] Result<RTSCancelProductionReceipt> cancelScriptProduction(
424 Building& producer, int queueIndex = -1);
426 [[nodiscard]] Result<void> setBuildingRally(
427 Building& producer, CommandSpec command, bool groupedReinforcements = false) const;
429 [[nodiscard]] Result<void> linkBuildingRally(Building& producer, Building& source) const;
431 [[nodiscard]] Result<void> clearBuildingRally(Building& producer) const;
433 [[nodiscard]] Result<void> setReinforcementLimit(Building& producer, std::size_t maximum) const;
435 [[nodiscard]] Result<void> setReinforcementTypeLimit(
436 Building& producer, std::string unitType, std::size_t maximum) const;
438 [[nodiscard]] Result<void> setReinforcementTypePriority(
439 Building& producer, std::string unitType, int priority) const;
441 [[nodiscard]] Result<void> setReinforcementFallback(
442 Building& producer, std::string preferred, std::string fallback) const;
444 [[nodiscard]] Result<void> setReinforcementAutoCancel(Building& producer, float seconds) const;
446 [[nodiscard]] Result<void> setReinforcementTransport(
447 Building& producer, Unit* transport, std::size_t minimumLoad = 0) const;
449 [[nodiscard]] Result<void> castScriptAbility(Unit& caster, std::string ability,
452 [[nodiscard]] Result<void> cancelScriptAbility(Unit& caster);
454 [[nodiscard]] Result<std::size_t> requestFireSupport(
455 Unit& requester, WorldPosition center, float radius, int shotsPerResponder,
456 std::size_t maxResponders = 0) const;
458 [[nodiscard]] Result<std::size_t> cancelFireSupport(Unit& requester) const;
460 [[nodiscard]] Result<std::size_t> unloadTransport(Unit& transport, WorldPosition destination) const;
462 [[nodiscard]] Result<std::size_t> evacuateBuilding(Building& building, WorldPosition destination) const;
464 [[nodiscard]] Result<void> setUnitCloaked(Unit& unit, bool cloaked) const;
466 [[nodiscard]] Result<void> queueScriptCommand(RTSReplayCommand command);
468 [[nodiscard]] Result<std::string> exportScriptCommandLog() const;
470 [[nodiscard]] Result<void> importScriptCommandLog(std::string_view text, bool clearExisting = true);
472 [[nodiscard]] std::uint64_t scriptTick() const noexcept;
474 [[nodiscard]] Result<void> captureScriptCheckpoint(std::string name);
476 [[nodiscard]] Result<void> restoreScriptCheckpoint(std::string_view name);
478 [[nodiscard]] Result<void> removeScriptCheckpoint(std::string_view name);
480 [[nodiscard]] Result<bool> scriptCellVisible(Faction& faction, int x, int y) const;
482 [[nodiscard]] Result<bool> scriptCellExplored(Faction& faction, int x, int y) const;
484 [[nodiscard]] Result<Value> scriptContact(Faction& faction, SubjectRef target) const;
485
493 [[nodiscard]] Result<void> remove(SubjectRef subject);
498 [[nodiscard]] Result<std::size_t> cleanupDestroyed();
499
501 [[nodiscard]] std::size_t unitCount() const noexcept;
503 [[nodiscard]] std::size_t buildingCount() const noexcept;
505 [[nodiscard]] std::size_t resourceNodeCount() const noexcept;
507 [[nodiscard]] std::size_t playerCount() const noexcept;
509 [[nodiscard]] std::size_t factionCount() const noexcept;
511 [[nodiscard]] std::size_t matchCount() const noexcept;
512
513private:
518 struct MovementGroup {
520 std::vector<ecs::EntityHandle> handles;
521 std::vector<std::uint64_t> epochs;
522 };
523 std::vector<MovementGroup> movementGroups_;
524 [[nodiscard]] Result<std::size_t> stepMovementGroups();
529 [[nodiscard]] Result<std::vector<RTSMovementGroupSnapshot>> captureMovementGroups() const;
534 [[nodiscard]] Result<std::vector<MovementGroup>> prepareMovementGroups(const RTSStateSnapshot& snapshot) const;
535 struct GameplayRuntime;
536 [[nodiscard]] Player* resolvePlayer(SubjectRef subject) const noexcept;
537 [[nodiscard]] Unit* resolveUnit(SubjectRef subject) const noexcept;
538 enum class SubjectClaimScope { Live, LiveOrReserved };
539 [[nodiscard]] bool ownsSubject(SubjectRef subject,
540 SubjectClaimScope scope = SubjectClaimScope::Live) const noexcept;
541 void recordDamageEvent(const combat::DamageRequest& request,
542 const combat::DamageOutcome& outcome,
543 SimulationTick tick, DamageChannel channel);
544 void recordCombatEvent(const CombatFireEvent& event, SimulationTick tick);
545 void recordLifecycleEvent(const LifecycleEvent& event, SimulationTick tick);
546 void clearOwnedRoots() noexcept;
547 [[nodiscard]] Result<void> rebindScriptRootProviders();
548 [[nodiscard]] Result<void> materialize(Unit& unit);
549 [[nodiscard]] Result<void> materialize(Building& building);
550 enum class UnitRemovalReason { Gameplay, SpawnRollback };
551 [[nodiscard]] Result<ProductionSpawnOutcome> placeProducedUnit(Unit& unit, WorldPosition requested);
552 void removeUnitRoot(Unit& unit, UnitRemovalReason reason = UnitRemovalReason::Gameplay);
553 void removeBuildingRoot(Building& building, bool destroyOccupants);
554 void removeResourceNodeRoot(ResourceNode& node);
555 std::vector<ecs::EntityHandle> units_;
556 std::vector<ecs::EntityHandle> buildings_;
557 std::vector<ecs::EntityHandle> resourceNodes_;
558 std::vector<ecs::EntityHandle> players_;
559 std::vector<ecs::EntityHandle> factions_;
560 std::vector<ecs::EntityHandle> matches_;
561 std::vector<ecs::EntityHandle> weapons_;
562 ResourceCredit resourceCredit_;
563 RepairDebit repairDebit_;
564 crowd::Crowd* crowd_ = nullptr;
565 map::Pathfinder* pathfinder_ = nullptr;
566 NavigationGrid navigationGrid_;
567 NavigationEvent navigationEvent_;
568 FogProvider fogProvider_;
569 FogOfWarSystem::State fogState_;
570 sensing::SensingWorld* sensing_ = nullptr;
571 combat::DamageRuntime* damage_ = nullptr;
572 CombatFireSystem::State combatState_;
573 FireLineQuery fireLineQuery_;
574 CombatHeightQuery combatHeightQuery_;
575 ProjectileCollisionQuery projectileCollisionQuery_;
576 RTSProjectileSystem projectiles_;
577 std::vector<RTSFrameDamageEvent> frameDamageEvents_;
578 std::vector<RTSFrameCombatEvent> frameCombatEvents_;
579 std::vector<RTSFrameLifecycleEvent> frameLifecycleEvents_;
580 std::uint64_t frameEventSequence_ = 0;
581 bool preserveFrameEventsOnNextStep_ = false;
582 AIProductionRequest aiProductionRequest_;
583 definitions::DefinitionRegistry* definitions_ = nullptr;
584 MatchResourceQuery matchResourceQuery_;
585 PassiveIncomeCredit passiveIncomeCredit_;
586 AmmoProductionPurchase ammoProductionPurchase_;
587 ProductionSpawn productionSpawn_;
588 ProductionSpawnPosition productionSpawnPosition_;
589 ReinforcementCancel reinforcementCancel_;
590 struct ScriptRuntime;
591 std::unique_ptr<ScriptRuntime> scriptRuntime_;
592 std::unique_ptr<GameplayRuntime> gameplayRuntime_;
593 std::uint64_t nextGameplayEventSequence_ = 1;
594 std::vector<GameplayEvent> gameplayEvents_;
595};
596
597} // namespace eve::rts
LogicalId target
double value
Duration start
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float duration
int subject
Definition AnimSmr.cpp:163
int priority
eve::resource::CostSpec cost
eve::resource::IResourceAccount * account
#define EVENGINE_API_DOMAINS
Definition Export.h:110
Host-neutral player-equivalent command and observation protocol.
Optional companion surface for gameplay providers that can enumerate instances.
float maximum[3]
const GltfImportRequest & request
float elevation
std::uint32_t height
std::uint32_t width
JobScope scope
std::string text
std::array< float, 3 > position
std::string name
std::unique_ptr< ParticleEffect > effect
float radius
std::string action
Definition PlayHost.cpp:117
Canonical definition-to-RTS-component materialization.
Selective combat-stat adapter for RTS units.
Atomic RTS content-pack import into the canonical definition registry.
RTS effect adapter with morale, suppression and production policies.
Deterministic match lifecycle and victory systems.
Atomic RTS build/production composition over the shared protocols.
Stable tick-addressed RTS command recording and replay.
Stable in-memory RTS root snapshots independent of ECS handles.
Deterministic phase-one RTS systems and their ECS contracts.
Research settlement over canonical Definitions and Production.
const RoadNode * node
std::string resource
Versioned, integrity-checked persistence envelopes.
TacticalUnit * unit
LogicalId definition
SimulationTick tick
std::optional< InteractionSession > session
Definition Tactics.cpp:39
int spacing
float step
Definition TreeMesh.cpp:314
const UnitySourceAsset & source
glm::vec3 point
Multi-provider gameplay boundary consumed by input, scripts and automation.
Optional read-only discovery surface implemented beside a gameplay provider.
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Strong, domain-neutral reference to a runtime subject.
Definition SubjectRef.h:26
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
群体行为模块:连续流场寻路 + 海量单位移动/转向/行动 + Boids 鸟群。
Definition Crowd.h:116
Deterministic registry of topic-neutral, versioned JSON definitions.
Definition Definitions.h:58
Pathfinding facade. Single-agent: A*. Group (same goal): Flow Field + follow. Grid/topology internals...
Definition Pathfinder.h:20
RTS building domain root with placement and production composition.
Definition RTSTypes.h:840
Faction domain root; membership is a set of typed runtime handles.
Definition RTSTypes.h:1178
Interface isolating RTS orders from the shared action runtime.
Definition RTSAction.h:38
Owns RTS root entities and coordinates the phase-one systems.
Definition RTS.h:63
void setRepairDebit(RepairDebit debit)
Install the game-owned economy debit boundary used by building repair.
Definition RTS.h:311
void setFireLineQuery(FireLineQuery query)
Install the map/game-owned line-of-fire query used by direct weapons.
Definition RTS.h:329
void setProductionSpawnPosition(ProductionSpawnPosition position)
Install the game/map-owned deterministic building-exit placement probe.
Definition RTS.h:349
void setMatchResourceQuery(MatchResourceQuery query)
Install the authoritative economy query used by resource-target matches.
Definition RTS.h:339
Result< ContentImportReceipt > loadContent(definitions::DefinitionRegistry &registry, std::string_view json)
Atomically import an RTS content pack into the caller-owned canonical definition registry.
Definition RTS.h:299
void setAIProductionRequest(AIProductionRequest request)
Install the authoritative production boundary used by enabled faction AI policies.
Definition RTS.h:337
void setAmmoProductionPurchase(AmmoProductionPurchase purchase)
Install the authoritative economy purchase boundary used by building ammunition production.
Definition RTS.h:343
void setDefinitionRegistry(definitions::DefinitionRegistry *registry) noexcept
Attach the canonical definition registry used to settle completed research.
Definition RTS.h:306
void setCombatHeightQuery(CombatHeightQuery query)
Install the map/game-owned absolute projectile launch-height query.
Definition RTS.h:331
void setPassiveIncomeCredit(PassiveIncomeCredit credit)
Install the authoritative economy credit boundary used by powered passive income.
Definition RTS.h:341
void setProductionSpawn(ProductionSpawn spawn)
Install the game-owned factory that materializes completed canonical unit production tasks.
Definition RTS.h:347
void setReinforcementCancel(ReinforcementCancel cancel)
Install the game-owned atomic cancellation/refund boundary for capped reinforcements.
Definition RTS.h:353
void setResourceCredit(ResourceCredit credit)
Install the game-owned economy credit boundary used by mining deliveries.
Definition RTS.h:309
void setProjectileCollisionQuery(ProjectileCollisionQuery query)
Install the map/physics-owned swept collision query for in-flight projectiles.
Definition RTS.h:333
RTS unit domain root.
Definition RTSTypes.h:495
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
DamageChannel
Authoritative damage route that produced one transient RTS frame event.
Definition RTSSystems.h:67
std::function< Result< double >(Faction &, std::string_view)> MatchResourceQuery
Reads a resource balance from the game-owned canonical economy account.
Definition RTSMatch.h:16
std::function< map::Fov *(Faction &)> FogProvider
Resolves the canonical FOV instance used by a faction; allies may deliberately share one instance.
Definition RTSSystems.h:310
std::function< Result< resource::Receipt >(Building &, const resource::CostSpec &)> PassiveIncomeCredit
Credits passive building income through the game-owned canonical economy boundary.
Definition RTSSystems.h:402
std::function< Result< resource::Receipt >(Unit &, const resource::CostSpec &)> ResourceCredit
Callback that credits gathered resources to the authoritative account selected by the game.
Definition RTSSystems.h:358
std::function< Result< ProductionSpawnOutcome >(Building &, const production::ProductionTask &, WorldPosition)> ProductionSpawn
Game-owned factory receiving the requested production exit position. The factory owns final placement...
Definition RTSSystems.h:729
std::function< Result< std::optional< WorldPosition > >(Building &, const production::ProductionTask &)> ProductionSpawnPosition
Game/map-owned deterministic exit probe; empty means every valid exit is currently occupied.
Definition RTSSystems.h:732
std::function< Result< std::optional< ProjectileCollision > >(WorldPosition from, float fromHeight, WorldPosition to, float toHeight, SubjectRef source, ecs::EntityHandle intendedTarget)> ProjectileCollisionQuery
Map/physics-owned swept collision query; empty means the segment remained clear.
Definition RTSSystems.h:620
std::function< void(Unit &, const OrderRecord &)> NavigationEvent
Notification emitted once when a newly planned order has no canonical map route.
Definition RTSSystems.h:270
std::function< Result< void >(Faction &, Building &, const LogicalId &)> AIProductionRequest
Authoritative production boundary invoked by AI policy decisions.
Definition RTSSystems.h:571
std::function< Result< bool >(WorldPosition origin, WorldPosition target, ecs::EntityHandle source, ecs::EntityHandle targetEntity, const weapon::WeaponDefinition &weapon)> FireLineQuery
Uses canonical sensing, weapon and damage providers for RTS automatic fire.
Definition RTSSystems.h:584
std::function< CombatHeightProfile(WorldPosition origin, WorldPosition target, ecs::EntityHandle source, ecs::EntityHandle targetEntity)> CombatHeightQuery
Resolve absolute heights for one authorized projectile launch.
Definition RTSSystems.h:589
std::function< Result< resource::Receipt >(Unit &, Building &, const resource::CostSpec &)> RepairDebit
Callback that debits repair costs from the authoritative account selected by the game.
Definition RTSSystems.h:383
std::function< Result< std::size_t >(Building &, std::string_view, std::int64_t, std::size_t)> AmmoProductionPurchase
Assigns and transfers tactical ammunition through canonical WeaponEntity resource state.
Definition RTSSystems.h:425
std::function< Result< void >(Building &, std::string_view)> ReinforcementCancel
Pauses canonical production tasks when a shared rally combat group reaches reinforcement limits.
Definition RTSSystems.h:744
bool enabled
One discoverable domain action and its owning schema projection.
Owning evidence that a gameplay authority accepted one command.
One player-semantic command submitted to a domain authority.
Owning event projection safe across frames and process boundaries.
Immutable owning observation of one authoritative gameplay instance.
Owning authorization context shared by player, script and automation adapters.
One deterministic fixed-step emitted by SimulationClock.
Definition Time.h:158
Complete owning audit result of one committed damage transaction.
Definition Damage.h:98
Owning input for one damage transaction.
Definition Damage.h:49
Stable presentation payload for firing, launch, and miss feedback.
Definition RTSSystems.h:84
One domain-neutral command submitted to a unit's generic order queue.
Definition RTSTypes.h:101
Stable payload for one committed RTS lifecycle transition.
Definition RTSSystems.h:119
World/grid conversion used when an RTS composition consumes a canonical map Pathfinder.
Definition RTSSystems.h:263
Owning transient projection of one committed canonical weapon lifecycle event.
Definition RTS.h:43
SimulationTick tick
Definition RTS.h:45
std::uint64_t sequence
Definition RTS.h:44
CombatFireEvent event
Definition RTS.h:46
Owning transient projection of one canonical damage transaction completed this RTS frame.
Definition RTS.h:34
SimulationTick tick
Definition RTS.h:36
DamageChannel channel
Definition RTS.h:37
combat::DamageOutcome outcome
Definition RTS.h:39
std::uint64_t sequence
Definition RTS.h:35
combat::DamageRequest request
Definition RTS.h:38
Owning transient projection of one committed non-combat RTS lifecycle event.
Definition RTS.h:50
Stable pacing-group membership; entity handles and derived speed factors are excluded....
One process-independent command using stable subjects instead of ECS handles.
Definition RTSReplay.h:39
Two-dimensional deterministic RTS world position.
Definition RTSTypes.h:48