Files
simian/scripts/demo_scene.as
nick bc99a1e53c
CI / build-and-test (push) Successful in 2m41s
Sync Docs to Gitea Wiki / Sync docs to Gitea wiki (push) Successful in 11s
feat: Globals value store as well
2026-03-13 14:50:53 +13:00

83 lines
2.7 KiB
ActionScript 3

// Demo scene script with input-driven behavior.
class SceneScript {
uint sceneRoot = 0;
uint camera = 0;
uint light = 0;
uint cube = 0;
float time = 0.0f;
bool highlight = false;
void Init() {
uint kvStore = KV::Open("demo_scene");
Log(LOG_INFO, "Demo scene script init");
int var;
if (Globals::Get("demo_var", var)) {
Log(LOG_INFO, "Loaded global variable 'demo_var' with value: " + var);
} else {
Log(LOG_INFO, "No global variable 'demo_var' found, starting fresh.");
var = 42;
}
Globals::Set("demo_var", var + 1);
int value;
string strValue;
if (KV::Get(kvStore, "int", value)) {
Log(LOG_INFO, "Loaded int value from KV store: " + value);
} else {
Log(LOG_INFO, "No int value found in KV store, starting fresh.");
value = 0;
}
if (KV::Get(kvStore, "str", strValue)) {
Log(LOG_INFO, "Loaded string value from KV store: " + strValue);
} else {
Log(LOG_INFO, "No string value found in KV store, starting fresh.");
strValue = "Hello, KV!";
}
cube = ECS::CreateEntity();
ECS::AddTransform(cube, 0.0f, 2.5f, 0.0f);
uint modelId = Asset::GetModelId("demo2_cube");
if (modelId == 0) {
modelId = Asset::LoadCube("demo2_cube", 1.0f, 1.0f, 1.0f);
}
ECS::AddModelRenderer(cube, int(modelId), 0xFFAA00FF, 0.0f);
ECS::AddTag(cube, "InputCube");
KV::Put(kvStore, "int", value+1);
KV::Put(kvStore, "str", strValue + " (updated " + value + ")");
var = 0;
if (Globals::Get("demo_var", var)) {
Log(LOG_INFO, "Updated global variable 'demo_var' to value: " + var);
}
}
void Shutdown() {
Log(LOG_INFO, "Demo scene script shutdown");
}
void Update(float dt) {
time += dt;
if (ECS::IsValid(cube) && ECS::HasTransform(cube)) {
ECS::SetRotationEuler(cube, 0.0f, time, time * 0.5f);
}
if (IsActionPressed("jump")) {
highlight = !highlight;
if (highlight) {
ECS::SetModelRendererColor(cube, 0x00FF88FF);
ECS::SetModelRendererOutline(cube, 2.0f);
Toast::Info("Highlight on");
} else {
ECS::SetModelRendererColor(cube, 0xFFAA00FF);
ECS::SetModelRendererOutline(cube, 0.0f);
Toast::Info("Highlight off");
}
}
if (IsActionPressed("attack")) {
ECS::SetLightDirection(light, -0.5f, 0.7f, -0.3f);
Toast::Success("Light toggled");
}
}
}