From 3b9dc2c4953a299da893e1255a3ca9cdb06489f0 Mon Sep 17 00:00:00 2001 From: jyelon Date: Tue, 28 Dec 2021 14:07:15 -0500 Subject: [PATCH] Require cb_ prefix for plans --- luprex/core/cpp/gui.cpp | 3 +++ luprex/core/cpp/world-core.cpp | 5 +++++ luprex/core/lua/login.lua | 8 ++++---- luprex/core/lua/player.lua | 25 ++++++++----------------- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/luprex/core/cpp/gui.cpp b/luprex/core/cpp/gui.cpp index 1e7aefb5..8ab7398d 100644 --- a/luprex/core/cpp/gui.cpp +++ b/luprex/core/cpp/gui.cpp @@ -58,6 +58,9 @@ LuaDefine(gui_menu_item, "action,label", "add a menu item to the current gui") { LuaStack LS(L, laction, llabel); std::string action = LS.ckstring(laction); std::string label = LS.ckstring(llabel); + if (!util::has_prefix(action, "cb_")) { + luaL_error(L, "menuitem callbacks must start with cb_"); + } gui->menu_item(action, label); return LS.result(); } diff --git a/luprex/core/cpp/world-core.cpp b/luprex/core/cpp/world-core.cpp index ea3bc151..68b72891 100644 --- a/luprex/core/cpp/world-core.cpp +++ b/luprex/core/cpp/world-core.cpp @@ -529,6 +529,11 @@ void World::invoke_plan(int64_t actor_id, int64_t place_id, const std::string &a return; } + // Make sure the action starts with "cb_" + if (!util::has_prefix(action, "cb_")) { + return; + } + // Get the actor and place. Make sure both exist. Tangible *tactor = tangible_get(actor_id); Tangible *tplace = tangible_get(place_id); diff --git a/luprex/core/lua/login.lua b/luprex/core/lua/login.lua index c92924b4..ed236251 100644 --- a/luprex/core/lua/login.lua +++ b/luprex/core/lua/login.lua @@ -1,15 +1,15 @@ makeclass('login') function login.interface(actor, place) - gui.menu_item("becomeplayer", "Become a Player") - gui.menu_item("p123", "Print 1, 2, 3") + gui.menu_item("cb_becomeplayer", "Become a Player") + gui.menu_item("cb_p123", "Print 1, 2, 3") end -function login.becomeplayer(actor, place, dialog) +function login.cb_becomeplayer(actor, place, dialog) tangible.setclass(actor, player) end -function login.p123(actor, place, dialog) +function login.cb_p123(actor, place, dialog) print(1) wait(1) print(2) diff --git a/luprex/core/lua/player.lua b/luprex/core/lua/player.lua index ebf5ce1f..f879f2ea 100644 --- a/luprex/core/lua/player.lua +++ b/luprex/core/lua/player.lua @@ -5,10 +5,10 @@ function player.interface(actor, place) -- print("place=", place) -- print("t.actor=", tangible.actor()) -- print("t.place=", tangible.place()) - gui.menu_item("north", "Go North") - gui.menu_item("south", "Go South") - gui.menu_item("east", "Go East") - gui.menu_item("west", "Go West") + gui.menu_item("cb_north", "Go North") + gui.menu_item("cb_south", "Go South") + gui.menu_item("cb_east", "Go East") + gui.menu_item("cb_west", "Go West") end function player:printanimstate() @@ -16,36 +16,27 @@ function player:printanimstate() print("Resulting state: ", graphic, plane, x, y, z, facing) end -function player.north(actor, place, dialog) +function player.cb_north(actor, place, dialog) print("Moving north") tangible.animate(place, {action="walk", dy=1}) actor:printanimstate() end -function player.south(actor, place, dialog) +function player.cb_south(actor, place, dialog) print("Moving south") tangible.animate(place, {action="walk", dy=-1}) actor:printanimstate() end -function player.east(actor, place, dialog) +function player.cb_east(actor, place, dialog) print("Moving east") tangible.animate(place, {action="walk", dx=1}) actor:printanimstate() end -function player.west(actor, place, dialog) +function player.cb_west(actor, place, dialog) print("Moving west") tangible.animate(place, {action="walk", dx=-1}) actor:printanimstate() - -- print("actor=", actor) - -- print("place=", place) - -- print("t.actor=", tangible.actor()) - -- print("t.place=", tangible.place()) - -- wait(1) - -- print("actor=", actor) - -- print("place=", place) - -- print("t.actor=", tangible.actor()) - -- print("t.place=", tangible.place()) end