summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-05-15 17:51:45 (GMT)
committer jacob1 <jfu614@gmail.com>2013-05-15 17:51:45 (GMT)
commitdfc33aaeeaa066ff0107b4ed68ec7756fbc5acb3 (patch)
tree51d5c2e1fd34f26d862b6eee80e3960c3243d7c1
parent94d21a1679749df49342903545192254a27f8ffc (diff)
downloadpowder-dfc33aaeeaa066ff0107b4ed68ec7756fbc5acb3.zip
powder-dfc33aaeeaa066ff0107b4ed68ec7756fbc5acb3.tar.gz
finish return values for the legacy api, add sim.saveStamp and sim.loadStamp
-rw-r--r--src/cat/LegacyLuaAPI.cpp25
-rw-r--r--src/cat/LuaScriptInterface.cpp43
-rw-r--r--src/cat/LuaScriptInterface.h2
-rw-r--r--src/client/Client.cpp2
-rw-r--r--src/gui/game/GameController.cpp7
-rw-r--r--src/gui/game/GameController.h2
-rw-r--r--src/gui/game/GameModel.cpp8
-rw-r--r--src/gui/game/GameModel.h2
8 files changed, 77 insertions, 14 deletions
diff --git a/src/cat/LegacyLuaAPI.cpp b/src/cat/LegacyLuaAPI.cpp
index e2dba35..b9afd7e 100644
--- a/src/cat/LegacyLuaAPI.cpp
+++ b/src/cat/LegacyLuaAPI.cpp
@@ -1854,7 +1854,12 @@ int luatpt_active_menu(lua_State* l)
int luatpt_decorations_enable(lua_State* l)
{
int decostate;
- decostate = luaL_optint(l, 1, 0);
+ decostate = luaL_optint(l, 1, -1);
+ if (decostate == -1)
+ {
+ lua_pushinteger(l, luacon_model->GetDecoration());
+ return 1;
+ }
luacon_model->SetDecoration(decostate==0?false:true);
luacon_model->UpdateQuickOptions();
return 0;
@@ -1863,14 +1868,19 @@ int luatpt_decorations_enable(lua_State* l)
int luatpt_heat(lua_State* l)
{
int heatstate;
- heatstate = luaL_optint(l, 1, 0);
+ heatstate = luaL_optint(l, 1, -1);
+ if (heatstate == -1)
+ {
+ lua_pushinteger(l, luacon_sim->legacy_enable);
+ return 1;
+ }
luacon_sim->legacy_enable = (heatstate==1?0:1);
return 0;
}
int luatpt_cmode_set(lua_State* l)
{
- int cmode = luaL_optint(l, 1, 0)+1;
+ int cmode = luaL_optint(l, 1, 3)+1;
if (cmode == 11)
cmode = 0;
if (cmode >= 0 && cmode <= 10)
@@ -1893,8 +1903,13 @@ int luatpt_setdebug(lua_State* l)
}
int luatpt_setfpscap(lua_State* l)
{
- int fpscap = luaL_optint(l, 1, 0);
- if (fpscap < 2)
+ int fpscap = luaL_optint(l, 1, -1);
+ if (fpscap == -1)
+ {
+ lua_pushinteger(l, ui::Engine::Ref().FpsLimit);
+ return 1;
+ }
+ else if (fpscap < 2)
return luaL_error(l, "fps cap too small");
ui::Engine::Ref().FpsLimit = fpscap;
return 0;
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp
index da03be5..1a600ef 100644
--- a/src/cat/LuaScriptInterface.cpp
+++ b/src/cat/LuaScriptInterface.cpp
@@ -456,6 +456,8 @@ void LuaScriptInterface::initSimulationAPI()
{"createWallBox", simulation_createWallBox},
{"floodWalls", simulation_floodWalls},
{"clearSim", simulation_clearSim},
+ {"saveStamp", simulation_saveStamp},
+ {"loadStamp", simulation_loadStamp},
{NULL, NULL}
};
luaL_register(l, "simulation", simulationAPIMethods);
@@ -1094,6 +1096,47 @@ int LuaScriptInterface::simulation_clearSim(lua_State * l)
return 0;
}
+int LuaScriptInterface::simulation_saveStamp(lua_State * l)
+{
+ int x = luaL_optint(l,1,0);
+ int y = luaL_optint(l,2,0);
+ int w = luaL_optint(l,3,XRES);
+ int h = luaL_optint(l,4,YRES);
+ std::string name = luacon_controller->StampRegion(ui::Point(x, y), ui::Point(x+w, y+h));
+ lua_pushstring(l, name.c_str());
+ return 1;
+}
+
+int LuaScriptInterface::simulation_loadStamp(lua_State * l)
+{
+ int stamp_size, i = -1, j, x, y, ret;
+ SaveFile * tempfile;
+ x = luaL_optint(l,2,0);
+ y = luaL_optint(l,3,0);
+ if (lua_isnumber(l, 1)) //Load from stamp ID
+ {
+ i = luaL_optint(l, 1, 0);
+ int stampCount = Client::Ref().GetStampsCount();
+ if (i < 0 || i >= stampCount)
+ return luaL_error(l, "Invalid stamp ID: %d", i);
+ tempfile = Client::Ref().GetStamp(Client::Ref().GetStamps(0, stampCount)[i]);
+ }
+ else //Load from 10 char name, or full filename
+ {
+ char * filename = (char*)luaL_optstring(l, 1, "");
+ tempfile = Client::Ref().GetStamp(filename);
+ }
+ if (tempfile)
+ {
+ luacon_sim->Load(x, y, tempfile->GetGameSave());
+ //luacon_sim->sys_pause = (tempfile->GetGameSave()->paused | luacon_model->GetPaused())?1:0;
+ lua_pushinteger(l, 1);
+ }
+ else
+ lua_pushnil(l);
+ return 1;
+}
+
//// Begin Renderer API
diff --git a/src/cat/LuaScriptInterface.h b/src/cat/LuaScriptInterface.h
index 9b54688..c002f41 100644
--- a/src/cat/LuaScriptInterface.h
+++ b/src/cat/LuaScriptInterface.h
@@ -73,6 +73,8 @@ class LuaScriptInterface: public CommandInterface
static int simulation_createWallBox(lua_State * l);
static int simulation_floodWalls(lua_State * l);
static int simulation_clearSim(lua_State * l);
+ static int simulation_saveStamp(lua_State * l);
+ static int simulation_loadStamp(lua_State * l);
//Renderer
void initRendererAPI();
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index 1a2f296..367aa70 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -949,6 +949,8 @@ void Client::MoveStampToFront(std::string stampID)
SaveFile * Client::GetStamp(std::string stampID)
{
std::string stampFile = std::string(STAMPS_DIR PATH_SEP + stampID + ".stm");
+ if (!FileExists(stampFile))
+ stampFile = stampID;
if(FileExists(stampFile))
{
SaveFile * file = new SaveFile(stampID);
diff --git a/src/gui/game/GameController.cpp b/src/gui/game/GameController.cpp
index ad48f66..267133b 100644
--- a/src/gui/game/GameController.cpp
+++ b/src/gui/game/GameController.cpp
@@ -509,17 +509,20 @@ void GameController::ToolClick(int toolSelection, ui::Point point)
activeTool->Click(sim, cBrush, point);
}
-void GameController::StampRegion(ui::Point point1, ui::Point point2)
+std::string GameController::StampRegion(ui::Point point1, ui::Point point2)
{
GameSave * newSave;
newSave = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y);
if(newSave)
{
newSave->paused = gameModel->GetPaused();
- gameModel->AddStamp(newSave);
+ return gameModel->AddStamp(newSave);
}
else
+ {
new ErrorMessage("Could not create stamp", "Error generating save file");
+ return "";
+ }
}
void GameController::CopyRegion(ui::Point point1, ui::Point point2)
diff --git a/src/gui/game/GameController.h b/src/gui/game/GameController.h
index 59fd4c8..b67df41 100644
--- a/src/gui/game/GameController.h
+++ b/src/gui/game/GameController.h
@@ -90,7 +90,7 @@ public:
void DrawRect(int toolSelection, ui::Point point1, ui::Point point2);
void DrawLine(int toolSelection, ui::Point point1, ui::Point point2);
void DrawFill(int toolSelection, ui::Point point);
- void StampRegion(ui::Point point1, ui::Point point2);
+ std::string StampRegion(ui::Point point1, ui::Point point2);
void CopyRegion(ui::Point point1, ui::Point point2);
void CutRegion(ui::Point point1, ui::Point point2);
void Update();
diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp
index 960f45a..aecd0eb 100644
--- a/src/gui/game/GameModel.cpp
+++ b/src/gui/game/GameModel.cpp
@@ -348,10 +348,8 @@ void GameModel::BuildMenus()
//Set default menu
activeMenu = SC_POWDERS;
- if(lastMenu != -1) //What is this? ...
- {
+ if(lastMenu != -1)
activeMenu = lastMenu;
- }
if(activeMenu != -1)
toolList = menuList[activeMenu]->GetToolList();
@@ -882,12 +880,12 @@ void GameModel::SetPlaceSave(GameSave * save)
notifyPlaceSaveChanged();
}
-void GameModel::AddStamp(GameSave * save)
+std::string GameModel::AddStamp(GameSave * save)
{
if(stamp)
delete stamp;
stamp = save;
- Client::Ref().AddStamp(save);
+ return Client::Ref().AddStamp(save);
}
void GameModel::SetClipboard(GameSave * save)
diff --git a/src/gui/game/GameModel.h b/src/gui/game/GameModel.h
index dd54d91..92df87f 100644
--- a/src/gui/game/GameModel.h
+++ b/src/gui/game/GameModel.h
@@ -186,7 +186,7 @@ public:
void SetZoomWindowPosition(ui::Point position);
ui::Point GetZoomWindowPosition();
void SetStamp(GameSave * newStamp);
- void AddStamp(GameSave * save);
+ std::string AddStamp(GameSave * save);
void SetClipboard(GameSave * save);
void SetPlaceSave(GameSave * save);
void Log(string message);