Files
wx_wherigo/main/src/lua/zobject.cpp
2026-02-13 02:41:12 +01:00

65 lines
1.6 KiB
C++

#include "lua/zobject.h"
#include "lua/game_engine.h"
extern "C" {
#include <lua.h>
}
#include <wx/log.h>
namespace wherigo {
int zobject_MoveTo(lua_State *L) {
// Get source object name
lua_getfield(L, 1, "Name");
const char *srcName = lua_isstring(L, -1) ? lua_tostring(L, -1) : "(unknown)";
lua_pop(L, 1);
// Get target container name
const char *dstName = "(nil)";
if (lua_istable(L, 2)) {
lua_getfield(L, 2, "Name");
dstName = lua_isstring(L, -1) ? lua_tostring(L, -1) : "(unknown)";
lua_pop(L, 1);
lua_pushvalue(L, 2);
lua_setfield(L, 1, "Container");
}
wxLogDebug("MoveTo: %s -> %s", srcName, dstName);
// Notify game state change
GameEngine::getInstance().notifyStateChanged();
return 0;
}
int zobject_Contains(lua_State *L) {
// self (container) at index 1, item to check at index 2
lua_getfield(L, 1, "Name");
const char *containerName = lua_isstring(L, -1) ? lua_tostring(L, -1) : "(unknown)";
lua_pop(L, 1);
lua_getfield(L, 2, "Name");
const char *itemName = lua_isstring(L, -1) ? lua_tostring(L, -1) : "(unknown)";
lua_pop(L, 1);
// Check if item's Container is the same as self (container)
bool contains = false;
lua_getfield(L, 2, "Container"); // Get item.Container
if (lua_istable(L, -1)) {
// Compare by reference - check if it's the same table as self
contains = lua_rawequal(L, 1, -1);
}
lua_pop(L, 1); // pop Container
wxLogDebug("Contains: %s in %s? -> %s", itemName, containerName, contains ? "true" : "false");
lua_pushboolean(L, contains ? 1 : 0);
return 1;
}
} // namespace wherigo