Removed extreneous parameter requirement

Also added tile_sheet_api.*pp
This commit is contained in:
2016-10-29 14:23:54 +11:00
parent dcf1e73635
commit 288b112623
5 changed files with 217 additions and 29 deletions
+1 -1
View File
@@ -23,5 +23,5 @@
#include "lua.hpp" #include "lua.hpp"
#define TORTUGA_REGION_API "region" #define TURTLEMAP_REGION_API "region"
LUAMOD_API int openRegionAPI(lua_State* L); LUAMOD_API int openRegionAPI(lua_State* L);
+96 -26
View File
@@ -28,76 +28,121 @@
//NOTE: zero indexing is used here, but not in the region API //NOTE: zero indexing is used here, but not in the region API
static int setTile(lua_State* L) { static int setTile(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
int ret = pager->SetTile(lua_tointeger(L, 2), lua_tointeger(L, 3), lua_tointeger(L, 4), lua_tointeger(L, 5)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//set tile
int ret = pager->SetTile(lua_tointeger(L, 1), lua_tointeger(L, 2), lua_tointeger(L, 3), lua_tointeger(L, 4));
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 1; return 1;
} }
static int getTile(lua_State* L) { static int getTile(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
int ret = pager->GetTile(lua_tointeger(L, 2), lua_tointeger(L, 3), lua_tointeger(L, 4)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//get tile
int ret = pager->GetTile(lua_tointeger(L, 1), lua_tointeger(L, 2), lua_tointeger(L, 3));
lua_pushinteger(L, ret); lua_pushinteger(L, ret);
return 1; return 1;
} }
static int setSolid(lua_State* L) { static int setSolid(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
bool ret = pager->SetSolid(lua_tointeger(L, 2), lua_tointeger(L, 3), lua_toboolean(L, 4)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//set solid
bool ret = pager->SetSolid(lua_tointeger(L, 1), lua_tointeger(L, 2), lua_toboolean(L, 3));
lua_pushboolean(L, ret); lua_pushboolean(L, ret);
return 1; return 1;
} }
static int getSolid(lua_State* L) { static int getSolid(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
bool ret = pager->GetSolid(lua_tointeger(L, 2), lua_tointeger(L, 3)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//get solid
bool ret = pager->GetSolid(lua_tointeger(L, 1), lua_tointeger(L, 2));
lua_pushboolean(L, ret); lua_pushboolean(L, ret);
return 1; return 1;
} }
static int getRegion(lua_State* L) { static int getRegion(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
Region* region = pager->GetRegion(lua_tointeger(L, 2), lua_tointeger(L, 3)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//get region
Region* region = pager->GetRegion(lua_tointeger(L, 1), lua_tointeger(L, 2));
lua_pushlightuserdata(L, region); lua_pushlightuserdata(L, region);
return 1; return 1;
} }
static int loadRegion(lua_State* L) { static int loadRegion(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
Region* region = pager->LoadRegion(lua_tointeger(L, 2), lua_tointeger(L, 3)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//load region
Region* region = pager->LoadRegion(lua_tointeger(L, 1), lua_tointeger(L, 2));
lua_pushlightuserdata(L, region); lua_pushlightuserdata(L, region);
return 1; return 1;
} }
static int saveRegion(lua_State* L) { static int saveRegion(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
Region* region = pager->SaveRegion(lua_tointeger(L, 2), lua_tointeger(L, 3)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//save region
Region* region = pager->SaveRegion(lua_tointeger(L, 1), lua_tointeger(L, 2));
lua_pushlightuserdata(L, region); lua_pushlightuserdata(L, region);
return 1; return 1;
} }
static int createRegion(lua_State* L) { static int createRegion(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
Region* region = pager->CreateRegion(lua_tointeger(L, 2), lua_tointeger(L, 3)); lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//create region
Region* region = pager->CreateRegion(lua_tointeger(L, 1), lua_tointeger(L, 2));
lua_pushlightuserdata(L, region); lua_pushlightuserdata(L, region);
return 1; return 1;
} }
static int unloadRegion(lua_State* L) { static int unloadRegion(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//two argument types: coords & the region itself //two argument types: coords & the region itself
switch(lua_type(L, 2)) { switch(lua_type(L, 1)) {
case LUA_TNUMBER: case LUA_TNUMBER:
//unload using coords
pager->UnloadIf([&](Region const& region) -> bool { pager->UnloadIf([&](Region const& region) -> bool {
int x = lua_tointeger(L, 2); int x = lua_tointeger(L, 1);
int y = lua_tointeger(L, 3); int y = lua_tointeger(L, 2);
return region.GetX() == x && region.GetY() == y; return region.GetX() == x && region.GetY() == y;
}); });
break; break;
case LUA_TLIGHTUSERDATA: case LUA_TLIGHTUSERDATA:
//unloading using reference
pager->UnloadIf([&](Region const& region) -> bool { pager->UnloadIf([&](Region const& region) -> bool {
return (&region) == lua_touserdata(L, 2); return (&region) == lua_touserdata(L, 1);
}); });
break; break;
} }
@@ -105,28 +150,48 @@ static int unloadRegion(lua_State* L) {
} }
static int setOnLoad(lua_State* L) { static int setOnLoad(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//set on load
luaL_unref(L, LUA_REGISTRYINDEX, pager->GetLoadReference()); luaL_unref(L, LUA_REGISTRYINDEX, pager->GetLoadReference());
pager->SetLoadReference(luaL_ref(L, LUA_REGISTRYINDEX)); pager->SetLoadReference(luaL_ref(L, LUA_REGISTRYINDEX));
return 0; return 0;
} }
static int setOnSave(lua_State* L) { static int setOnSave(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//set on save
luaL_unref(L, LUA_REGISTRYINDEX, pager->GetSaveReference()); luaL_unref(L, LUA_REGISTRYINDEX, pager->GetSaveReference());
pager->SetSaveReference(luaL_ref(L, LUA_REGISTRYINDEX)); pager->SetSaveReference(luaL_ref(L, LUA_REGISTRYINDEX));
return 0; return 0;
} }
static int setOnCreate(lua_State* L) { static int setOnCreate(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//set on create
luaL_unref(L, LUA_REGISTRYINDEX, pager->GetCreateReference()); luaL_unref(L, LUA_REGISTRYINDEX, pager->GetCreateReference());
pager->SetCreateReference(luaL_ref(L, LUA_REGISTRYINDEX)); pager->SetCreateReference(luaL_ref(L, LUA_REGISTRYINDEX));
return 0; return 0;
} }
static int setOnUnload(lua_State* L) { static int setOnUnload(lua_State* L) {
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//set on unload
luaL_unref(L, LUA_REGISTRYINDEX, pager->GetUnloadReference()); luaL_unref(L, LUA_REGISTRYINDEX, pager->GetUnloadReference());
pager->SetUnloadReference(luaL_ref(L, LUA_REGISTRYINDEX)); pager->SetUnloadReference(luaL_ref(L, LUA_REGISTRYINDEX));
return 0; return 0;
@@ -134,7 +199,12 @@ static int setOnUnload(lua_State* L) {
//debugging //debugging
static int containerSize(lua_State* L) { static int containerSize(lua_State* L) {
RegionPagerLua* pager = static_cast<RegionPagerLua*>(lua_touserdata(L, 1)); //get the global pager
lua_getglobal(L, REGION_PAGER_NAME);
RegionPagerLua* pager = reinterpret_cast<RegionPagerLua*>(lua_touserdata(L, -1));
lua_pop(L, 1);
//push container size
lua_pushinteger(L, pager->GetContainer()->size()); lua_pushinteger(L, pager->GetContainer()->size());
return 1; return 1;
} }
+2 -2
View File
@@ -23,6 +23,6 @@
#include "lua.hpp" #include "lua.hpp"
//TODO: (1) change the following line to remove reference to Tortuga #define REGION_PAGER_NAME "_regionPager"
#define TORTUGA_REGION_PAGER_API "region_pager" #define TURTLEMAP_REGION_PAGER_API "region_pager"
LUAMOD_API int openRegionPagerAPI(lua_State* L); LUAMOD_API int openRegionPagerAPI(lua_State* L);
+89
View File
@@ -0,0 +1,89 @@
/* Copyright: (c) Kayne Ruse 2013-2016
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "tile_sheet_api.hpp"
#include "tile_sheet.hpp"
static int load(lua_State* L) {
lua_getglobal(L, TILESHEET_NAME);
TileSheet* sheet = static_cast<TileSheet*>(lua_touserdata(L, -1));
lua_getglobal(L, RENDERER_NAME);
sheet->Load(
static_cast<SDL_Renderer*>(lua_touserdata(L, -1)),
lua_tostring(L, 1),
lua_tointeger(L, 2),
lua_tointeger(L, 3)
);
return 0;
}
static int free(lua_State* L) {
lua_getglobal(L, TILESHEET_NAME);
TileSheet* sheet = static_cast<TileSheet*>(lua_touserdata(L, -1));
sheet->Free();
return 0;
}
static int getCountX(lua_State* L) {
lua_getglobal(L, TILESHEET_NAME);
TileSheet* sheet = static_cast<TileSheet*>(lua_touserdata(L, -1));
lua_pushinteger(L, sheet->GetCountX());
return 1;
}
static int getCountY(lua_State* L) {
lua_getglobal(L, TILESHEET_NAME);
TileSheet* sheet = static_cast<TileSheet*>(lua_touserdata(L, -1));
lua_pushinteger(L, sheet->GetCountY());
return 1;
}
static int getTileW(lua_State* L) {
lua_getglobal(L, TILESHEET_NAME);
TileSheet* sheet = static_cast<TileSheet*>(lua_touserdata(L, -1));
lua_pushinteger(L, sheet->GetTileW());
return 1;
}
static int getTileH(lua_State* L) {
lua_getglobal(L, TILESHEET_NAME);
TileSheet* sheet = static_cast<TileSheet*>(lua_touserdata(L, -1));
lua_pushinteger(L, sheet->GetTileH());
return 1;
}
static const luaL_Reg tileSheetLib[] = {
{"Load", load},
{"Free", free},
{"GetCountX", getCountX},
{"GetCountY", getCountY},
{"GetTileW", getTileW},
{"GetTileH", getTileH},
{nullptr, nullptr}
};
LUAMOD_API int openTileSheetAPI(lua_State* L) {
luaL_newlib(L, tileSheetLib);
return 1;
}
+29
View File
@@ -0,0 +1,29 @@
/* Copyright: (c) Kayne Ruse 2013-2016
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#pragma once
#include "lua.hpp"
#define RENDERER_NAME "_renderer"
#define TILESHEET_NAME "_tilesheet"
#define TURTLEMAP_TILE_SHEET_API "tile_sheet"
LUAMOD_API int openTileSheetAPI(lua_State* L);