diff --git a/server/monsters/monster_api.cpp b/server/monsters/monster_api.cpp index 473e7b4..06d6551 100644 --- a/server/monsters/monster_api.cpp +++ b/server/monsters/monster_api.cpp @@ -26,19 +26,30 @@ #include "entity_api.hpp" static int setAvatar(lua_State* L) { - //TODO + MonsterData* monster = static_cast(lua_touserdata(L, 1)); + monster->SetAvatar(lua_tostring(L, 2)); + //TODO: send an update to the clients? + return 0; } static int getAvatar(lua_State* L) { - //TODO + MonsterData* monster = static_cast(lua_touserdata(L, 1)); + lua_pushstring(L, monster->GetAvatar().c_str()); + return 1; } static int setScript(lua_State* L) { - //TODO + MonsterData* monster = static_cast(lua_touserdata(L, 1)); + luaL_unref(L, LUA_REGISTRYINDEX, monster->GetScriptReference()); + monster->SetScriptReference(luaL_ref(L, LUA_REGISTRYINDEX)); + return 0; } static int getScript(lua_State* L) { - //TODO + MonsterData* monster = static_cast(lua_touserdata(L, 1)); + lua_pushinteger(L, monster->GetScriptReference()); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; } static const luaL_Reg monsterLib[] = { diff --git a/server/waypoints/waypoint_api.cpp b/server/waypoints/waypoint_api.cpp index f769ddb..cfc8191 100644 --- a/server/waypoints/waypoint_api.cpp +++ b/server/waypoints/waypoint_api.cpp @@ -23,39 +23,54 @@ #include "waypoint_data.hpp" -//TODO: return multiple values, dummy - //origin static int setOrigin(lua_State* L) { - //TODO + WaypointData* waypoint = static_cast(lua_touserdata(L, 1)); + waypoint->SetOrigin(Vector2(lua_tonumber(L, 2), lua_tonumber(L, 3))); return 0; } static int getOrigin(lua_State* L) { - //TODO - return 0; + WaypointData* waypoint = static_cast(lua_touserdata(L, 1)); + lua_pushnumber(L, waypoint->GetOrigin().x); + lua_pushnumber(L, waypoint->GetOrigin().y); + return 2; } //bounds static int setBoundingBox(lua_State* L) { - //TODO + WaypointData* waypoint = static_cast(lua_touserdata(L, 1)); + waypoint->SetBoundingBox(BoundingBox( + lua_tonumber(L, 2), + lua_tonumber(L, 3), + lua_tonumber(L, 4), + lua_tonumber(L, 5) + )); return 0; } static int getBoundingBox(lua_State* L) { - //TODO - return 0; + WaypointData* waypoint = static_cast(lua_touserdata(L, 1)); + lua_pushnumber(L, waypoint->GetBoundingBox().x); + lua_pushnumber(L, waypoint->GetBoundingBox().y); + lua_pushnumber(L, waypoint->GetBoundingBox().w); + lua_pushnumber(L, waypoint->GetBoundingBox().h); + return 4; } //triggers static int setTriggerReference(lua_State* L) { - //TODO + WaypointData* waypoint = static_cast(lua_touserdata(L, 1)); + luaL_unref(L, LUA_REGISTRYINDEX, waypoint->GetTriggerReference()); + waypoint->SetTriggerReference(luaL_ref(L, LUA_REGISTRYINDEX)); return 0; } static int getTriggerReference(lua_State* L) { - //TODO - return 0; + WaypointData* waypoint = static_cast(lua_touserdata(L, 1)); + lua_pushinteger(L, waypoint->GetTriggerReference()); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; } static const luaL_Reg waypointLib[] = { diff --git a/server/waypoints/waypoint_manager_api.cpp b/server/waypoints/waypoint_manager_api.cpp index 9703d71..447c666 100644 --- a/server/waypoints/waypoint_manager_api.cpp +++ b/server/waypoints/waypoint_manager_api.cpp @@ -23,20 +23,28 @@ #include "waypoint_manager.hpp" +//TODO: figure out a way to iterate through elements of managers from lua + static int create(lua_State* L) { + WaypointManager* mgr = static_cast(lua_touserdata(L, 1)); //TODO } static int unload(lua_State* L) { + WaypointManager* mgr = static_cast(lua_touserdata(L, 1)); //TODO } static int getWaypoint(lua_State* L) { - //TODO + WaypointManager* mgr = static_cast(lua_touserdata(L, 1)); + lua_pushlightuserdata(L, mgr->Get(lua_tointeger(L, 2))); + return 1; } static int getLoadedCount(lua_State* L) { - //TODO + WaypointManager* mgr = static_cast(lua_touserdata(L, 1)); + lua_pushinteger(L, mgr->GetLoadedCount()); + return 1; } static const luaL_Reg waypointManagerLib[] = {