载入中...
搜索中...
未找到
Climbing.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
13#include "common/Module.h"
14#include "common/Result.h"
16#include "common/StrongUint64.h"
17#include "common/Time.h"
18#include "common/Value.h"
20
21#include <cstddef>
22#include <cstdint>
23#include <array>
24#include <memory>
25#include <optional>
26#include <span>
27#include <string>
28#include <string_view>
29#include <unordered_set>
30#include <vector>
31
32namespace eve::animation {
33class AnimClip;
34}
35
36namespace eve::physics {
37class World3D;
38}
39
40namespace eve::climbing {
41
42class ClimbingSelectionSystem;
43class ClimbingServiceSelectionSystem;
44
46enum class ClimbingActionKind : std::uint8_t {
47 Vault,
48 Mantle,
50 ClimbUp,
51 Shimmy,
59 WallRun,
60 Slide,
64};
65
67enum class ClimbingMovementMode : std::uint8_t { Grounded, Airborne, Climbing };
68
70enum class ClimbingSourceMode : std::uint8_t {
71 None = 0,
72 Grounded = 1u << 0u,
73 Airborne = 1u << 1u,
74 Climbing = 1u << 2u,
75 Any = 0x07
76};
77
79enum class ClimbingCommandRequirement : std::uint8_t { Any, Jump, Climb, Drop, Sprint, Crouch };
80
83
86
89
92
95
97enum class ClimbingInputMode : std::uint8_t { Flow, Precision };
98
101 std::string clipId;
102 std::string graphNodeId;
103 std::string rootBone = "Root";
104 bool mirrored = false;
105};
106
109 float start = 0.f;
110 float end = 1.f;
111 std::string comboTag;
112};
113
116
124
127 std::int32_t direction = 1000;
128 std::int32_t approachSpeed = 1000;
129 std::int32_t height = 1000;
130 std::int32_t distance = 1000;
131 std::int32_t warpTranslation = 1000;
132 std::int32_t warpRotation = 1000;
133 std::int32_t intentMismatch = 1000;
134};
135
137enum class HangSupport : std::uint8_t { None, Braced, Free };
138
149
152 float start = 0.f;
153 float end = 1.f;
154 bool horizontal = true;
155 bool vertical = true;
156 bool facing = true;
157};
158
162 static constexpr std::string_view SchemaId = "evengine.climbing-action";
164 static constexpr std::int64_t SchemaVersion = 4;
165
166 std::string id;
167 float minHeight = 0.f;
168 float maxHeight = 1.f;
169 float minSpeed = 0.f;
171 float landingForward = 0.35f;
172 float apexHeight = 0.15f;
175 float hangBodyOffset = 0.35f;
176 float hangFeetBelowLedge = 1.55f;
177 float handSpacing = 0.42f;
178 float cancelWindowStart = 0.f;
179 float cancelWindowEnd = 1.f;
180 float rootMotionScaleMin = 0.75f;
181 float rootMotionScaleMax = 1.35f;
185 float verticalWarpBudget = 0.6f;
187 std::vector<ClimbingWarpWindow> warpWindows;
188 std::vector<std::string> requiredNotifies;
189 std::vector<std::string> tags;
193 float minDepth = 0.f;
194 float maxDepth = 1000.f;
195 float minDistance = 0.f;
196 float maxDistance = 1000.f;
197 float minSurfaceNormalY = -1.f;
198 float maxSlopeRadians = 3.1415927f;
199 float maxCurvature = 1000.f;
200 std::vector<std::string> requiredSupportTags;
203 std::vector<ClimbingBranchWindow> branchWindows;
204 std::vector<ClimbingContactConstraint> contactConstraints;
207 std::vector<std::string> comboTags;
208 std::int32_t repetitionPenalty = 0;
209 std::vector<std::string> requiredConditionTags;
210 float staminaCost = 0.f;
211 std::string cameraCue;
212 std::vector<std::string> eventMetadata;
215};
216
220 static constexpr std::string_view SchemaId = "evengine.climbing-profile";
222 static constexpr std::int64_t SchemaVersion = 4;
223
224 float capsuleRadius = 0.3f;
225 float capsuleHeight = 1.8f;
227 float skin = 0.03f;
228 float maxProbeDistance = 1.2f;
229 float maxObstacleHeight = 1.8f;
230 float minTopNormalY = 0.65f;
231 float maxWarpResidual = 0.2f;
232 float maxPlatformSpeed = 8.f;
233 float dropInitialSpeed = 1.5f;
234 std::uint64_t inputBufferTicks = 8;
235 std::uint64_t coyoteTicks = 6;
236 std::uint32_t pathValidationSegments = 12;
237 float maxPelvisDeviation = 0.35f;
238 float groundAcceleration = 28.f;
239 float groundBraking = 32.f;
240 float airControl = 0.45f;
241 float gravity = 24.f;
242 float jumpSpeed = 7.f;
243 std::uint32_t probeSectors = 8;
244 std::uint32_t maxCandidates = 8;
245 float autoAssistStrength = 0.65f;
247 float maxTotalWarpBudget = 1.2f;
248 std::vector<std::string> defaultActionIds;
249 std::vector<std::string> allowedActionTags;
250 std::vector<std::string> deniedActionTags;
252 std::string staminaAdapter;
253 std::string cameraCueProfile;
255 std::vector<ClimbingActionDefinition> actions;
258};
259
262 float groundAcceleration = 28.f;
263 float groundBraking = 32.f;
264 float airControl = 0.45f;
265 float gravity = 24.f;
266 float jumpSpeed = 7.f;
267 std::uint64_t coyoteTicks = 6;
269};
270
273
288
322
330public:
331 static constexpr std::size_t Capacity = 8;
332
334 void clear() noexcept { size_ = 0; }
336 void consider(ClimbingCandidate candidate);
341 void considerWithActionId(ClimbingCandidate candidate, std::string_view actionId);
343 void sortAndLimit(std::size_t limit);
345 void swap(ClimbingCandidateSet& other) noexcept;
347 [[nodiscard]] bool empty() const noexcept { return size_ == 0; }
349 [[nodiscard]] std::size_t size() const noexcept { return size_; }
351 [[nodiscard]] const ClimbingCandidate& front() const noexcept { return values_[0]; }
353 [[nodiscard]] ClimbingCandidate takeFront() noexcept { return std::move(values_[0]); }
354 [[nodiscard]] const ClimbingCandidate& operator[](std::size_t index) const noexcept { return values_[index]; }
360 [[nodiscard]] const ClimbingCandidate* begin() const noexcept { return values_.data(); }
366 [[nodiscard]] const ClimbingCandidate* end() const noexcept { return values_.data() + size_; }
367 [[nodiscard]] std::span<const ClimbingCandidate> values() const noexcept { return {values_.data(), size_}; }
368
369private:
370 std::array<ClimbingCandidate, Capacity> values_{};
371 std::size_t size_ = 0;
372};
373
374namespace detail {
376struct ClimbingPredictionSequenceTag {};
377}
378
381
390 std::string actionId;
392 std::uint64_t definitionGeneration = 0;
393 std::uint32_t sortedRank = 0;
394 std::uint64_t fingerprint = 0;
396 friend bool operator==(const ClimbingCandidateKey&, const ClimbingCandidateKey&) noexcept = default;
397};
398
401 std::uint32_t sortedRank) noexcept;
402
416
419
421enum class ClimbingPredictionReason : std::uint8_t {
422 None,
428};
429
449
455 const eve::Value& value);
458 const ClimbingPredictionDecision& decision);
461 const eve::Value& value);
462
468
470enum class ClimbingPhase : std::uint8_t {
471 Idle,
472 Requested,
473 Aligning,
474 Launching,
475 Climbing,
476 Landing,
478 Hanging,
479 Dropping,
480 Completed,
481 Cancelled,
482 Failed,
483 Balanced,
485};
486
488enum class ClimbingEventKind : std::uint8_t {
489 Started,
494 Landed,
495 Hanging,
496 Dropped,
497 Completed,
498 Cancelled,
499 Failed
500};
501
503enum class ClimbingNotifyKind : std::uint8_t {
509 Land
510};
511
521
526
551
598
600enum class ClimbingDebugCapture : std::uint8_t { Disabled, Enabled };
601
604 std::string actionId;
605 std::string code;
608 float radius = 0.f;
609 float height = 0.f;
610};
611
614 std::string actionId;
615 std::string code;
616 std::int64_t biasCost = 0;
617 std::int64_t heightCost = 0;
618 std::int64_t distanceCost = 0;
619 std::int64_t totalCost = 0;
620};
621
631
635 std::vector<ClimbingCandidate> candidates;
637 std::uint32_t broadPhaseQueryCount = 0;
638 std::uint32_t broadPhaseHitCount = 0;
639 std::uint32_t queryCount = 0;
640 std::string terminalCode;
642 std::vector<ClimbingDebugQuery> queries;
643 std::vector<ClimbingCandidateEvidence> evidence;
644 std::vector<ClimbingMotionEvidence> motion;
645};
646
654public:
656 static constexpr std::string_view SnapshotSchemaId = "evengine.climbing-runtime";
658 static constexpr std::int64_t SnapshotSchemaVersion = 4;
660 static constexpr std::size_t PendingEventCapacity = 64;
661
663 ClimbingRuntime() = default;
667 ClimbingRuntime(ClimbingRuntime&&) noexcept = default;
669 ClimbingRuntime& operator=(ClimbingRuntime&&) noexcept = default;
671 ~ClimbingRuntime() noexcept;
672
674 [[nodiscard]] eve::Result<void> setProfile(ClimbingProfile profile);
679 [[nodiscard]] eve::Result<void> reloadProfile(ClimbingProfile profile);
681 [[nodiscard]] eve::Result<void> setProfileJson(std::string_view json);
683 [[nodiscard]] eve::Result<void> reloadProfileJson(std::string_view json);
685 [[nodiscard]] eve::Result<void> upsertAction(ClimbingActionDefinition action);
691 [[nodiscard]] eve::Result<void> validateAnimationBinding(std::string_view actionId,
692 const animation::AnimClip& clip);
700 [[nodiscard]] eve::Result<ClimbingCandidateSet> probe(physics::World3D& world,
701 const ClimbingPose& pose) const;
706 [[nodiscard]] eve::Result<void> probeInto(physics::World3D& world, const ClimbingPose& pose,
708 eve::SimulationTick tick = eve::SimulationTick::zero()) const;
710 [[nodiscard]] eve::Result<ClimbingCandidate> tryBegin(physics::World3D& world, const ClimbingPose& pose,
719 [[nodiscard]] eve::Result<ClimbingPredictionDecision> tryBeginPredicted(
720 physics::World3D& world, const ClimbingPose& pose, const ClimbingPredictionRequest& request,
721 eve::SimulationTick serverTick, std::uint64_t maxClientTickLead);
729 [[nodiscard]] eve::Result<ClimbingCandidate> tryBeginAnchor(
731 ClimbingAnchorAgentId agentId, std::string_view actionId, const ClimbingPose& pose,
741 [[nodiscard]] eve::Result<void> transitionAnchor(physics::World3D& world,
743 ClimbingAnchorEdgeKind edgeKind,
744 std::string_view actionId,
751 [[nodiscard]] eve::Result<ClimbingAdvance> advance(physics::World3D& world, eve::SimulationStep step);
753 [[nodiscard]] eve::Result<ClimbingAdvance> advance(physics::World3D& world, eve::SimulationStep step,
754 const ClimbingMotionInput& motion);
756 [[nodiscard]] eve::Result<void> drop(eve::SimulationTick tick);
758 [[nodiscard]] eve::Result<void> climbUp(eve::SimulationTick tick);
764 [[nodiscard]] eve::Result<void> cancel(ClimbingCancelReason reason, eve::SimulationTick tick);
771 [[nodiscard]] eve::Result<std::vector<ClimbingEvent>> drainEvents();
773 [[nodiscard]] std::size_t pendingEventCount() const noexcept { return pendingEvents_.size(); }
775 [[nodiscard]] ClimbingDebugSnapshot inspect() const;
777 [[nodiscard]] ClimbingRuntimeCounters counters() const noexcept { return lastCounters_; }
779 [[nodiscard]] const ClimbingTelemetryBuffer& telemetry() const noexcept { return telemetry_; }
781 [[nodiscard]] ClimbingLocomotionPolicy locomotionPolicy() const noexcept;
783 void clearTelemetry() noexcept { telemetry_.clear(); }
785 void recordOrdinaryTick(eve::SimulationTick tick, std::uint32_t queryCount = 0,
786 std::uint32_t moverIterations = 0,
787 std::uint64_t elapsedNanoseconds = 0) noexcept;
789 void setDebugCapture(ClimbingDebugCapture capture) noexcept;
791 [[nodiscard]] eve::Result<eve::Value> snapshot() const;
793 [[nodiscard]] eve::Result<std::string> snapshotJson() const;
799 [[nodiscard]] eve::Result<void> restore(const eve::Value& value, physics::World3D& world);
801 [[nodiscard]] eve::Result<void> restoreJson(std::string_view json, physics::World3D& world);
803 [[nodiscard]] ClimbingPhase phase() const noexcept { return phase_; }
805 [[nodiscard]] ClimbingExecutionId executionId() const noexcept {
806 return execution_ ? execution_->executionId : ClimbingExecutionId::zero();
807 }
809 [[nodiscard]] std::uint64_t definitionGeneration() const noexcept { return definitionGeneration_; }
811 [[nodiscard]] eve::Result<ClimbingAnchorNodeRef> currentAnchor() const;
812
813private:
816
817 struct PreparedBegin {
818 ClimbingExecutionId executionId = ClimbingExecutionId::zero();
819 ClimbingCandidate candidate;
821 Vec3 startFeet;
823 bool conditionsSatisfied = false;
824 };
825
826 struct Execution {
827 ClimbingExecutionId executionId = ClimbingExecutionId::zero();
828 std::uint64_t definitionGeneration = 1;
829 ClimbingCandidate candidate;
832 Vec3 startFeet;
833 Vec3 currentFeet;
834 Vec3 lastPlannedFeet;
838 Vec3 velocity;
839 Vec3 accumulatedResidual;
840 float horizontalWarpUsed = 0.f;
841 float verticalWarpUsed = 0.f;
842 float facingWarpUsed = 0.f;
843 bool leftContactEmitted = false;
844 bool rightContactEmitted = false;
845 bool landContactReleased = false;
846 bool compactCollisionActive = false;
847 bool branchWindowOpen = false;
849 ClimbingAnchorNodeRef anchorNode;
850 ClimbingAnchorReservation anchorReservation;
851 };
852
853 [[nodiscard]] eve::Result<PreparedBegin> prepareBegin(physics::World3D& world, const ClimbingPose& pose,
855 [[nodiscard]] eve::Result<PreparedBegin> prepareBeginCandidate(physics::World3D& world,
856 const ClimbingPose& pose,
858 ClimbingCandidate candidate);
859 [[nodiscard]] eve::Result<ClimbingStart> commitBegin(PreparedBegin prepared);
860 [[nodiscard]] eve::Result<void> publishProfile(ClimbingProfile profile, bool allowActiveExecution);
861 [[nodiscard]] eve::Result<void> requireEventCapacity(std::size_t count, eve::SimulationTick tick) const;
862 [[nodiscard]] eve::Result<void> releaseAnchorReservation();
863 void enqueueEvent(ClimbingEvent event);
864
865 ClimbingProfile profile_;
866 ClimbingPhase phase_ = ClimbingPhase::Idle;
867 std::optional<Execution> execution_;
868 mutable std::vector<ClimbingCandidate> lastCandidates_;
869 mutable ClimbingCandidateSet probeScratch_;
870 mutable std::uint32_t lastQueryCount_ = 0;
871 mutable ClimbingRuntimeCounters lastCounters_;
872 mutable ClimbingTelemetryBuffer telemetry_;
873 ClimbingDebugCapture debugCapture_ = ClimbingDebugCapture::Enabled;
874 mutable std::vector<ClimbingDebugQuery> lastDebugQueries_;
875 mutable std::vector<ClimbingCandidateEvidence> lastEvidence_;
876 std::vector<ClimbingMotionEvidence> motionEvidence_;
877 std::string terminalCode_;
878 std::unordered_set<std::string> validatedAnimationActions_;
879 std::string previousActionId_;
880 std::uint64_t nextExecutionId_ = 1;
881 std::uint64_t definitionGeneration_ = 1;
882 std::vector<ClimbingEvent> pendingEvents_;
883};
884
889
892public:
895 [[nodiscard]] static eve::Result<ClimbingRuntimeHandleRef> newRuntime();
901 [[nodiscard]] static bool isStale(ClimbingRuntimeHandleRef reference) noexcept;
903 [[nodiscard]] static eve::Result<ClimbingAnchorGraphHandleRef> newAnchorGraph(
906 [[nodiscard]] static eve::script::Borrowed<ClimbingAnchorGraphInstance> resolveAnchorGraph(
909 [[nodiscard]] static eve::Result<void> releaseAnchorGraph(ClimbingAnchorGraphHandleRef reference);
911 [[nodiscard]] static bool isAnchorGraphStale(ClimbingAnchorGraphHandleRef reference) noexcept;
912
913private:
916};
917
918} // namespace eve::climbing
LogicalId target
double value
float duration
std::string output
eve::action::ActionExecutionId executionId
eve::EntitySpatialPose pose
AuthorityStoreHandleRef reference
Definition Authority.cpp:24
float phase
Definition CaveMesh.cpp:58
Deterministic authoring primitives, baker, and renderer-neutral editor overlay for climbing anchors.
Versioned body-local climbing topology, dynamic resolution, and deterministic occupancy.
Shared value types with no climbing runtime dependency.
Fixed-capacity, allocation-free performance telemetry for climbing workloads.
#define EVENGINE_API_DOMAINS
Definition Export.h:110
const GltfImportRequest & request
glm::vec4 clip
float u
Definition Grass.cpp:233
Owning, generation-qualified results for cross-module 3D physics queries.
std::map< std::string, std::vector< std::string > > graph
Definition Package.cpp:59
World3D * world
std::string action
Definition PlayHost.cpp:117
std::function< eve::Result< void >()> release
Definition Procgen.cpp:86
int detail
Move-only, checked operation results for the common layer.
const RoadNode * node
std::uint32_t count
Explicit Value/Owned/Borrowed semantics at the Squirrel boundary.
Internal storage primitive for domain-owned unsigned values.
SimulationTick tick
Common time values and an injectable deterministic simulation clock.
int limit
Definition TreeMesh.cpp:164
float step
Definition TreeMesh.cpp:314
std::string body
uint32_t index
Owning, renderer-independent dynamic values.
Signed, fixed-resolution simulation duration in nanoseconds.
Definition Time.h:43
static constexpr Duration fromNanoseconds(std::int64_t nanoseconds) noexcept
Construct an exact duration from nanoseconds.
Definition Time.h:55
static constexpr Duration zero() noexcept
Return zero duration.
Definition Time.h:60
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static constexpr RuntimeHandle invalid() noexcept
Returns the canonical invalid handle.
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
std::map< std::string, Value > Object
Definition Value.h:34
Fixed-capacity owning candidate set used by the production probe hot path.
Definition Climbing.h:329
void considerWithActionId(ClimbingCandidate candidate, std::string_view actionId)
Consider a candidate while reusing slot-owned action-id storage on the production probe path.
Definition Climbing.cpp:29
void consider(ClimbingCandidate candidate)
Consider one candidate and retain it only when it belongs to the best fixed-capacity set.
Definition Climbing.cpp:23
const ClimbingCandidate * end() const noexcept
Returns the sentinel following the last candidate for synchronous read-only iteration.
Definition Climbing.h:366
void swap(ClimbingCandidateSet &other) noexcept
Exchange complete owning slot storage without allocating.
Definition Climbing.cpp:60
ClimbingCandidate takeFront() noexcept
Move the best candidate out of a non-empty set.
Definition Climbing.h:353
const ClimbingCandidate & operator[](std::size_t index) const noexcept
Definition Climbing.h:354
void sortAndLimit(std::size_t limit)
Sort by canonical deterministic selection key and clamp to a validated limit.
Definition Climbing.cpp:55
const ClimbingCandidate * begin() const noexcept
Returns the first candidate for synchronous read-only iteration.
Definition Climbing.h:360
const ClimbingCandidate & front() const noexcept
Front.
Definition Climbing.h:351
bool empty() const noexcept
Empty.
Definition Climbing.h:347
std::span< const ClimbingCandidate > values() const noexcept
Definition Climbing.h:367
std::size_t size() const noexcept
Returns the size of .
Definition Climbing.h:349
static constexpr std::size_t Capacity
Definition Climbing.h:331
void clear() noexcept
Remove all candidates while retaining each slot's owned string capacity.
Definition Climbing.h:334
Owner-thread climbing planner and executor for one character.
Definition Climbing.h:653
ClimbingRuntime & operator=(const ClimbingRuntime &)=delete
ClimbingRuntimeCounters counters() const noexcept
Return allocation-free counters for the latest probe or active execution workload.
Definition Climbing.h:777
const ClimbingTelemetryBuffer & telemetry() const noexcept
Return the runtime-owned fixed profiler ring.
Definition Climbing.h:779
ClimbingRuntime(const ClimbingRuntime &)=delete
ClimbingRuntime()=default
Climbing runtime.
std::uint64_t definitionGeneration() const noexcept
Current monotonically increasing profile/action definition generation.
Definition Climbing.h:809
ClimbingRuntime(ClimbingRuntime &&) noexcept=default
Climbing runtime.
ClimbingExecutionId executionId() const noexcept
Current execution identity, or zero when no execution is active or retained.
Definition Climbing.h:805
PrePhysics selection transaction joining buffered input to one authoritative execution.
Selection transaction that atomically joins external stamina reservation to runtime publication.
Runtime-owned fixed ring of performance samples.
Script-facing factory and owner for independent climbing runtimes.
Definition Climbing.h:891
static constexpr StrongUint64 zero() noexcept
Returns the zero value for this strong type.
Box3D rigid-body world. Script coordinates are meters (Box3D native), unlike 2D World which uses pixe...
Definition World3D.h:63
Non-owning C++ observation with no implicit lifetime extension.
Slot/generation registry whose objects are exclusively unique-owned.
ClimbingObstacleCollision
Per-call capsule collision policy; never changes persistent world collision state.
Definition Climbing.h:525
ClimbingAnchorEdgeKind
Allowed authored transition between two explicit anchors.
ClimbingTrajectoryKind
Semantic trajectory topology, independent of a particular animation clip.
Definition Climbing.h:85
EVENGINE_API_DOMAINS eve::Result< eve::Value > encodeClimbingPredictionRequest(const ClimbingPredictionRequest &request)
Encodes a validated prediction request to its canonical owning Value representation.
ClimbingContactTarget
Contact target used by animation/IK adapters.
Definition Climbing.h:115
ClimbingLandingPolicy
Policy applied when authored motion reaches its landing phase.
Definition Climbing.h:88
ClimbingPhase
Execution lifecycle visible to gameplay and animation adapters.
Definition Climbing.h:470
ClimbingMovementMode
Movement mode used by action source-mode hard validation.
Definition Climbing.h:67
EVENGINE_API_DOMAINS eve::Result< eve::Value > encodeClimbingPredictionDecision(const ClimbingPredictionDecision &decision)
Encodes a validated authoritative decision to its canonical owning Value representation.
ClimbingPredictionReason
Stable reason for a non-accepted prediction decision.
Definition Climbing.h:421
ClimbingPredictionDisposition
Named server-authoritative outcome of one prediction request.
Definition Climbing.h:418
ClimbingCancelReason
Stable, strongly typed terminal cancellation reason.
Definition Climbing.h:140
ClimbingCommandRequirement
Input edge required by an action definition; Any keeps legacy automatic selection.
Definition Climbing.h:79
EVENGINE_API_DOMAINS eve::Result< ClimbingPredictionDecision > decodeClimbingPredictionDecision(const eve::Value &value)
Decodes a complete authoritative decision transactionally.
ClimbingDebugCapture
Runtime policy controlling optional owning diagnostic capture.
Definition Climbing.h:600
ClimbingInputMode
Input interpretation used by candidate assist and deterministic selection policies.
Definition Climbing.h:97
ClimbingNotifyKind
Stable animation notify semantics accepted from a validated climbing clip.
Definition Climbing.h:503
ClimbingRootMotionPolicy
Whether animation deltas still require the runtime's procedural target warp.
Definition Climbing.h:523
HangSupport
Evidence describing whether a hanging pose has foot support.
Definition Climbing.h:137
ClimbingStaminaPolicy
Optional stamina integration policy; climbing never owns stamina state.
Definition Climbing.h:94
ClimbingEventKind
Stable semantic event emitted by the authoritative climbing lifecycle.
Definition Climbing.h:488
ClimbingTerminalVelocityPolicy
Policy applied to vertical velocity when an action terminates.
Definition Climbing.h:91
ClimbingActionKind
Data-driven action family; stable action identity remains the definition id.
Definition Climbing.h:46
ClimbingSourceMode
Bit mask of movement modes from which an action may start.
Definition Climbing.h:70
EVENGINE_API_DOMAINS eve::Result< ClimbingPredictionRequest > decodeClimbingPredictionRequest(const eve::Value &value)
Decodes a complete request and rejects unknown schema versions transactionally.
EVENGINE_API_DOMAINS ClimbingCandidateKey makeClimbingCandidateKey(const ClimbingCandidate &candidate, std::uint32_t sortedRank) noexcept
Creates the opaque key for one candidate at its deterministic sorted rank.
ClimbingProbeRecipe
Semantic query family used to produce action candidates.
Definition Climbing.h:82
Optional physics backend for vehicle mobility and body attach.
Definition Climbing.h:36
Build metadata (engine git commit, build time, third-party version).
Definition Build.cpp:16
One deterministic fixed-step emitted by SimulationClock.
Definition Time.h:158
Definition of one geometry-compatible climbing action.
Definition Climbing.h:160
ClimbingCommandRequirement requiredCommand
Definition Climbing.h:191
ClimbingTrajectoryKind trajectory
Definition Climbing.h:201
std::vector< ClimbingContactConstraint > contactConstraints
Definition Climbing.h:204
std::vector< ClimbingBranchWindow > branchWindows
Definition Climbing.h:203
ClimbingAnimationBinding animation
Definition Climbing.h:202
std::vector< std::string > requiredSupportTags
Definition Climbing.h:200
eve::Value::Object extensionMetadata
Unknown schema fields retained across decode and encode.
Definition Climbing.h:214
ClimbingTerminalVelocityPolicy terminalVelocityPolicy
Definition Climbing.h:206
std::vector< std::string > tags
Definition Climbing.h:189
std::vector< std::string > requiredConditionTags
Definition Climbing.h:209
std::vector< std::string > comboTags
Definition Climbing.h:207
std::vector< std::string > requiredNotifies
Definition Climbing.h:188
std::vector< std::string > eventMetadata
Definition Climbing.h:212
std::vector< ClimbingWarpWindow > warpWindows
Definition Climbing.h:187
static constexpr std::string_view SchemaId
Schema id emitted by the canonical action codec.
Definition Climbing.h:162
ClimbingLandingPolicy landingPolicy
Definition Climbing.h:205
Owning output of one execution tick.
Definition Climbing.h:553
ClimbingExecutionId executionId
Definition Climbing.h:574
float rightFootWeight
Right-foot constraint weight resolved from the immutable action contact windows.
Definition Climbing.h:590
float leftFootWeight
Left-foot constraint weight resolved from the immutable action contact windows.
Definition Climbing.h:588
std::string animationGraphNodeId
Stable external animation-graph node id; the game adapter resolves it to its graph handle.
Definition Climbing.h:584
std::string cameraCue
Action-local camera cue resolved from the immutable execution definition.
Definition Climbing.h:580
std::string cameraCueProfile
Owning presentation hint; consumers may ignore it without affecting simulation.
Definition Climbing.h:578
bool animationMirrored
Whether the selected action requests the mirrored presentation variant.
Definition Climbing.h:586
bool hasTerminalVelocity
Whether terminalVelocity must replace velocity derived from this tick's displacement.
Definition Climbing.h:596
std::string branchComboTag
Active authored combo tag; empty for notify-only or terminal branch availability.
Definition Climbing.h:573
std::string animationClipId
Stable animation clip id resolved from the immutable action definition.
Definition Climbing.h:582
Vec3 terminalVelocity
Authoritative velocity policy output for the receiving locomotion owner.
Definition Climbing.h:594
float pelvisWeight
Pelvis constraint weight resolved from the immutable action contact windows.
Definition Climbing.h:592
Versioned graph asset; topology is authoritative while collision remains owned by Physics.
Generation-qualified reference to an authored anchor node.
Owning reservation credential; release validates every field.
Stable animation asset and graph binding metadata.
Definition Climbing.h:100
Normalized branch interval advertising one stable combo tag.
Definition Climbing.h:108
Quantized selection cost and hard-decision evidence for one action definition.
Definition Climbing.h:613
Opaque deterministic identity of one sorted candidate; contains no client-authored position.
Definition Climbing.h:389
friend bool operator==(const ClimbingCandidateKey &, const ClimbingCandidateKey &) noexcept=default
Operator ==.
Owning, replayable climbing candidate; contains no borrowed query pointers.
Definition Climbing.h:290
ClimbingProbeRecipe probeRecipe
Definition Climbing.h:317
std::uint64_t definitionGeneration
Definition generation used to produce this candidate.
Definition Climbing.h:293
physics::PhysicsWorldHandle world
Definition Climbing.h:294
physics::PhysicsBodyHandle obstacleBody
Definition Climbing.h:295
physics::PhysicsShapeHandle obstacleShape
Definition Climbing.h:296
Normalized contact interval and maximum constraint weight.
Definition Climbing.h:118
Geometry-query evidence suitable for an engine debug-draw adapter.
Definition Climbing.h:603
Bounded owning debug snapshot, independent of Physics query caches.
Definition Climbing.h:633
std::vector< ClimbingDebugQuery > queries
Definition Climbing.h:642
ClimbingExecutionId executionId
Definition Climbing.h:641
std::vector< ClimbingMotionEvidence > motion
Definition Climbing.h:644
std::vector< ClimbingCandidateEvidence > evidence
Definition Climbing.h:643
std::vector< ClimbingCandidate > candidates
Definition Climbing.h:635
Owning event record; dispatch to scripts only after the simulation phase.
Definition Climbing.h:513
std::vector< std::string > metadata
Owning immutable action metadata copied when the event is enqueued.
Definition Climbing.h:519
ClimbingEventKind kind
Definition Climbing.h:514
eve::SimulationTick tick
Definition Climbing.h:516
ClimbingExecutionId executionId
Definition Climbing.h:517
Small owning projection of profile fields consumed by ordinary ground/air locomotion.
Definition Climbing.h:261
physics::QueryFilter3D queryFilter
Definition Climbing.h:268
One planned-versus-actual capsule sample from an authoritative execution tick.
Definition Climbing.h:623
Per-tick authored animation motion supplied before climbing warp and collision.
Definition Climbing.h:540
ClimbingObstacleCollision obstacleCollision
Definition Climbing.h:549
std::vector< ClimbingNotifyKind > notifies
Owning semantic notifies crossed by the animation player during this exact simulation step.
Definition Climbing.h:547
ClimbingRootMotionPolicy rootMotionPolicy
Definition Climbing.h:548
Input pose used for one deterministic candidate probe.
Definition Climbing.h:275
Vec3 lookIntent
Camera/look intent; Precision mode prioritizes this direction.
Definition Climbing.h:285
Vec3 moveIntent
Camera-relative movement intent; Flow mode prioritizes this direction.
Definition Climbing.h:283
ClimbingInputMode inputMode
Definition Climbing.h:286
Server-to-client decision carrying the authoritative runtime snapshot for reconciliation.
Definition Climbing.h:431
ClimbingPredictionSequence sequence
Definition Climbing.h:437
eve::Value authoritativeSnapshot
Canonical server runtime state after the decision, used for rollback/replay reconciliation.
Definition Climbing.h:445
ClimbingPredictionReason reason
Definition Climbing.h:441
eve::Value::Object extensionMetadata
Unknown schema fields retained across decode and encode.
Definition Climbing.h:447
ClimbingPredictionDisposition disposition
Definition Climbing.h:440
ClimbingCandidateKey authoritativeCandidate
Server-selected key; fingerprint zero means no authoritative candidate was available.
Definition Climbing.h:443
static constexpr std::string_view SchemaId
Canonical cross-process schema id.
Definition Climbing.h:433
Client-to-server request containing selection identity only, never a world-space target.
Definition Climbing.h:404
eve::Value::Object extensionMetadata
Unknown schema fields retained across decode and encode.
Definition Climbing.h:414
ClimbingPredictionSequence sequence
Definition Climbing.h:410
static constexpr std::string_view SchemaId
Canonical cross-process schema id.
Definition Climbing.h:406
Runtime profile controlling capsule geometry and probe limits.
Definition Climbing.h:218
static constexpr std::string_view SchemaId
Schema id emitted by the canonical profile codec.
Definition Climbing.h:220
std::vector< std::string > deniedActionTags
Definition Climbing.h:250
eve::Value::Object extensionMetadata
Unknown schema fields retained across decode and encode.
Definition Climbing.h:257
std::vector< std::string > defaultActionIds
Definition Climbing.h:248
physics::QueryFilter3D queryFilter
Definition Climbing.h:254
std::vector< ClimbingActionDefinition > actions
Definition Climbing.h:255
std::vector< std::string > allowedActionTags
Definition Climbing.h:249
ClimbingStaminaPolicy staminaPolicy
Definition Climbing.h:251
Allocation-free counters produced by the latest runtime workload.
Handle domain for module-owned climbing runtimes.
Definition Climbing.h:886
Quantized selection-cost weights stored with a profile.
Definition Climbing.h:126
Owning evidence returned by one committed climbing selection transaction.
Definition Climbing.h:464
ClimbingExecutionId executionId
Definition Climbing.h:465
ClimbingCandidate candidate
Definition Climbing.h:466
Normalized action interval selecting which motion-warp channels may correct authored motion.
Definition Climbing.h:151
Small owning world-space vector used at climbing module boundaries.
Query filter applied atomically for one owning query operation.