载入中...
搜索中...
未找到
TacticsSettlement.cpp
浏览该文件的文档.
2
3#include <cmath>
4#include <utility>
5
6namespace eve::tactics {
7
9 if (!request.ability.actor.isValid())
11 Diagnostic::error(DiagnosticCode::InvalidArgument, "tactical ability actor is invalid", "ability.actor"));
12 const SubjectRef target = request.target.isValid() ? request.target : request.ability.targetUnit;
13 if (!target.isValid())
15 DiagnosticCode::InvalidArgument, "tactical settlement requires a stable unit or cell target", "target"));
16 if (request.kind.empty() || !std::isfinite(request.magnitude) || request.magnitude < 0.0)
18 DiagnosticCode::InvalidArgument, "tactical settlement kind or magnitude is invalid", "settlement"));
19
21 common.source = request.ability.actor;
22 common.target = target;
23 common.kind = request.kind;
24 common.magnitude = request.magnitude;
25 common.tags = request.tags;
26 common.tags.push_back("tactics:ability");
27 common.tick = request.tick;
28 common.context = request.context;
29 return Result<settlement::SettlementRequest>::success(std::move(common));
30}
31
34 auto installed = rules.install(candidate);
35 if (!installed) return installed;
36 settlement_ = std::move(candidate);
38}
39
42 game_event::GameEventLog* eventLog) const {
43 auto common = makeSettlementRequest(request);
44 if (!common) return Result<settlement::SettlementResult>::failure(common.status());
45 return settlement_.settle(common.value(), policy, eventLog);
46}
47
49 std::span<const AbilitySettlementRequest> requests, std::span<settlement::ISettlementPolicy*> policies,
50 game_event::GameEventLog* eventLog) const {
51 std::vector<settlement::SettlementRequest> common;
52 common.reserve(requests.size());
53 for (const auto& request : requests) {
56 common.push_back(std::move(projected).takeValue());
57 }
58 return settlement_.settleAtomic(common, policies, eventLog);
59}
60
61} // namespace eve::tactics
LogicalId target
Vec3 projected
Definition CaveMesh.cpp:122
const GltfImportRequest & request
Shared settlement entry for declared tactical abilities.
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
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Strong, domain-neutral reference to a runtime subject.
Definition SubjectRef.h:26
bool isValid() const noexcept
Return whether this reference is valid and non-nil.
Definition SubjectRef.h:38
Deterministic in-memory stream of topic-neutral event envelopes.
Definition GameEvent.h:261
Domain-owned policy hooks used by the common settlement pipeline.
Definition Settlement.h:497
Deterministically ordered, composable settlement pipeline.
Definition Settlement.h:542
eve::Result< SettlementResult > settle(const SettlementRequest &request, ISettlementPolicy &policy, game_event::GameEventLog *events=nullptr) const
Execute one settlement transaction against a domain policy.
eve::Result< std::vector< SettlementResult > > settleAtomic(std::span< const SettlementRequest > requests, std::span< ISettlementPolicy * > policies, game_event::GameEventLog *events=nullptr) const
Prepare and commit several independent resource channels atomically.
Validated immutable-style rule collection installable into pipelines.
eve::Result< void > install(SettlementPipeline &pipeline) const
Install a stable snapshot as custom stages on a pipeline.
Result< void > configureSettlementRules(const settlement::SettlementRuleSet &rules)
Replace declarative rules used by subsequent tactical ability settlements.
Result< std::vector< settlement::SettlementResult > > settleAtomic(std::span< const AbilitySettlementRequest > requests, std::span< settlement::ISettlementPolicy * > policies, game_event::GameEventLog *eventLog=nullptr) const
Settle an ordered tactical area effect as one atomic transaction.
Result< settlement::SettlementResult > settle(const AbilitySettlementRequest &request, settlement::ISettlementPolicy &policy, game_event::GameEventLog *eventLog=nullptr) const
Settle one committed ability receipt against game-owned state.
Result< settlement::SettlementRequest > makeSettlementRequest(const AbilitySettlementRequest &request)
Validate and project a committed tactical ability into the canonical settlement request.
Domain-neutral input to one settlement operation.
Definition Settlement.h:107
std::vector< std::string > tags
Definition Settlement.h:116
Owning values required to settle one previously declared tactical ability.