载入中...
搜索中...
未找到
TerrainLoadGravity.cpp
浏览该文件的文档.
2
3#include "physics/Body3D.h"
4
5#include <cmath>
6
7namespace eve::physics {
8namespace {}
9
11 bool terrainFound) {
12 if (!state || !body || !body->isValid())
14 DiagnosticCode::InvalidArgument, "physics.terrainLoadGravity.begin: live state and body required"));
15 if (state->monitoring_ || state->completed_)
17 "physics.terrainLoadGravity.begin: state already initialized"));
18 state->gravityScale_ = body->getGravityScale();
19 if (!terrainFound) {
20 state->completed_ = true;
21 return Result<void>::success();
22 }
23 body->setGravityScale(0.f);
24 state->monitoring_ = true;
25 return Result<void>::success();
26}
27
29 bool terrainLoaded, float deltaSeconds,
30 float activationDelay) {
31 if (!state || !body || !body->isValid() || !std::isfinite(deltaSeconds) ||
32 deltaSeconds < 0.f || !std::isfinite(activationDelay) || activationDelay < 0.f)
35 "physics.terrainLoadGravity.advance: live objects and non-negative finite time required"));
36 if (!state->monitoring_) return Result<bool>::success(false);
37 if (!state->activationScheduled_) {
38 if (!terrainLoaded) {
39 body->setGravityScale(0.f);
40 return Result<bool>::success(false);
41 }
42 state->activationScheduled_ = true;
43 }
44 state->delayElapsed_ += deltaSeconds;
45 if (state->delayElapsed_ + 1e-6f < activationDelay)
46 return Result<bool>::success(false);
47 body->setGravityScale(state->gravityScale_);
48 state->monitoring_ = false;
49 state->completed_ = true;
50 return Result<bool>::success(true);
51}
52
53} // namespace eve::physics
std::string body
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
3D rigid body (Box3D) in meter-space coordinates (+Y up by convention). Owned by a World3D; create pr...
Definition Body3D.h:24
Caller-owned state for Pcg-style rigid-body activation after terrain loading.
Optional physics backend for vehicle mobility and body attach.
Definition Climbing.h:36
Result< void > beginTerrainLoadGravity(TerrainLoadGravityState *state, Body3D *body, bool terrainFound)
Begin monitoring a body when a containing terrain scene exists.
Result< bool > advanceTerrainLoadGravity(TerrainLoadGravityState *state, Body3D *body, bool terrainLoaded, float deltaSeconds, float activationDelay)
Advance terrain-load waiting and restore gravity after the configured delay.