载入中...
搜索中...
未找到
WaterSystemBindings.cpp
浏览该文件的文档.
2
4
5#include <simplesquirrel/simplesquirrel.hpp>
6
7namespace eve::graphics {
8namespace {
9} // namespace
10
11void exposeWaterSystemBindings(ssq::Table& table) {
12 auto scene = table.addClass("WaterSceneConditions", ssq::Class::Ctor<WaterSceneConditions()>());
13 scene.addVar("sunIntensity", &WaterSceneConditions::sunIntensity);
14 scene.addVar("hour", &WaterSceneConditions::hour);
15 scene.addVar("minute", &WaterSceneConditions::minute);
16 scene.addVar("sunAvailable", &WaterSceneConditions::sunAvailable);
17 scene.addVar("timeAvailable", &WaterSceneConditions::timeAvailable);
18 scene.addFunc("setSunColor", [](WaterSceneConditions* value, float r, float g, float b) {
19 value->sunColor = {r, g, b};
20 });
21 scene.addFunc("setSunDirection", [](WaterSceneConditions* value, float x, float y, float z) {
22 value->sunDirection = {x, y, z};
23 });
24
25 auto settings = table.addClass("WaterSystemSettings", ssq::Class::Ctor<WaterSystemSettings()>());
26 settings.addVar("refreshRate", &WaterSystemSettings::refreshRate);
27 settings.addVar("infiniteMode", &WaterSystemSettings::infiniteMode);
28 settings.addVar("autoRefresh", &WaterSystemSettings::autoRefresh);
29 settings.addVar("ignoreSceneConditions", &WaterSystemSettings::ignoreSceneConditions);
30 settings.addFunc("setAutoUpdateMode", [](WaterSystemSettings* value, int mode) {
31 value->autoUpdateMode = static_cast<WaterAutoUpdateMode>(mode);
32 });
33
34 auto state = table.addClass("WaterSystemState", ssq::Class::Ctor<WaterSystemState()>());
35 state.addVar("seaLevel", &WaterSystemState::seaLevel);
36 state.addVar("positionX", &WaterSystemState::positionX);
37 state.addVar("positionY", &WaterSystemState::positionY);
38 state.addVar("positionZ", &WaterSystemState::positionZ);
39 state.addVar("refreshRemaining", &WaterSystemState::refreshRemaining);
40 state.addVar("sceneCheckFrames", &WaterSystemState::sceneCheckFrames);
41 state.addVar("refreshRevision", &WaterSystemState::refreshRevision);
42 state.addVar("initialized", &WaterSystemState::initialized);
43
44 table.addFunc("initializeWaterSystem",
45 [vm = table.getHandle()](WaterSystemState* state, const WaterSystemSettings* settings,
46 const WaterSceneConditions* scene, int initialDelay) {
47 auto result = state && settings && scene
48 ? initializeWaterSystem(*state, *settings, *scene, initialDelay)
50 Diagnostic::error(DiagnosticCode::InvalidArgument, "water.system: non-null state, settings and scene required"));
51 return eve::script::projectResult(vm, std::move(result));
52 });
53 table.addFunc("advanceWaterSystem",
54 [vm = table.getHandle()](WaterSystemState* state, const WaterSystemSettings* settings,
55 const WaterSceneConditions* scene, float playerX, float playerZ, float dt,
56 int nextDelay) {
57 auto result = state && settings && scene
58 ? advanceWaterSystem(*state, *settings, *scene, playerX, playerZ, dt, nextDelay)
60 Diagnostic::error(DiagnosticCode::InvalidArgument, "water.system: non-null state, settings and scene required")).status());
61 return eve::script::projectResult(vm, std::move(result), [](bool value) { return value; });
62 });
63 table.addFunc("updateWaterSeaLevel", [vm = table.getHandle()](WaterSystemState* state, float seaLevel,
64 bool regenerate) {
65 auto result = state ? updateWaterSeaLevel(*state, seaLevel, regenerate)
67 Diagnostic::error(DiagnosticCode::InvalidArgument, "water.system: non-null state, settings and scene required")).status());
68 return eve::script::projectResult(vm, std::move(result), [](bool value) { return value; });
69 });
70}
71
72} // namespace eve::graphics
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
tensor::Graph g
Definition GpuGraph.cpp:7
wgpu::PopErrorScopeStatus status
double r
MeleePoint3 b
Definition MeleeHit.cpp:41
std::weak_ptr< PrimitiveScene > scene
The single Squirrel projection for common Result, Status and Value.
TerrainThermalSettings settings
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
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
Result< bool > advanceWaterSystem(WaterSystemState &state, const WaterSystemSettings &settings, const WaterSceneConditions &scene, float playerX, float playerZ, float dt, int nextSceneCheckFrames)
Advance infinite placement and Pcg-compatible reflection refresh scheduling.
Result< void > initializeWaterSystem(WaterSystemState &state, const WaterSystemSettings &settings, const WaterSceneConditions &scene, int initialSceneCheckFrames)
Initialize a water controller from an authored policy and current scene snapshot.
void exposeWaterSystemBindings(ssq::Table &table)
Register water-system value types and checked operations with the VM owner thread.
WaterAutoUpdateMode
Reflection refresh policy used by the caller-owned water controller.
Definition WaterSystem.h:16
Result< bool > updateWaterSeaLevel(WaterSystemState &state, float seaLevel, bool regenerateReflections)
Atomically move the water surface to a new sea level.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Immutable scene inputs used to decide whether water reflections are stale.
Definition WaterSystem.h:19
Authored policy for Pcg-compatible water placement and reflection refresh.
Definition WaterSystem.h:30
Caller-owned water-system state; contains no scene pointers or hidden clock.
Definition WaterSystem.h:39