Skip to content

Commit

Permalink
feat(csm): add register_on_client_ready, register_on_camera_ready and…
Browse files Browse the repository at this point in the history
… register_on_minimap_ready callback registration functions
  • Loading branch information
snowyu committed Jul 4, 2023
1 parent 1b95998 commit 0dc7a5a
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 3 deletions.
3 changes: 3 additions & 0 deletions builtin/client/register.lua
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,6 @@ core.registered_on_item_use, core.register_on_item_use = make_registration()
core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
core.registered_on_modchannel_signal, core.register_on_modchannel_signal = make_registration()
core.registered_on_inventory_open, core.register_on_inventory_open = make_registration()
core.registered_on_client_ready, core.register_on_client_ready = make_registration()
core.registered_on_camera_ready, core.register_on_camera_ready = make_registration()
core.registered_on_minimap_ready, core.register_on_minimap_ready = make_registration()
6 changes: 6 additions & 0 deletions doc/client_lua_api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -738,6 +738,12 @@ Call these functions only at load time!
* Called when the local player open inventory
* Newest functions are called first
* If any function returns true, inventory doesn't open
* `minetest.register_on_client_ready(function())`
* Called just after localplayer ready.
* `minetest.register_on_camera_ready(function())`
* Called just after camera ready.
* `minetest.register_on_minimap_ready(function())`
* Called just after ui.minimap ready.
### Sounds
* `minetest.sound_play(spec, parameters)`: returns a handle
* `spec` is a `SimpleSoundSpec`
Expand Down
39 changes: 36 additions & 3 deletions src/script/scripting_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,48 @@ void ClientScripting::InitializeModApi(lua_State *L, int top)

void ClientScripting::on_client_ready(LocalPlayer *localplayer)
{
LuaLocalPlayer::create(getStack(), localplayer);
SCRIPTAPI_PRECHECKHEADER

LuaLocalPlayer::create(L, localplayer);

lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_client_ready");
// Call callbacks
try {
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
} catch (LuaError &e) {
getClient()->setFatalError(e);
}
}

void ClientScripting::on_camera_ready(Camera *camera)
{
LuaCamera::create(getStack(), camera);
SCRIPTAPI_PRECHECKHEADER

LuaCamera::create(L, camera);

lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_camera_ready");
// Call callbacks
try {
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
} catch (LuaError &e) {
getClient()->setFatalError(e);
}
}

void ClientScripting::on_minimap_ready(Minimap *minimap)
{
LuaMinimap::create(getStack(), minimap);
SCRIPTAPI_PRECHECKHEADER

LuaMinimap::create(L, minimap);

lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_minimap_ready");
// Call callbacks
try {
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
} catch (LuaError &e) {
getClient()->setFatalError(e);
}
}

0 comments on commit 0dc7a5a

Please sign in to comment.