载入中...
搜索中...
未找到
BuildingFxBindings.cpp
浏览该文件的文档.
1#include <simplesquirrel/simplesquirrel.hpp>
2#include "building/Ghost.h"
6#include "graphics/Graphics.h"
7#include "graphics/Mesh.h"
8
9namespace eve::buildingfx {
10
11void BuildingFx::expose(ssq::Table& table) {
12 auto cls = table.addClass(name, BuildingFx::create, false);
13 expose(cls);
14}
15
16void BuildingFx::expose(ssq::Class& cls) {
17 cls.addFunc("setMeshResolver", [](BuildingFx* fx, ssq::Table resources) {
18 std::unordered_map<std::string, graphics::Mesh*> meshes;
19 HSQUIRRELVM vm = resources.getHandle();
20 const SQInteger top = sq_gettop(vm);
21 try {
22 sq_pushobject(vm, resources.getRaw());
23 sq_pushnull(vm);
24 while (SQ_SUCCEEDED(sq_next(vm, -2))) {
25 const auto key = ssq::detail::popValue<std::string>(vm, -2);
26 SQUserPointer mesh = nullptr;
27 const auto tag = reinterpret_cast<SQUserPointer>(ssq::detail::stableTypeHash<graphics::Mesh*>());
28 if (SQ_FAILED(sq_getinstanceup(vm, -1, &mesh, tag)) || !mesh)
29 throw ssq::TypeException("mesh resolver values must be non-null Mesh instances");
30 meshes.emplace(key, static_cast<graphics::Mesh*>(mesh));
31 sq_pop(vm, 2);
32 }
33 } catch (...) {
34 sq_settop(vm, top);
35 throw;
36 }
37 sq_settop(vm, top);
38 fx->setMeshResolver([meshes = std::move(meshes)](const std::string& id) {
39 const auto found = meshes.find(id);
40 return found == meshes.end() ? nullptr : found->second;
41 });
42 });
43 cls.addFunc("clearMeshResolver", &BuildingFx::clearMeshResolver);
44 cls.addFunc("attach", &BuildingFx::attach);
45 cls.addFunc("detach", &BuildingFx::detach);
46 cls.addFunc("isAttached", &BuildingFx::isAttached);
47 cls.addFunc("getAttachedCount", &BuildingFx::getAttachedCount);
48 cls.addFunc("sync", &BuildingFx::sync);
49 cls.addFunc("getVisualCount", &BuildingFx::getVisualCount);
50 cls.addFunc("getVisualVariant", &BuildingFx::getVisualVariant);
51 cls.addFunc("getVisualResource", &BuildingFx::getVisualResource);
52 cls.addFunc("getVisualFallbackReason", &BuildingFx::getVisualFallbackReason);
53 cls.addFunc("getCurveGroupCount", &BuildingFx::getCurveGroupCount);
54 cls.addFunc("getContinuousCurveVisualCount", &BuildingFx::getContinuousCurveVisualCount);
55 cls.addFunc("getCurveVisualFallbackReason", &BuildingFx::getCurveVisualFallbackReason);
56 cls.addFunc("updateEdgeCurveSurfacePreview", &BuildingFx::updateEdgeCurveSurfacePreviewStatus);
57 cls.addFunc("clearEdgeCurvePreview", &BuildingFx::clearEdgeCurvePreview);
58 cls.addFunc("hasEdgeCurvePreview", &BuildingFx::hasEdgeCurvePreview);
59 cls.addFunc("getEdgeCurvePreviewFallbackReason", &BuildingFx::getEdgeCurvePreviewFallbackReason);
60 cls.addFunc("getEdgeCurvePreviewSurfaceId", &BuildingFx::getEdgeCurvePreviewSurfaceId);
61 cls.addFunc("setLevelVisibilityMode", &BuildingFx::setLevelVisibilityMode);
62 cls.addFunc("getLevelVisibilityMode", &BuildingFx::getLevelVisibilityMode);
63 cls.addFunc("isVisualVisible", &BuildingFx::isVisualVisible);
64 cls.addFunc("updateGhost", &BuildingFx::updateGhost);
65 cls.addFunc("hideGhost", &BuildingFx::hideGhost);
66 cls.addFunc("updateAreaPreview", &BuildingFx::updateAreaPreview);
67 cls.addFunc("clearAreaPreview", &BuildingFx::clearAreaPreview);
68 cls.addFunc("getAreaPreviewCount", &BuildingFx::getAreaPreviewCount);
69 cls.addFunc("getAreaPreviewAccepted", &BuildingFx::getAreaPreviewAccepted);
70 cls.addFunc("setGridVisible", &BuildingFx::setGridVisible);
71 cls.addFunc("getGridVisible", &BuildingFx::getGridVisible);
72 cls.addFunc("drawGrid2D", &BuildingFx::drawGrid2D);
73 cls.addFunc("drawGrid3D", &BuildingFx::drawGrid3D);
74}
75
76} // namespace eve::buildingfx
SQInteger top
struct SQVM * HSQUIRRELVM
HSQUIRRELVM vm
Definition ECS.cpp:20
HSQOBJECT cls
Definition ECS.cpp:21
std::uint32_t key
std::int32_t second
std::string name
const std::string * tag
std::vector< std::weak_ptr< DeviceBytes > > resources
Definition OnnxGpgpu.cpp:55
Mesh * mesh
bool found
std::string getLevelVisibilityMode(building::PlacementWorld *world) const
Return the stable per-world floor visibility token.
int getCurveGroupCount(building::PlacementWorld *world) const
Number of authoritative curve groups observed by the last sync.
int getAreaPreviewCount(building::PlacementWorld *world) const
std::string getVisualResource(building::PlacementWorld *world, int instanceId) const
Selected configured resource id after mask, class, and base resolution.
bool attach(building::PlacementWorld *world)
int getVisualCount(building::PlacementWorld *world) const
bool getGridVisible(building::PlacementWorld *world) const
void hideGhost(building::PlacementWorld *world)
std::string getVisualVariant(building::PlacementWorld *world, int instanceId) const
Current derived topology variant for one visual, or empty when unavailable.
void setLevelVisibilityMode(building::PlacementWorld *world, const std::string &mode)
Set per-world floor visibility: all, active, or active_and_below.
void clearAreaPreview(building::PlacementWorld *world)
Clear all area-preview cells and their derived render entities.
bool getAreaPreviewAccepted(building::PlacementWorld *world, int index) const
std::string getEdgeCurvePreviewSurfaceId(building::PlacementWorld *world) const
Surface identity represented by the current preview, or empty.
void setGridVisible(building::PlacementWorld *world, bool visible)
void updateAreaPreview(building::PlacementWorld *world, building::PlacementSession *session)
Copy the session's owning area-preview projection for 2D/3D heatmap rendering.
bool isAttached(building::PlacementWorld *world) const
void clearEdgeCurvePreview(building::PlacementWorld *world)
Remove the transient continuous curve draft for a world.
void drawGrid3D(building::PlacementWorld *world, graphics::Graphics *gfx, float height=0.f)
bool isVisualVisible(building::PlacementWorld *world, int instanceId) const
Return whether one synchronized instance is currently visible.
bool hasEdgeCurvePreview(building::PlacementWorld *world) const
Return whether the world owns a current CPU curve-preview mesh.
int getContinuousCurveVisualCount(building::PlacementWorld *world) const
Number of curve groups currently rendered as one continuous 3D mesh.
void clearMeshResolver()
Remove the mesh resolver; configured resources fall back to the primitive cube.
Definition BuildingFx.h:86
void updateGhost(building::PlacementWorld *world, building::Ghost *ghost)
bool detach(building::PlacementWorld *world)
CurvePreviewUpdateStatus updateEdgeCurveSurfacePreviewStatus(building::PlacementWorld *world, building::PlacementSession *session, int subdivisions, const std::string &surfaceName)
Script projection of updateEdgeCurveSurfacePreview's structured result.
void drawGrid2D(building::PlacementWorld *world, graphics::Graphics *gfx)
void sync(building::PlacementWorld *world)
std::string getEdgeCurvePreviewFallbackReason(building::PlacementWorld *world) const
Return the stable backend degradation reason for the transient curve preview.
std::string getCurveVisualFallbackReason(building::PlacementWorld *world, int instanceId) const
Stable degradation reason for the curve group containing an instance.
std::string getVisualFallbackReason(building::PlacementWorld *world, int instanceId) const
Empty on resolved resources, otherwise a stable observable degradation reason.
std::unordered_map< std::string, SkillDefinition > & table()
Definition Skill.cpp:65