载入中...
搜索中...
未找到
ClimbingRegistry.cpp
浏览该文件的文档.
1#include "climbing/Climbing.h"
2
3namespace eve::climbing {
4namespace {
5
6} // namespace
7
9 return Climbing::create()->runtimes_.emplace(std::make_unique<ClimbingRuntime>());
10}
11
13 Climbing* module = ModuleManager::getInstance<Climbing>("Climbing");
14 return module ? module->runtimes_.resolve(reference) : eve::script::Borrowed<ClimbingRuntime>();
15}
16
18 Climbing* module = ModuleManager::getInstance<Climbing>("Climbing");
19 if (!module)
21 eve::DiagnosticCode::StaleHandle, "Climbing module is no longer loaded", "runtime", {}, "climbing"));
22 return module->runtimes_.erase(reference);
23}
24
26 if (!reference.isValid()) return false;
27 Climbing* module = ModuleManager::getInstance<Climbing>("Climbing");
28 return !module || module->runtimes_.isStale(reference);
29}
30
34 auto instance = ClimbingAnchorGraphInstance::bind(std::move(graph), world, body);
35 if (!instance) return eve::Result<ClimbingAnchorGraphHandleRef>::failure(instance.status());
36 return Climbing::create()->anchorGraphs_.emplace(
37 std::make_unique<ClimbingAnchorGraphInstance>(std::move(instance).takeValue()));
38}
39
42 Climbing* module = ModuleManager::getInstance<Climbing>("Climbing");
43 return module ? module->anchorGraphs_.resolve(reference) : eve::script::Borrowed<ClimbingAnchorGraphInstance>();
44}
45
47 Climbing* module = ModuleManager::getInstance<Climbing>("Climbing");
48 if (!module)
50 eve::DiagnosticCode::StaleHandle, "Climbing module is no longer loaded", "anchorGraph", {}, "climbing"));
51 return module->anchorGraphs_.erase(reference);
52}
53
55 if (!reference.isValid()) return false;
56 Climbing* module = ModuleManager::getInstance<Climbing>("Climbing");
57 return !module || module->anchorGraphs_.isStale(reference);
58}
59
60} // namespace eve::climbing
AuthorityStoreHandleRef reference
Definition Authority.cpp:24
Deterministic climbing/parkour planning and capsule-constrained execution.
std::map< std::string, std::vector< std::string > > graph
Definition Package.cpp:59
World3D * world
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 failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static eve::Result< ClimbingAnchorGraphInstance > bind(ClimbingAnchorGraphDefinition graph, physics::World3D &world, physics::PhysicsBodyHandle body)
Validates and binds a graph snapshot to an existing Physics body.
Script-facing factory and owner for independent climbing runtimes.
Definition Climbing.h:891
static eve::Result< void > release(ClimbingRuntimeHandleRef reference)
Releases a module-owned runtime and invalidates its reference.
static eve::Result< void > releaseAnchorGraph(ClimbingAnchorGraphHandleRef reference)
Releases a module-owned graph instance and all of its reservations.
static bool isStale(ClimbingRuntimeHandleRef reference) noexcept
Reports whether a runtime reference is stale.
static eve::script::Borrowed< ClimbingAnchorGraphInstance > resolveAnchorGraph(ClimbingAnchorGraphHandleRef reference) noexcept
Resolves a live graph instance as a synchronous non-owning observation.
static eve::Result< ClimbingAnchorGraphHandleRef > newAnchorGraph(ClimbingAnchorGraphDefinition graph, physics::World3D &world, physics::PhysicsBodyHandle body)
Creates a module-owned graph instance bound to one live Physics body.
static bool isAnchorGraphStale(ClimbingAnchorGraphHandleRef reference) noexcept
Reports whether a graph instance reference is stale.
static eve::Result< ClimbingRuntimeHandleRef > newRuntime()
Creates a module-owned runtime and returns its generation-qualified reference.
static eve::script::Borrowed< ClimbingRuntime > resolve(ClimbingRuntimeHandleRef reference) noexcept
Resolves a live runtime as a non-owning observation.
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.
Versioned graph asset; topology is authoritative while collision remains owned by Physics.