载入中...
搜索中...
未找到
ProcgenPhysics.cpp
浏览该文件的文档.
2
4#include "physics/World3D.h"
7
8#include <functional>
9#include <simplesquirrel/simplesquirrel.hpp>
10
11namespace eve::procgen_physics {
14void ProcgenPhysics::expose(ssq::Table& table){
15 auto module=table.addClass(name,ProcgenPhysics::create,false); expose(module);
16 auto runtime=table.addClass<GtsTerrainColliderRuntime>("GtsTerrainColliderRuntime",
17 std::function<GtsTerrainColliderRuntime*()>([](){return new GtsTerrainColliderRuntime();}),true);
18 runtime.addFunc("replace",[vm=table.getHandle()](GtsTerrainColliderRuntime* self,const procgen::GtsTerrainLodSet* lods,
19 physics::World3D* world,int level,float x,float y,float z){
20 auto result=(!self||!lods||!world)
21 ? Result<std::uint64_t>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"GTS collider replace requires runtime, LOD set and world","procgen.physics.gtsTerrainCollider"))
22 : self->replace(*lods,*world,level,x,y,z);
23 return eve::script::projectResult(vm,std::move(result),[](std::uint64_t value){return Value(static_cast<std::int64_t>(value));});});
24 runtime.addFunc("clear",[vm=table.getHandle()](GtsTerrainColliderRuntime* self){
25 auto result=self?self->clear():Result<int>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"GTS collider runtime is null","procgen.physics.gtsTerrainCollider"));
26 return eve::script::projectResult(vm,std::move(result),[](int value){return Value(static_cast<std::int64_t>(value));});});
27 runtime.addFunc("getBody",&GtsTerrainColliderRuntime::getBody);
28 runtime.addFunc("getTileCount",&GtsTerrainColliderRuntime::getTileCount);
29 runtime.addFunc("getRevision",&GtsTerrainColliderRuntime::getRevision);
30}
31void ProcgenPhysics::expose(ssq::Class& cls){cls.addFunc("newGtsTerrainColliderRuntime",&ProcgenPhysics::newGtsTerrainColliderRuntime);}
32}
double value
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
HSQUIRRELVM vm
Definition ECS.cpp:20
HSQOBJECT cls
Definition ECS.cpp:21
int level
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
World3D * world
The single Squirrel projection for common Result, Status and Value.
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 failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Box3D rigid-body world. Script coordinates are meters (Box3D native), unlike 2D World which uses pixe...
Definition World3D.h:63
Owned result of the GTS split-and-sequential-simplify pipeline.
Transactional owner of optional static triangle-mesh colliders for a GTS tile batch.
int getTileCount() const
Return row-major tile slot count including empty cells.
physics::Body3D * getBody(int tileIndex) const
Resolve a borrowed collider body, or null for empty, stale or invalid tile slots.
std::uint64_t getRevision() const
Return the latest committed revision.
Script bridge for optional GTS terrain physics composition.
GtsTerrainColliderRuntime * newGtsTerrainColliderRuntime()
Allocate a caller-owned GTS terrain collider runtime.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.