载入中...
搜索中...
未找到
RTSSystems.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
10#include "rts/RTSAction.h"
13#include "weapon/WeaponTypes.h"
14
15#include <cstddef>
16#include <functional>
17#include <map>
18#include <span>
19#include <set>
20#include <vector>
21
22namespace eve::rts {
23
25enum class FormationKind : std::uint8_t {
26 Line,
27 Grid,
28 Wedge,
29 Column,
31};
32
36 float spacing = 32.0f;
37 int columns = 0;
38 float rotationRadians = 0.f;
39
41 [[nodiscard]] EVENGINE_API_DOMAINS Result<void> validate() const;
42};
43
49 std::vector<SubjectRef> units;
52 float leadDistance = 2.f;
53};
54
57 const char* name = "";
58 const char* view = "";
59 const char* readSet = "";
60 const char* writeSet = "";
61 const char* structuralChanges = "";
62 const char* events = "";
63 const char* phase = "";
64};
65
67enum class DamageChannel : std::uint8_t { Ability, Projectile, Weapon };
69using DamageEventSink = std::function<void(
72
91using CombatFireEventSink = std::function<void(const CombatFireEvent&, SimulationTick)>;
92
127using LifecycleEventSink = std::function<void(const LifecycleEvent&, SimulationTick)>;
128
131public:
138 [[nodiscard]] static Result<int> award(Unit& unit, float experience);
139};
140
143public:
145 [[nodiscard]] static bool isAllied(Faction* left, Faction* right) noexcept;
147 [[nodiscard]] static bool isAllied(const FactionLink& left, const FactionLink& right) noexcept;
148};
149
152public:
157 [[nodiscard]] static bool isTargetable(Faction* viewer, SubjectRef subject) noexcept;
158};
159
161[[nodiscard]] std::span<const SystemContract> systemContracts() noexcept;
162
170public:
178 [[nodiscard]] static Result<std::vector<WorldPosition>> plan(std::size_t count, WorldPosition anchor,
179 const FormationSpec& spec);
180};
181
183using PlacementValidation = std::function<Result<void>(WorldPosition, LogicalId)>;
184
187public:
196 [[nodiscard]] static Result<void> validate(Faction& faction, WorldPosition position,
197 LogicalId definition, const PlacementValidation& placement,
198 bool requireInfluence = true);
199};
200
203 std::size_t requested = 0;
204 std::size_t accepted = 0;
205 std::vector<std::string> orderIds;
206};
207
216public:
225 [[nodiscard]] static Result<FanOutReceipt> fanOut(std::span<const ecs::EntityHandle> unitHandles,
226 const CommandSpec& command, const FormationSpec& formation);
227};
228
231public:
237 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step);
238};
239
242public:
244 [[nodiscard]] static Result<std::size_t> step();
245};
246
249public:
251 [[nodiscard]] static Result<std::size_t> step();
252};
253
254} // namespace eve::rts
255
256namespace eve::crowd { class Crowd; }
257namespace eve::sensing { class SensingWorld; }
258namespace eve::map { class Pathfinder; class Fov; }
259
260namespace eve::rts {
261
264 float cellSize = 1.0f;
265 float originX = 0.0f;
266 float originY = 0.0f;
267};
268
270using NavigationEvent = std::function<void(Unit&, const OrderRecord&)>;
271
274public:
276 [[nodiscard]] static Result<std::size_t> step(map::Pathfinder& pathfinder, const NavigationGrid& grid,
277 const NavigationEvent& unreachable = {});
278};
279
282public:
284 [[nodiscard]] static Result<std::size_t> step();
285};
286
289public:
305 [[nodiscard]] static Result<std::size_t> step(const map::Pathfinder& pathfinder,
306 const NavigationGrid& grid);
307};
308
310using FogProvider = std::function<map::Fov*(Faction&)>;
311
314public:
316 struct State {
318 struct Binding {
319 ecs::EntityHandle source{};
320 ecs::EntityHandle faction{};
321 map::Fov* provider = nullptr;
322 int revealer = -1;
323 };
324 std::vector<Binding> bindings;
325 };
326
328 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, const NavigationGrid& grid,
329 State& state, const FogProvider& provider);
331 static void clear(State& state) noexcept;
339 [[nodiscard]] static const Faction::Intel::Contact* contact(const Faction& faction,
340 SubjectRef subject) noexcept;
341};
342
345public:
347 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, crowd::Crowd& crowd);
348};
349
352public:
354 [[nodiscard]] static Result<std::size_t> step();
355};
356
358using ResourceCredit = std::function<Result<resource::Receipt>(Unit&, const resource::CostSpec&)>;
359
362public:
364 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, const ResourceCredit& credit);
365};
366
369public:
371 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
372 const LifecycleEventSink& events = {});
373};
374
377public:
379 [[nodiscard]] static Result<std::size_t> step();
380};
381
383using RepairDebit = std::function<Result<resource::Receipt>(Unit&, Building&, const resource::CostSpec&)>;
384
387public:
389 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, combat::DamageRuntime& settlement,
390 const RepairDebit& debit);
391};
392
395public:
397 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
398 const LifecycleEventSink& events = {});
399};
400
402using PassiveIncomeCredit = std::function<Result<resource::Receipt>(Building&, const resource::CostSpec&)>;
403
406public:
408 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
409 const PassiveIncomeCredit& credit = {});
410};
411
414public:
416 [[nodiscard]] static Result<std::size_t> step();
418 [[nodiscard]] static Result<std::size_t> unload(Unit& transport, WorldPosition destination);
420 [[nodiscard]] static Result<std::size_t> evacuate(Building& building, WorldPosition destination);
421};
422
424using AmmoProductionPurchase = std::function<Result<std::size_t>(
425 Building&, std::string_view, std::int64_t, std::size_t)>;
426
429public:
439 [[nodiscard]] static Result<std::size_t> step(
440 const SimulationStep& step, const AmmoProductionPurchase& purchase = {},
441 map::Pathfinder* pathfinder = nullptr, const NavigationGrid& grid = {},
442 const LifecycleEventSink& events = {});
443};
444
451
454public:
456 [[nodiscard]] static Result<SupplyRendezvousSelection> select(
457 Unit& supplier, Unit& relay, WorldPosition predicted,
458 map::Pathfinder& pathfinder, const NavigationGrid& grid);
459};
460
463public:
465 [[nodiscard]] static Result<std::size_t> step();
466};
467
470public:
472 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
473 const LifecycleEventSink& events = {});
474};
475
478public:
480 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
481 const LifecycleEventSink& events = {});
482};
483
486public:
488 [[nodiscard]] static Result<std::size_t> step();
489};
490
492using AbilityResourceDebit = std::function<Result<resource::Receipt>(Unit&, const resource::CostSpec&)>;
493
496public:
498 [[nodiscard]] static Result<void> cast(Unit& caster, const AbilitySpec& spec,
499 ecs::EntityHandle target, WorldPosition point,
500 combat::DamageRuntime& damage,
501 const AbilityResourceDebit& debit = {},
502 const DamageEventSink& damageEvents = {},
503 SimulationTick tick = {},
504 const LifecycleEventSink& events = {});
506 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
507 combat::DamageRuntime& damage,
508 const DamageEventSink& damageEvents = {},
509 const LifecycleEventSink& events = {});
510};
511
514public:
516 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step);
517};
518
528
531public:
541 [[nodiscard]] static Result<ArtilleryRelocationSelection> select(
542 Unit& unit, WorldPosition target, float distance, float weaponRange,
543 map::Pathfinder& pathfinder, const NavigationGrid& grid);
544};
545
548public:
550 [[nodiscard]] static Result<std::size_t> request(Unit& requester, WorldPosition center, float radius,
551 int shotsPerResponder, std::size_t maxResponders = 0);
553 [[nodiscard]] static Result<std::size_t> cancel(Unit& requester);
555 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step);
556};
557
560public:
566 [[nodiscard]] static Result<std::size_t> step(const combat::DamageRuntime* damage = nullptr,
567 const SimulationStep& step = {});
568};
569
571using AIProductionRequest = std::function<Result<void>(Faction&, Building&, const LogicalId&)>;
572
575public:
577 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step,
578 const AIProductionRequest& requestProduction);
579};
580
582using FireLineQuery = std::function<Result<bool>(WorldPosition origin, WorldPosition target,
583 ecs::EntityHandle source, ecs::EntityHandle targetEntity,
584 const weapon::WeaponDefinition& weapon)>;
586struct CombatHeightProfile { float source = 0.0f; float target = 0.0f; };
589 WorldPosition origin, WorldPosition target, ecs::EntityHandle source, ecs::EntityHandle targetEntity)>;
590
593public:
595 struct State {
596 std::set<std::string> mirroredSubjects;
597 std::set<std::string> blockedSubjects;
598 };
600 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, State& state,
602 class RTSProjectileSystem* projectiles = nullptr,
603 const FireLineQuery& fireLine = {},
604 map::Pathfinder* pathfinder = nullptr,
605 const NavigationGrid& navigationGrid = {},
606 const CombatHeightQuery& heightQuery = {},
607 const DamageEventSink& damageEvents = {},
608 const CombatFireEventSink& fireEvents = {});
609};
610
614 ecs::EntityHandle entity{};
615};
616
618using ProjectileCollisionQuery = std::function<Result<std::optional<ProjectileCollision>>(
619 WorldPosition from, float fromHeight, WorldPosition to, float toHeight,
620 SubjectRef source, ecs::EntityHandle intendedTarget)>;
621
624 std::uint64_t key = 0;
630 float targetHeight = 0.0f;
631 std::string damageType;
632 double damage = 0.0;
633 float radius = 0.0f;
635 bool targetsGround = true;
636 bool targetsAir = true;
637 bool friendlyFire = false;
638 bool blockedByObstacles = false;
639 std::vector<std::string> requiredTargetTags;
640 std::vector<std::string> excludedTargetTags;
641};
642
646 std::vector<RTSProjectilePayloadSnapshot> payloads;
647};
648
650using ProjectileSubjectResolver = std::function<ecs::Entity*(SubjectRef)>;
651
654public:
656 [[nodiscard]] Result<void> launch(SubjectRef source, ecs::EntityHandle faction, WorldPosition origin,
657 ecs::EntityHandle target, WorldPosition targetPoint,
658 const weapon::WeaponDefinition& weapon, double damageFactor = 1.0,
659 ecs::EntityHandle observer = {}, float originHeight = 0.0f,
660 float targetHeight = 0.0f);
663 const ProjectileCollisionQuery& collision = {},
664 const DamageEventSink& damageEvents = {});
666 [[nodiscard]] Result<weapon::ProjectilePoint> position(ecs::EntityHandle target) const override;
668 [[nodiscard]] std::size_t activeCount() const noexcept { return runtime_.activeCount(); }
670 [[nodiscard]] RTSProjectileSystemSnapshot snapshot() const;
672 [[nodiscard]] Result<void> restore(const RTSProjectileSystemSnapshot& snapshot,
673 const ProjectileSubjectResolver& resolver);
674
675private:
676 struct Payload {
678 ecs::EntityHandle faction{};
679 ecs::EntityHandle target{};
680 ecs::EntityHandle observer{};
681 WorldPosition targetPoint;
682 float targetHeight = 0.0f;
683 std::string damageType;
684 double damage = 0.0;
685 float radius = 0.0f;
686 float splashMinimumDamageFactor = 0.1f;
687 bool targetsGround = true;
688 bool targetsAir = true;
689 bool friendlyFire = false;
690 bool blockedByObstacles = false;
691 std::vector<std::string> requiredTargetTags;
692 std::vector<std::string> excludedTargetTags;
693 };
694 static std::uint64_t key(weapon::ProjectileHandle handle) noexcept;
695 weapon::ProjectileRuntime runtime_;
696 std::map<std::uint64_t, Payload> payloads_;
697};
698
701public:
708 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, IRTSActionExecutor& executor);
709};
710
713
720
729 std::function<Result<ProductionSpawnOutcome>(Building&, const production::ProductionTask&, WorldPosition)>;
732 std::function<Result<std::optional<WorldPosition>>(Building&, const production::ProductionTask&)>;
733
736public:
738 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, const ProductionSpawn& spawn = {},
740 const LifecycleEventSink& events = {});
741};
742
744using ReinforcementCancel = std::function<Result<void>(Building&, std::string_view)>;
746using ReinforcementEnqueue = std::function<Result<std::string>(Building&, std::string_view)>;
747
750 std::string requestedProduct;
751 std::string queuedProduct;
752 std::string taskId;
753};
754
757public:
759 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step = {},
760 const ReinforcementCancel& cancel = {});
762 [[nodiscard]] static Result<ReinforcementRequestReceipt> request(
763 Building& building, std::string preferredProduct, const ReinforcementEnqueue& enqueue);
764};
765
768public:
770 [[nodiscard]] static Result<std::size_t> step();
771};
772
775public:
777 [[nodiscard]] static Result<std::size_t> step(const SimulationStep& step, combat::DamageRuntime& settlement,
778 const LifecycleEventSink& events = {});
779};
780
781} // namespace eve::rts
LogicalId target
int observer
Definition AnimSmr.cpp:162
int subject
Definition AnimSmr.cpp:163
std::string from
Vec3 anchor
Definition CaveMesh.cpp:90
#define EVENGINE_API_DOMAINS
Definition Export.h:110
const GltfImportRequest & request
std::uint32_t key
HexVec3 left
HexVec3 right
HexCoordinates to
Cell the unit walks towards on this segment.
Definition HexUnits.cpp:64
std::array< float, 3 > position
float distance
float radius
PrimitiveHandle handle
Deterministic pooled projectile simulation.
RTS adapter boundary over the shared action lifecycle.
Strongly typed, transaction-friendly resource cost protocol.
V3 origin
Definition RoadBake.cpp:138
std::uint32_t count
std::string damageType
TacticalUnit * unit
Battle::Events events
LogicalId definition
SimulationTick tick
float step
Definition TreeMesh.cpp:314
const UnitySourceAsset & source
glm::vec3 point
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
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
Owner-thread deterministic damage coordinator.
Definition Damage.h:125
群体行为模块:连续流场寻路 + 海量单位移动/转向/行动 + Boids 鸟群。
Definition Crowd.h:116
Dynamic field-of-view / fog-of-war facade. Phase A: 2D shadowcast + multi-revealer + explored memory....
Definition Fov.h:27
Pathfinding facade. Single-agent: A*. Group (same goal): Flow Field + follow. Grid/topology internals...
Definition Pathfinder.h:20
Immutable canonical multi-resource cost.
Runs deterministic faction production and attack policy.
Definition RTSSystems.h:574
Validates, schedules and settles active RTS abilities through canonical damage/effect owners.
Definition RTSSystems.h:495
Selects reachable shoot-and-scoot positions without taking ownership of map navigation.
Definition RTSSystems.h:530
Tracks indirect-fire deployment after movement.
Definition RTSSystems.h:513
Composes RTS powered build influence with the canonical building placement authority.
Definition RTSSystems.h:186
EVENGINE_API_DOMAINS public API.
Definition RTSSystems.h:735
RTS building domain root with placement and production composition.
Definition RTSTypes.h:840
Resolves deterministic single-faction and contested building capture.
Definition RTSSystems.h:394
EVENGINE_API_DOMAINS public API.
Definition RTSSystems.h:592
Validates a typed selection and fans one command out in formation order.
Definition RTSSystems.h:215
Builds deterministic faction command networks with relay capacity and hostile jamming.
Definition RTSSystems.h:485
Applies immediate Stop and persistent Hold/AttackMove command state.
Definition RTSSystems.h:248
Advances construction using valid builders that reached their assigned site.
Definition RTSSystems.h:368
Resolves transport boarding, building garrisoning, and contained-unit synchronization.
Definition RTSSystems.h:413
Synchronizes linked RTS units through the canonical Crowd simulation.
Definition RTSSystems.h:344
Advances lifecycle-only effects on Units and Buildings.
Definition RTSSystems.h:774
Reads authoritative faction contact projections for command authorization.
Definition RTSSystems.h:151
Resolves same-faction and match-team alliances without duplicating diplomacy state.
Definition RTSSystems.h:142
Faction domain root; membership is a set of typed runtime handles.
Definition RTSTypes.h:1178
Assigns indirect-fire responders and automatic counter-battery ground attacks.
Definition RTSSystems.h:547
Projects RTS vision into canonical map FOV and maintains faction last-known contacts.
Definition RTSSystems.h:313
Pure deterministic formation planner.
Definition RTSSystems.h:169
Interface isolating RTS orders from the shared action runtime.
Definition RTSAction.h:38
Allocates faction power deterministically and settles powered passive income.
Definition RTSSystems.h:405
Advances Gather/ReturnCargo orders without owning an economy balance.
Definition RTSSystems.h:361
Recovers suppression and applies nearby friendly morale auras.
Definition RTSSystems.h:469
Moves units toward their active generic order targets.
Definition RTSSystems.h:230
Settles arrived finite movement orders so the canonical queue can advance.
Definition RTSSystems.h:241
Plans unit routes through the canonical map Pathfinder without owning map blockers or costs.
Definition RTSSystems.h:273
Sends active generic orders to one shared action executor.
Definition RTSSystems.h:700
Maintains persistent two-point patrol state without owning pathfinding.
Definition RTSSystems.h:281
RTS impact adapter over the canonical pooled weapon projectile trajectory runtime.
Definition RTSSystems.h:653
std::size_t activeCount() const noexcept
Return live canonical projectile count.
Definition RTSSystems.h:668
EVENGINE_API_DOMAINS public API.
Definition RTSSystems.h:756
Dispatches and unloads production reinforcements assigned to canonical unit containers.
Definition RTSSystems.h:767
Repairs friendly completed buildings without owning an economy balance.
Definition RTSSystems.h:386
Regenerates unit and building shield projections after their configured damage delay.
Definition RTSSystems.h:477
Derives stable multi-vehicle supply convoys and paces their leader.
Definition RTSSystems.h:462
Selects a low-threat supply rendezvous while delegating reachability to the canonical map.
Definition RTSSystems.h:453
EVENGINE_API_DOMAINS public API.
Definition RTSSystems.h:428
Updates escort guards and deterministic combat-group target commitments.
Definition RTSSystems.h:559
Arbitrates deterministic directional entry into connected narrow map corridors.
Definition RTSSystems.h:288
RTS unit domain root.
Definition RTSTypes.h:495
Applies one hostile kill's experience to canonical unit veterancy state.
Definition RTSSystems.h:130
static Result< int > award(Unit &unit, float experience)
Award experience and apply every newly crossed rank modifier atomically.
Deterministically assigns idle auto-workers to compatible resource nodes.
Definition RTSSystems.h:351
Assigns idle faction workers to incomplete or damaged buildings by deterministic distance.
Definition RTSSystems.h:376
Gameplay-facing 2D candidate query service; it never values or selects targets.
Definition Sensing.h:151
Optional target-position boundary used only by homing projectiles.
放置世界:格子占用(多通道)+ 地形语义 + 已放置建筑实例。 行为由 PlacementSystem 提供;本类暴露便于脚本绑定的薄封装方法。 坐标换算统一走 eve::grid(支持 rectang...
std::function< Result< resource::Receipt >(Unit &, const resource::CostSpec &)> AbilityResourceDebit
Debits an ability resource cost through the game-owned canonical economy boundary.
Definition RTSSystems.h:492
DamageChannel
Authoritative damage route that produced one transient RTS frame event.
Definition RTSSystems.h:67
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::span< const SystemContract > systemContracts() noexcept
Return the phase-one RTS ECS contracts for tooling and review.
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< void(const LifecycleEvent &, SimulationTick)> LifecycleEventSink
Read-only observer invoked after a non-combat lifecycle transition commits.
Definition RTSSystems.h:127
std::function< Result< std::string >(Building &, std::string_view)> ReinforcementEnqueue
Game-owned transactional enqueue boundary used while resolving reinforcement fallbacks.
Definition RTSSystems.h:746
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< void(const CombatFireEvent &, SimulationTick)> CombatFireEventSink
Read-only observer invoked after a weapon consumes one authoritative shot.
Definition RTSSystems.h:91
std::function< Result< void >(WorldPosition, LogicalId)> PlacementValidation
Caller-owned canonical terrain/occupancy validation used after RTS influence checks.
Definition RTSSystems.h:183
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
FormationKind
Deterministic formation layout strategies.
Definition RTSSystems.h:25
CombatFireEventKind
Transient weapon lifecycle event emitted after an authoritative firing attempt commits.
Definition RTSSystems.h:74
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
LifecycleEventKind
Non-combat RTS state transition exposed to presentation without entering authoritative state.
Definition RTSSystems.h:94
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(const combat::DamageRequest &request, const combat::DamageOutcome &outcome, SimulationTick tick, DamageChannel channel)> DamageEventSink
Read-only observer invoked after canonical damage has committed.
Definition RTSSystems.h:71
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
std::function< ecs::Entity *(SubjectRef)> ProjectileSubjectResolver
Resolve one stable RTS subject while restoring projectile relationships.
Definition RTSSystems.h:650
ProductionSpawnState
Whether a completed production task published a unit or is waiting for space.
Definition RTSSystems.h:712
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
A subject-agnostic continuous task retained for audit and save games.
Definition Production.h:158
Typed ability policy; lifecycle effects remain owned by the canonical effect container.
Definition RTSTypes.h:133
Deterministic, canonical-map-validated artillery relocation choice.
Definition RTSSystems.h:520
Stable presentation payload for firing, launch, and miss feedback.
Definition RTSSystems.h:84
CombatFireEventKind kind
Definition RTSSystems.h:85
Adapter-owned keys previously mirrored into a shared sensing world.
Definition RTSSystems.h:595
std::set< std::string > mirroredSubjects
Definition RTSSystems.h:596
std::set< std::string > blockedSubjects
Definition RTSSystems.h:597
Absolute muzzle and target heights resolved by the authoritative map/game adapter.
Definition RTSSystems.h:586
One domain-neutral command submitted to a unit's generic order queue.
Definition RTSTypes.h:101
Receipt containing all order ids accepted by command fan-out.
Definition RTSSystems.h:202
std::vector< std::string > orderIds
Definition RTSSystems.h:205
Runtime-only revealer bindings; authoritative explored cells remain owned by map::Fov.
Definition RTSSystems.h:316
std::vector< Binding > bindings
Definition RTSSystems.h:324
Input to the pure formation planner.
Definition RTSSystems.h:34
EVENGINE_API_DOMAINS Result< void > validate() const
Validate layout kind, spacing, grid columns and finite rotation.
float rotationRadians
Counterclockwise rotation around the anchor; zero preserves legacy layouts.
Definition RTSSystems.h:38
Stable payload for one committed RTS lifecycle transition.
Definition RTSSystems.h:119
LifecycleEventKind kind
Definition RTSSystems.h:120
Caller-built admission batch for an immediate coordinated Move command. @cost Linear in unit count; c...
Definition RTSSystems.h:48
float leadDistance
Positive world-space allowance before leaders slow for lagging members.
Definition RTSSystems.h:52
std::vector< SubjectRef > units
Owned stable identities; no entity pointers are retained.
Definition RTSSystems.h:49
World/grid conversion used when an RTS composition consumes a canonical map Pathfinder.
Definition RTSSystems.h:263
Owning projection of the active generic order used by RTS systems.
Definition RTSTypes.h:117
Factory outcome; blocked tasks retain their payment and reserved identity.
Definition RTSSystems.h:715
Unit * unit
Borrowed game-owned unit; non-null only for Created, valid until ECS destruction.
Definition RTSSystems.h:718
ProductionSpawnState state
Definition RTSSystems.h:716
Earliest canonical collision found along one projectile sweep segment.
Definition RTSSystems.h:612
Stable RTS damage payload paired with one shared projectile-pool handle.
Definition RTSSystems.h:623
std::vector< std::string > requiredTargetTags
Definition RTSSystems.h:639
std::vector< std::string > excludedTargetTags
Definition RTSSystems.h:640
Complete in-flight RTS projectile state with stable gameplay relationships.
Definition RTSSystems.h:644
std::vector< RTSProjectilePayloadSnapshot > payloads
Definition RTSSystems.h:646
weapon::ProjectileRuntimeSnapshot runtime
Definition RTSSystems.h:645
Result of resolving a preferred reinforcement through a deterministic substitution chain.
Definition RTSSystems.h:749
A safe map-reachable rendezvous selected around a predicted moving relay intercept.
Definition RTSSystems.h:446
Static metadata for one ECS system's access and phase contract.
Definition RTSSystems.h:56
const char * structuralChanges
Definition RTSSystems.h:61
Two-dimensional deterministic RTS world position.
Definition RTSTypes.h:48
Complete deterministic projectile-pool state for rollback and save games.
武器模板(registerWeaponsFromJson 注册,进程级注册表)。