Lifecycle Hooks
All hooks are optional. If a hook is missing, it is simply not called.
Hook Reference
| Hook | Generation | Description |
|---|---|---|
Script_OnInspector(ScriptContext&) | Manual export required | ImGui inspector UI |
Script_Begin(ScriptContext&, float) | Wrapper from Begin | Called once per instance |
Script_TickUpdate(ScriptContext&, float) | Wrapper from TickUpdate | Called every frame (preferred) |
Script_Update(ScriptContext&, float) | Wrapper from Update | Fallback if TickUpdate missing |
Script_Spec(ScriptContext&, float) | Wrapper from Spec | Runs when Spec toggle enabled |
Script_TestEditor(ScriptContext&, float) | Wrapper from TestEditor | Editor-time execution |
Runtime Notes
- •
Beginruns once per object instance (per script component instance). - •
TickUpdateruns every frame (preferred). - •
Updateruns only ifTickUpdateis not exported. - •
Spec/TestEditorrun every frame only while their global toggles are enabled (main menu → Scripts).
Example
Scripts/LifecycleExample.cpp CPP
1
400">class="text-violet-400">#include "ScriptRuntime.h"
2
400">class="text-violet-400">#include "ThirdParty/imgui/imgui.h"
3
4
// Called once when script starts
5
400">void Begin(400">ScriptContext& ctx, 400">float dt) {
6
(400">void)dt;
7
ctx.AddConsoleMessage("Script initialized!", ConsoleMessageType::Info);
8
}
9
10
// Called every frame
11
400">void TickUpdate(400">ScriptContext& ctx, 400">float dt) {
12
400">if (!ctx.object) 400">return;
13
// Frame logic here
14
}
15
16
// Editor-time execution
17
400">void TestEditor(400">ScriptContext& ctx, 400">float dt) {
18
400">if (!ctx.object) 400">return;
19
// Editor preview logic
20
}
21
22
// Manual export for inspector UI
23
400">extern "C" 400">void Script_OnInspector(400">ScriptContext& ctx) {
24
400">ImGui::Text("Custom inspector UI");
25
ctx.MarkDirty();
26
}