载入中...
搜索中...
未找到
ProjectileRuntime.cpp
浏览该文件的文档.
43 const double dot = std::clamp(current.x * desired.x + current.y * desired.y + current.z * desired.z, -1.0, 1.0);
45 if (angle <= maxRadians || angle <= 1e-12) return {desired.x * speed, desired.y * speed, desired.z * speed};
47 ProjectileVector blended{current.x + (desired.x - current.x) * alpha, current.y + (desired.y - current.y) * alpha,
56 if (!id.isValid()) return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile id must not be empty", "id"));
58 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile speed must be finite and positive", "speed"));
60 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile gravity must be finite and non-negative", "gravity"));
62 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile turn rate must be finite and non-negative", "maxTurnRateDegrees"));
64 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile lifetime must be positive", "lifetime"));
66 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Homing projectile turn rate must be positive", "maxTurnRateDegrees"));
74 return Result<void>::failure(Diagnostic::error(DiagnosticCode::Conflict, "Projectile pool cannot be resized while active", {}));
76 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile pool capacity must be in 1..1048576", "capacity"));
86 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile transform must contain finite values", "request"));
88 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile direction must be non-zero", "direction"));
90 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Homing projectile requires a target", "target"));
98 auto free = std::find_if(slots_.begin(), slots_.end(), [](const Slot& slot) { return !slot.state.has_value(); });
121Result<ProjectileUpdate> ProjectileRuntime::update(Duration delta, const IProjectileTargetProvider* targets) {
124 Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile delta must be non-negative", "delta"));
125 if (delta.isZero()) return Result<ProjectileUpdate>::success({}, Status::success(StatusCode::NoOp));
167 return Result<void>::failure(Diagnostic::error(DiagnosticCode::StaleHandle, "Projectile handle is stale", {}));
197 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile snapshot pool capacity is outside 1..1048576", {}));
212 !state.definitionId.isValid() || !finitePoint(state.position) || !finiteVector(state.velocity) ||
215 state.age.nanoseconds() < 0 || state.lifetime.nanoseconds() <= 0 || state.age >= state.lifetime ||
217 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "Projectile snapshot contains an invalid live slot", {}));
Stable, structured diagnostics shared by engine modules.
Deterministic pooled projectile simulation.
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
double seconds() const noexcept
Return this duration as seconds for legacy/presentation APIs.
Definition Time.cpp:28
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
Optional target-position boundary used only by homing projectiles.
Definition ProjectileRuntime.h:102
virtual Result< ProjectilePoint > position(ecs::EntityHandle target) const =0
Resolve one generation-checked target to an owning simulation-space position.
Result< void > release(ProjectileHandle handle)
Explicitly release one live handle; stale handles are rejected.
Definition ProjectileRuntime.cpp:164
ProjectileRuntimeSnapshot snapshot() const
Capture live trajectories plus empty-slot generations.
Definition ProjectileRuntime.cpp:188
Result< void > configurePool(std::uint32_t capacity)
Resize the pool while empty; capacity must be in 1..1048576.
Definition ProjectileRuntime.cpp:72
std::vector< ProjectileState > states() const
Return owning live states in stable slot order.
Definition ProjectileRuntime.cpp:180
std::optional< ProjectileState > find(ProjectileHandle handle) const
Return an owning state copy, or empty for a stale/released handle.
Definition ProjectileRuntime.cpp:173
Result< ProjectileUpdate > update(Duration delta, const IProjectileTargetProvider *targets=nullptr)
Atomically advance all live projectiles by supplied deterministic time.
Definition ProjectileRuntime.cpp:121
Result< ProjectileHandle > spawn(const ProjectileDefinition &definition, const ProjectileSpawnRequest &request)
Spawn one projectile or return a structured capacity/validation failure.
Definition ProjectileRuntime.cpp:94
载具模块入口(eve.Vehicle):定义注册 / 实体工厂 / RTS 命令 / 帧调度。 设计文档:docs/dev/通用载具系统设计.md
Definition RTSArchetype.h:10
@ Ballistic
@ InvalidArgument
@ Unsupported
@ StaleHandle
@ Conflict
@ NoOp
Data-driven trajectory and lifetime definition.
Definition ProjectileRuntime.h:51
Result< void > validate() const
Validate finite, non-negative trajectory parameters and mode-specific requirements.
Definition ProjectileRuntime.cpp:55
double maxTurnRateDegrees
Definition ProjectileRuntime.h:56
Generation-qualified reference to one pooled projectile slot.
Definition ProjectileRuntime.h:42
Owning point in projectile simulation space.
Definition ProjectileRuntime.h:22
Complete deterministic projectile-pool state for rollback and save games.
Definition ProjectileRuntime.h:97
std::vector< ProjectileSlotSnapshot > slots
Definition ProjectileRuntime.h:98
Owning spawn request; homing requests require a generation-checked target.
Definition ProjectileRuntime.h:64
Owning observable state for one live projectile.
Definition ProjectileRuntime.h:71
Owning result of one atomic projectile simulation step.
Definition ProjectileRuntime.h:85
Owning velocity or direction vector in projectile simulation space.
Definition ProjectileRuntime.h:32