summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-05-15 03:50:26 (GMT)
committer jacob1 <jfu614@gmail.com>2013-05-15 03:50:26 (GMT)
commit94d21a1679749df49342903545192254a27f8ffc (patch)
tree81d4f9771b4821ad29b0dee0240febcb4e08280e /src
parentab3675d6eea1ce6eeeac713ed44f5cb591ff820f (diff)
downloadpowder-94d21a1679749df49342903545192254a27f8ffc.zip
powder-94d21a1679749df49342903545192254a27f8ffc.tar.gz
when called with no arguments, some tpt. functions will act as get functions (unfinished)
Also, redo some menu stuff to use int's instead of Menu *s, and fix bug with toggleable buttons being toggled without triggering their actions
Diffstat (limited to 'src')
-rw-r--r--src/cat/LegacyLuaAPI.cpp159
-rw-r--r--src/cat/LuaScriptInterface.cpp1
-rw-r--r--src/gui/game/GameController.cpp18
-rw-r--r--src/gui/game/GameController.h3
-rw-r--r--src/gui/game/GameModel.cpp64
-rw-r--r--src/gui/game/GameModel.h6
-rw-r--r--src/gui/game/GameView.cpp35
-rw-r--r--src/gui/game/GameView.h3
-rw-r--r--src/gui/interface/Button.cpp8
9 files changed, 164 insertions, 133 deletions
diff --git a/src/cat/LegacyLuaAPI.cpp b/src/cat/LegacyLuaAPI.cpp
index 7be9db7..e2dba35 100644
--- a/src/cat/LegacyLuaAPI.cpp
+++ b/src/cat/LegacyLuaAPI.cpp
@@ -692,14 +692,11 @@ char *luacon_geterror(){
lua_pop(luacon_ci->l, 1);
return err;
}
-/*void luacon_close(){
- lua_close(l);
-}*/
//TPT Interface methods
int luatpt_test(lua_State* l)
{
- int testint = 0;
+ int testint = 0;
testint = luaL_optint(l, 1, 0);
printf("Test successful, got %d\n", testint);
return 0;
@@ -863,7 +860,7 @@ int luatpt_error(lua_State* l)
}
int luatpt_drawtext(lua_State* l)
{
- char *string;
+ char *string;
int textx, texty, textred, textgreen, textblue, textalpha;
textx = luaL_optint(l, 1, 0);
texty = luaL_optint(l, 2, 0);
@@ -916,7 +913,12 @@ int luatpt_create(lua_State* l)
int luatpt_setpause(lua_State* l)
{
int pausestate;
- pausestate = luaL_optint(l, 1, 0);
+ pausestate = luaL_optint(l, 1, -1);
+ if (pausestate == -1)
+ {
+ lua_pushnumber(l, luacon_model->GetPaused());
+ return 1;
+ }
luacon_model->SetPaused(pausestate==0?0:1);
return 0;
}
@@ -924,21 +926,27 @@ int luatpt_setpause(lua_State* l)
int luatpt_togglepause(lua_State* l)
{
luacon_model->SetPaused(!luacon_model->GetPaused());
- //sys_pause=!sys_pause;
- return 0;
+ lua_pushnumber(l, luacon_model->GetPaused());
+ return 1;
}
int luatpt_togglewater(lua_State* l)
{
luacon_sim->water_equal_test=!luacon_sim->water_equal_test;
- return 0;
+ lua_pushnumber(l, luacon_sim->water_equal_test);
+ return 1;
}
int luatpt_setconsole(lua_State* l)
{
int consolestate;
- consolestate = luaL_optint(l, 1, 0);
- if (consolestate)
+ consolestate = luaL_optint(l, 1, -1);
+ if (consolestate == -1)
+ {
+ lua_pushnumber(l, luacon_ci->Window != ui::Engine::Ref().GetWindow());
+ return 1;
+ }
+ else if (consolestate)
luacon_controller->ShowConsole();
else
luacon_controller->HideConsole();
@@ -1542,11 +1550,13 @@ int luatpt_get_name(lua_State* l)
int luatpt_set_shortcuts(lua_State* l)
{
- int shortcut = luaL_optint(l, 1, 0);
- if (shortcut)
- shortcuts = true;
- else
- shortcuts = false;
+ int shortcut = luaL_optint(l, 1, -1);
+ if (shortcut == -1)
+ {
+ lua_pushnumber(l, shortcuts);
+ return 1;
+ }
+ shortcuts = shortcut?true:false;
return 0;
}
@@ -1746,84 +1756,107 @@ int luatpt_message_box(lua_State* l)
}
int luatpt_get_numOfParts(lua_State* l)
{
- lua_pushinteger(l, luacon_sim->parts_lastActiveIndex);
- return 1;
+ lua_pushinteger(l, luacon_sim->parts_lastActiveIndex);
+ return 1;
}
int luatpt_start_getPartIndex(lua_State* l)
{
- getPartIndex_curIdx = -1;
- return 1;
+ getPartIndex_curIdx = -1;
+ return 1;
}
int luatpt_next_getPartIndex(lua_State* l)
{
- while(1)
- {
- getPartIndex_curIdx++;
- if(getPartIndex_curIdx >= NPART)
- {
- getPartIndex_curIdx = 0;
- lua_pushboolean(l, 0);
- return 1;
- }
- if(luacon_sim->parts[getPartIndex_curIdx].type)
- break;
+ while(1)
+ {
+ getPartIndex_curIdx++;
+ if(getPartIndex_curIdx >= NPART)
+ {
+ getPartIndex_curIdx = 0;
+ lua_pushboolean(l, 0);
+ return 1;
+ }
+ if(luacon_sim->parts[getPartIndex_curIdx].type)
+ break;
- }
+ }
- lua_pushboolean(l, 1);
- return 1;
+ lua_pushboolean(l, 1);
+ return 1;
}
int luatpt_getPartIndex(lua_State* l)
{
- if(getPartIndex_curIdx < 0)
- {
- lua_pushinteger(l, 0);
- return 1;
- }
- lua_pushinteger(l, getPartIndex_curIdx);
- return 1;
+ if(getPartIndex_curIdx < 0)
+ {
+ lua_pushinteger(l, 0);
+ return 1;
+ }
+ lua_pushinteger(l, getPartIndex_curIdx);
+ return 1;
}
int luatpt_hud(lua_State* l)
{
- int hudstate = luaL_optint(l, 1, 0);
- if (hudstate)
+ int hudstate = luaL_optint(l, 1, -1);
+ if (hudstate == -1)
+ {
+ lua_pushinteger(l, luacon_controller->GetHudEnable());
+ return 1;
+ }
+ else if (hudstate)
luacon_controller->SetHudEnable(1);
else
luacon_controller->SetHudEnable(0);
- return 0;
+ return 0;
}
int luatpt_gravity(lua_State* l)
{
- int gravstate;
- gravstate = luaL_optint(l, 1, 0);
- if(gravstate)
- luacon_sim->grav->start_grav_async();
- else
- luacon_sim->grav->stop_grav_async();
- return 0;
+ int gravstate;
+ gravstate = luaL_optint(l, 1, -1);
+ if (gravstate == -1)
+ {
+ lua_pushinteger(l, luacon_sim->grav->ngrav_enable);
+ return 1;
+ }
+ else if(gravstate)
+ luacon_sim->grav->start_grav_async();
+ else
+ luacon_sim->grav->stop_grav_async();
+ luacon_model->UpdateQuickOptions();
+ return 0;
}
int luatpt_airheat(lua_State* l)
{
- int aheatstate;
- aheatstate = luaL_optint(l, 1, 0);
- luacon_sim->aheat_enable = (aheatstate==0?0:1);
- return 0;
+ int aheatstate;
+ aheatstate = luaL_optint(l, 1, -1);
+ if (aheatstate == -1)
+ {
+ lua_pushinteger(l, luacon_sim->aheat_enable);
+ return 1;
+ }
+ luacon_sim->aheat_enable = (aheatstate==0?0:1);
+ luacon_model->UpdateQuickOptions();
+ return 0;
}
int luatpt_active_menu(lua_State* l)
{
- int menuid;
- menuid = luaL_optint(l, 1, -1);
- if (menuid < SC_TOTAL && menuid >= 0)
- luacon_model->SetActiveMenu(luacon_model->GetMenuList()[menuid]);
- else
- return luaL_error(l, "Invalid menu");
- return 0;
+ int menuid;
+ menuid = luaL_optint(l, 1, -1);
+ if (menuid == -1)
+ {
+ lua_pushinteger(l, luacon_model->GetActiveMenu());
+ return 1;
+ }
+ if (menuid >= 0 && menuid < SC_TOTAL)
+ luacon_controller->SetActiveMenu(menuid);
+ else
+ return luaL_error(l, "Invalid menu");
+ return 0;
}
int luatpt_decorations_enable(lua_State* l)
{
int decostate;
decostate = luaL_optint(l, 1, 0);
luacon_model->SetDecoration(decostate==0?false:true);
+ luacon_model->UpdateQuickOptions();
return 0;
}
@@ -1940,7 +1973,7 @@ int luatpt_getscript(lua_State* l)
luacommand = new char[strlen(filename)+20];
sprintf(luacommand,"dofile(\"%s\")",filename);
luaL_dostring (l, luacommand);
- }
+ }
fin:
if(filedata) free(filedata);
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp
index 17928ef..da03be5 100644
--- a/src/cat/LuaScriptInterface.cpp
+++ b/src/cat/LuaScriptInterface.cpp
@@ -2431,6 +2431,7 @@ std::string LuaScriptInterface::FormatCommand(std::string command)
}
LuaScriptInterface::~LuaScriptInterface() {
+ lua_close(l);
delete legacy;
}
#endif
diff --git a/src/gui/game/GameController.cpp b/src/gui/game/GameController.cpp
index 09e1a1c..ad48f66 100644
--- a/src/gui/game/GameController.cpp
+++ b/src/gui/game/GameController.cpp
@@ -924,6 +924,11 @@ void GameController::SetHudEnable(bool hudState)
gameView->SetHudEnable(hudState);
}
+bool GameController::GetHudEnable()
+{
+ return gameView->GetHudEnable();
+}
+
void GameController::SetActiveColourPreset(int preset)
{
gameModel->SetActiveColourPreset(preset);
@@ -935,18 +940,15 @@ void GameController::SetColour(ui::Colour colour)
gameModel->SetPresetColour(colour);
}
-void GameController::SetActiveMenu(Menu * menu)
+void GameController::SetActiveMenu(int menuID)
{
- gameModel->SetActiveMenu(menu);
+ gameModel->SetActiveMenu(menuID);
vector<Menu*> menuList = gameModel->GetMenuList();
bool set = false;
- for(int i = 0; i < menuList.size(); i++)
+ if(menuID == SC_DECO)
{
- if(menuList[i]==menu && i == SC_DECO)
- {
- gameModel->SetColourSelectorVisibility(true);
- set = true;
- }
+ gameModel->SetColourSelectorVisibility(true);
+ set = true;
}
if(!set)
gameModel->SetColourSelectorVisibility(false);
diff --git a/src/gui/game/GameController.h b/src/gui/game/GameController.h
index f2cf26b..59fd4c8 100644
--- a/src/gui/game/GameController.h
+++ b/src/gui/game/GameController.h
@@ -100,7 +100,8 @@ public:
void SetDecoration();
void ShowGravityGrid();
void SetHudEnable(bool hudState);
- void SetActiveMenu(Menu * menu);
+ bool GetHudEnable();
+ void SetActiveMenu(int menuID);
std::vector<Menu*> GetMenuList();
void SetActiveTool(int toolSelection, Tool * tool);
void ActiveToolChanged(int toolSelection, Tool *tool);
diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp
index 18276d0..960f45a 100644
--- a/src/gui/game/GameModel.cpp
+++ b/src/gui/game/GameModel.cpp
@@ -31,7 +31,7 @@ GameModel::GameModel():
colour(255, 0, 0, 255),
toolStrength(1.0f),
activeColourPreset(-1),
- activeMenu(NULL),
+ activeMenu(-1),
edgeMode(0)
{
sim = new Simulation();
@@ -221,9 +221,9 @@ void GameModel::BuildQuickOptionMenu(GameController * controller)
void GameModel::BuildMenus()
{
- char lastMenu = 0;
- if(activeMenu)
- lastMenu = activeMenu->GetIcon();
+ int lastMenu = -1;
+ if(activeMenu != -1)
+ lastMenu = activeMenu;
std::string activeToolIdentifiers[3];
if(regularToolset[0])
@@ -346,19 +346,15 @@ void GameModel::BuildMenus()
lastTool = activeTools[0];
//Set default menu
- activeMenu = menuList[SC_POWDERS];
+ activeMenu = SC_POWDERS;
- if(lastMenu)
+ if(lastMenu != -1) //What is this? ...
{
- for(std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
- {
- if((*iter)->GetIcon() == lastMenu)
- activeMenu = *iter;
- }
+ activeMenu = lastMenu;
}
- if(activeMenu)
- toolList = activeMenu->GetToolList();
+ if(activeMenu != -1)
+ toolList = menuList[activeMenu]->GetToolList();
else
toolList = std::vector<Tool*>();
@@ -471,32 +467,26 @@ float GameModel::GetToolStrength()
return toolStrength;
}
-void GameModel::SetActiveMenu(Menu * menu)
+void GameModel::SetActiveMenu(int menuID)
{
- for(int i = 0; i < menuList.size(); i++)
+ activeMenu = menuID;
+ toolList = menuList[menuID]->GetToolList();
+ notifyToolListChanged();
+
+ if(menuID == SC_DECO)
{
- if(menuList[i]==menu)
+ if(activeTools != decoToolset)
{
- activeMenu = menu;
- toolList = menu->GetToolList();
- notifyToolListChanged();
-
- if(menu == menuList[SC_DECO])
- {
- if(activeTools != decoToolset)
- {
- activeTools = decoToolset;
- notifyActiveToolsChanged();
- }
- }
- else
- {
- if(activeTools != regularToolset)
- {
- activeTools = regularToolset;
- notifyActiveToolsChanged();
- }
- }
+ activeTools = decoToolset;
+ notifyActiveToolsChanged();
+ }
+ }
+ else
+ {
+ if(activeTools != regularToolset)
+ {
+ activeTools = regularToolset;
+ notifyActiveToolsChanged();
}
}
}
@@ -511,7 +501,7 @@ vector<Tool*> GameModel::GetToolList()
return toolList;
}
-Menu * GameModel::GetActiveMenu()
+int GameModel::GetActiveMenu()
{
return activeMenu;
}
diff --git a/src/gui/game/GameModel.h b/src/gui/game/GameModel.h
index f8ccfb5..dd54d91 100644
--- a/src/gui/game/GameModel.h
+++ b/src/gui/game/GameModel.h
@@ -53,7 +53,7 @@ private:
vector<Menu*> menuList;
vector<QuickOption*> quickOptions;
- Menu * activeMenu;
+ int activeMenu;
int currentBrush;
vector<Brush *> brushList;
SaveInfo * currentSave;
@@ -168,8 +168,8 @@ public:
void ClearSimulation();
vector<Menu*> GetMenuList();
vector<QuickOption*> GetQuickOptions();
- void SetActiveMenu(Menu * menu);
- Menu * GetActiveMenu();
+ void SetActiveMenu(int menuID);
+ int GetActiveMenu();
void FrameStep(int frames);
User GetUser();
void SetUser(User user);
diff --git a/src/gui/game/GameView.cpp b/src/gui/game/GameView.cpp
index 925ff2c..f054793 100644
--- a/src/gui/game/GameView.cpp
+++ b/src/gui/game/GameView.cpp
@@ -189,7 +189,7 @@ GameView::GameView():
toolTipPresence(0),
currentSaveType(0),
lastLogEntry(0.0f),
- lastMenu(NULL)
+ lastMenu(-1)
{
int currentX = 1;
@@ -403,7 +403,6 @@ GameView::GameView():
};
pauseButton = new ui::Button(ui::Point(Size.X-16, Size.Y-16), ui::Point(15, 15), "", "Pause/Resume the simulation"); //Pause
pauseButton->SetIcon(IconPause);
- pauseButton->SetTogglable(true);
pauseButton->SetActionCallback(new PauseAction(this));
AddComponent(pauseButton);
@@ -459,13 +458,13 @@ class GameView::MenuAction: public ui::ButtonAction
{
GameView * v;
public:
- Menu * menu;
+ int menuID;
bool needsClick;
- MenuAction(GameView * _v, Menu * menu_)
+ MenuAction(GameView * _v, int menuID_)
{
v = _v;
- menu = menu_;
- if (v->c->GetMenuList()[SC_DECO] == menu)
+ menuID = menuID_;
+ if (menuID == SC_DECO)
needsClick = true;
else
needsClick = false;
@@ -473,12 +472,12 @@ public:
void MouseEnterCallback(ui::Button * sender)
{
if(!needsClick && !ui::Engine::Ref().GetMouseButton())
- v->c->SetActiveMenu(menu);
+ v->c->SetActiveMenu(menuID);
}
void ActionCallback(ui::Button * sender)
{
if (needsClick)
- v->c->SetActiveMenu(menu);
+ v->c->SetActiveMenu(menuID);
else
MouseEnterCallback(sender);
}
@@ -566,15 +565,14 @@ void GameView::NotifyMenuListChanged(GameModel * sender)
}
toolButtons.clear();
vector<Menu*> menuList = sender->GetMenuList();
- for(vector<Menu*>::reverse_iterator iter = menuList.rbegin(), end = menuList.rend(); iter != end; ++iter)
+ for (int i = menuList.size()-1; i >= 0; i--)
{
std::string tempString = "";
- Menu * item = *iter;
- tempString += item->GetIcon();
- ui::Button * tempButton = new ui::Button(ui::Point(XRES+BARSIZE-16, currentY), ui::Point(15, 15), tempString, item->GetDescription());
+ tempString += menuList[i]->GetIcon();
+ ui::Button * tempButton = new ui::Button(ui::Point(XRES+BARSIZE-16, currentY), ui::Point(15, 15), tempString, menuList[i]->GetDescription());
tempButton->Appearance.Margin = ui::Border(0, 2, 3, 2);
tempButton->SetTogglable(true);
- tempButton->SetActionCallback(new MenuAction(this, item));
+ tempButton->SetActionCallback(new MenuAction(this, i));
currentY-=16;
AddComponent(tempButton);
menuButtons.push_back(tempButton);
@@ -591,6 +589,11 @@ void GameView::SetHudEnable(bool hudState)
showHud = hudState;
}
+bool GameView::GetHudEnable()
+{
+ return showHud;
+}
+
ui::Point GameView::GetMousePosition()
{
return mousePosition;
@@ -643,7 +646,7 @@ void GameView::NotifyToolListChanged(GameModel * sender)
int totalColour;
for(int i = 0; i < menuButtons.size(); i++)
{
- if(((MenuAction*)menuButtons[i]->GetActionCallback())->menu==sender->GetActiveMenu())
+ if(((MenuAction*)menuButtons[i]->GetActionCallback())->menuID==sender->GetActiveMenu())
{
menuButtons[i]->SetToggleState(true);
}
@@ -698,7 +701,7 @@ void GameView::NotifyToolListChanged(GameModel * sender)
AddComponent(tempButton);
toolButtons.push_back(tempButton);
}
- if (sender->GetActiveMenu() != sender->GetMenuList()[SC_DECO])
+ if (sender->GetActiveMenu() != SC_DECO)
lastMenu = sender->GetActiveMenu();
}
@@ -1364,7 +1367,7 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
{
c->SetDecoration(true);
c->SetPaused(true);
- c->SetActiveMenu(c->GetMenuList()[SC_DECO]);
+ c->SetActiveMenu(SC_DECO);
}
break;
case 'y':
diff --git a/src/gui/game/GameView.h b/src/gui/game/GameView.h
index 8d5c57b..328b67c 100644
--- a/src/gui/game/GameView.h
+++ b/src/gui/game/GameView.h
@@ -54,7 +54,7 @@ private:
std::string introTextMessage;
int toolIndex;
int currentSaveType;
- Menu * lastMenu;
+ int lastMenu;
int toolTipPresence;
std::string toolTip;
@@ -130,6 +130,7 @@ public:
ui::Point GetMousePosition();
void SetSample(SimulationSample sample);
void SetHudEnable(bool hudState);
+ bool GetHudEnable();
bool CtrlBehaviour(){ return ctrlBehaviour; }
bool ShiftBehaviour(){ return shiftBehaviour; }
void ExitPrompt();
diff --git a/src/gui/interface/Button.cpp b/src/gui/interface/Button.cpp
index 37ef22d..71ec499 100644
--- a/src/gui/interface/Button.cpp
+++ b/src/gui/interface/Button.cpp
@@ -153,6 +153,10 @@ void Button::OnMouseUnclick(int x, int y, unsigned int button)
{
if(isButtonDown)
{
+ if(isTogglable)
+ {
+ toggle = !toggle;
+ }
isButtonDown = false;
DoAction();
}
@@ -173,10 +177,6 @@ void Button::OnMouseClick(int x, int y, unsigned int button)
return;
if(button == 1)
{
- if(isTogglable)
- {
- toggle = !toggle;
- }
isButtonDown = true;
}
else if(button == 3)