diff --git a/src/cat/LegacyLuaAPI.cpp b/src/cat/LegacyLuaAPI.cpp index 7be9db75f..e2dba355a 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 17928ef06..da03be505 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 09e1a1cd1..ad48f6615 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 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 f2cf26ba3..59fd4c8f1 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 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 18276d023..960f45a07 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::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(); @@ -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++) - { - if(menuList[i]==menu) - { - activeMenu = menu; - toolList = menu->GetToolList(); - notifyToolListChanged(); + activeMenu = menuID; + toolList = menuList[menuID]->GetToolList(); + notifyToolListChanged(); - if(menu == menuList[SC_DECO]) - { - if(activeTools != decoToolset) - { - activeTools = decoToolset; - notifyActiveToolsChanged(); - } - } - else - { - if(activeTools != regularToolset) - { - activeTools = regularToolset; - notifyActiveToolsChanged(); - } - } + if(menuID == SC_DECO) + { + if(activeTools != decoToolset) + { + activeTools = decoToolset; + notifyActiveToolsChanged(); + } + } + else + { + if(activeTools != regularToolset) + { + activeTools = regularToolset; + notifyActiveToolsChanged(); } } } @@ -511,7 +501,7 @@ vector 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 f8ccfb549..dd54d9168 100644 --- a/src/gui/game/GameModel.h +++ b/src/gui/game/GameModel.h @@ -53,7 +53,7 @@ private: vector menuList; vector quickOptions; - Menu * activeMenu; + int activeMenu; int currentBrush; vector brushList; SaveInfo * currentSave; @@ -168,8 +168,8 @@ public: void ClearSimulation(); vector GetMenuList(); vector 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 925ff2c60..f054793d1 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 menuList = sender->GetMenuList(); - for(vector::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 8d5c57b03..328b67cfd 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 37ef22dba..71ec4991f 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)