载入中...
搜索中...
未找到
CombatLocomotion.cpp
浏览该文件的文档.
16 return magnitude > 0.0 ? CombatVector2{value.x / magnitude, value.z / magnitude} : CombatVector2{};
20 if (!finite(goal.position) || !std::isfinite(goal.acceptanceRadius) || goal.acceptanceRadius < 0.0)
40 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "subject is nil", "subject"));
47 Diagnostic::error(DiagnosticCode::InvalidArgument, "locomotion limits are invalid", "movement"));
80 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "subject is nil", "subject"));
83 Diagnostic::error(DiagnosticCode::NotFound, "locomotion subject was not found", subject.format()));
94 Diagnostic::error(DiagnosticCode::NotFound, "locomotion subject was not found", subject.format()));
100 if (!subject.isValid() || !finite(direction) || !std::isfinite(speedFraction) || speedFraction < 0.0 ||
107 Diagnostic::error(DiagnosticCode::NotFound, "locomotion subject was not found", subject.format()));
114Result<void> CombatLocomotionRuntime::navigateTo(SubjectRef subject, CombatNavigationGoal goal) {
116 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "subject is nil", "subject"));
119 Diagnostic::error(DiagnosticCode::Unsupported, "combat navigation provider is unavailable", "navigation"));
125 Diagnostic::error(DiagnosticCode::NotFound, "locomotion subject was not found", subject.format()));
134 Diagnostic::error(DiagnosticCode::NotFound, "locomotion subject was not found", subject.format()));
144 DiagnosticCode::InvalidArgument, "locomotion step is negative or moves tick backwards", "step"));
171 const CombatVector2 desired{state.moveDirection.x * state.maximumSpeed * state.moveSpeedFraction,
176 const double scale = deltaLength > maximumDelta && deltaLength > 0.0 ? maximumDelta / deltaLength : 1.0;
186 if (length(after) <= activeGoal->acceptanceRadius || before.x * after.x + before.z * after.z <= 0.0) {
197 result.events.push_back({state.subject, CombatLocomotionEventKind::Moved, previous, state.position,
200 result.events.push_back({state.subject, CombatLocomotionEventKind::Arrived, previous, state.position,
205 return Result<CombatLocomotionAdvance>::success(std::move(result), Status::success(StatusCode::Applied));
Deterministic player/navigation locomotion adapter for combat subjects.
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
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
bool isValid() const noexcept
Return whether this reference is valid and non-nil.
Definition SubjectRef.h:38
Result< void > registerSubject(CombatLocomotionDefinition definition)
Register one unique subject from validated owning definition data.
Definition CombatLocomotion.cpp:65
Result< CombatLocomotionAdvance > advance(const SimulationStep &step)
Atomically advance every subject using only the supplied deterministic step.
Definition CombatLocomotion.cpp:141
Result< void > unregisterSubject(SubjectRef subject)
Remove one subject; missing subjects are rejected.
Definition CombatLocomotion.cpp:78
Result< CombatLocomotionState > state(SubjectRef subject) const
Return an owning state snapshot, or NotFound for a stale subject.
Definition CombatLocomotion.cpp:87
Result< void > stop(SubjectRef subject)
Clear a navigation goal and desired movement for one subject.
Definition CombatLocomotion.cpp:130
Result< void > setMoveIntent(SubjectRef subject, CombatVector2 direction, double speedFraction)
Set normalized player/AI movement and clear any navigation goal.
Definition CombatLocomotion.cpp:98
std::vector< CombatLocomotionState > states() const
Return owning states in stable subject-id order.
Definition CombatLocomotion.cpp:208
Result< void > navigateTo(SubjectRef subject, CombatNavigationGoal goal)
Install a navigation goal after provider and value validation.
Definition CombatLocomotion.cpp:114
Definition ActionDamageSink.cpp:9
@ InvalidArgument
@ NotFound
@ AlreadyExists
@ Unsupported
@ Applied
Complete owning result of one committed locomotion frame.
Definition CombatLocomotion.h:113
std::vector< CombatLocomotionEvent > events
Definition CombatLocomotion.h:115
Immutable registration data for one locomotion subject.
Definition CombatLocomotion.h:25
double acceleration
Definition CombatLocomotion.h:30
CombatVector2 initialPosition
Definition CombatLocomotion.h:28
Result< void > validate() const
Validate identity and finite positive movement limits.
Definition CombatLocomotion.cpp:38
double maximumSpeed
Definition CombatLocomotion.h:29
Owning read-only projection of one registered combat subject.
Definition CombatLocomotion.h:43
Finite position or direction in the horizontal combat plane.
Definition CombatLocomotion.h:19