载入中...
搜索中...
未找到
ClimbingMotionBindings.cpp
浏览该文件的文档.
3#include "physics/World3D.h"
4namespace eve::climbing {
5namespace {} // namespace
6void exposeClimbingMotionBindings(ssq::Class& runtime, HSQUIRRELVM vm) {
7 runtime.addFunc(
8 "advance", [vm](ScriptClimbingRuntime* value, physics::World3D* world, std::int64_t tick, float deltaSeconds) {
9 if (!value || !world || tick < 0)
11 vm,
13 eve::DiagnosticCode::InvalidArgument, "runtime, world, and non-negative tick are required",
14 "advance", {}, "climbing.binding")),
16 auto resolved = Climbing::resolve(value->reference);
17 if (!resolved.isBound())
19 vm,
21 "climbing runtime handle is stale",
22 "runtime", {}, "climbing.binding")),
24 auto duration = eve::Duration::fromSeconds(deltaSeconds);
27 vm,
28 resolved->advance(
29 *world, {eve::SimulationTick(static_cast<std::uint64_t>(tick)), std::move(duration).takeValue()}),
31 });
32 runtime.addFunc("advanceWarped", [vm](ScriptClimbingRuntime* value, physics::World3D* world, std::int64_t tick,
33 float dt, float dx, float dy, float dz, float fx, float fz,
34 bool ignoreObstacle) {
35 if (!value || !world || tick < 0)
37 vm,
39 eve::DiagnosticCode::InvalidArgument, "runtime, world, and nonnegative tick required",
40 "advanceWarped", {}, "climbing.binding")),
42 auto resolved = Climbing::resolve(value->reference);
43 if (!resolved.isBound())
46 eve::DiagnosticCode::StaleHandle, "climbing runtime handle is stale",
47 "runtime", {}, "climbing.binding")),
52 motion.rootTranslation = {dx, dy, dz};
53 motion.facing = {fx, 0.f, fz};
54 motion.hasRootMotion = true;
56 motion.obstacleCollision =
59 vm,
60 resolved->advance(*world,
61 {eve::SimulationTick(static_cast<std::uint64_t>(tick)), std::move(duration).takeValue()},
62 motion),
64 });
65}
66} // namespace eve::climbing
double value
float duration
struct SQVM * HSQUIRRELVM
HSQUIRRELVM vm
Definition ECS.cpp:20
World3D * world
float dz
float dy
float dx
The single Squirrel projection for common Result, Status and Value.
SimulationTick tick
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< Duration > fromSeconds(double seconds)
Convert finite seconds to the nearest nanosecond.
Definition Time.cpp:16
Move-only operation result carrying either a value or Status.
Definition Result.h:155
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
void exposeClimbingMotionBindings(ssq::Class &runtime, HSQUIRRELVM vm)
Expose climbing motion bindings.
eve::Value projectClimbingAdvance(ClimbingAdvance value)
Project climbing advance.
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Per-tick authored animation motion supplied before climbing warp and collision.
Definition Climbing.h:540
ClimbingObstacleCollision obstacleCollision
Definition Climbing.h:549
ClimbingRootMotionPolicy rootMotionPolicy
Definition Climbing.h:548
ScriptClimbingRuntime public API.