accessible trading screen

This commit is contained in:
devZoGok
2025-04-17 20:15:26 +03:00
parent 410cdeaa0f
commit 46c0044767
13 changed files with 116 additions and 55 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ ButtonType = {
SELL_REFINEDS = 27, SELL_REFINEDS = 27,
BUY_RESEARCH = 28, BUY_RESEARCH = 28,
SELL_RESEARCH = 29, SELL_RESEARCH = 29,
ACTIVE_GAME_STATE = 30, ACTIVE_STATE_BACK = 30,
PLAYER_TRADE = 31, PLAYER_TRADE = 31,
TRADING_SCREEN = 32, TRADING_SCREEN = 32,
TRADE_OFFER = 33, TRADE_OFFER = 33,
+1 -2
View File
@@ -16,9 +16,8 @@ gui = {
}, },
{ {
guiType = GuiType.BUTTON, guiType = GuiType.BUTTON,
buttonType = ButtonType.ACTIVE_GAME_STATE, buttonType = ButtonType.ACTIVE_STATE_BACK,
name = 'Back', name = 'Back',
guiScreen = 'activeGameState.lua',
pos = {x = HubPos.x + HubSize.x - buttonSize.x - HubMargin.right, y = HubPos.y + HubSize.y - buttonSize.y - HubMargin.bottom, z = .11}, pos = {x = HubPos.x + HubSize.x - buttonSize.x - HubMargin.right, y = HubPos.y + HubSize.y - buttonSize.y - HubMargin.bottom, z = .11},
size = buttonSize, size = buttonSize,
trigger = 10 trigger = 10
+1 -1
View File
@@ -17,7 +17,7 @@ cmake_policy(SET CMP0015 NEW)
set(UNIT_BUTTONS unitButton.cpp tradeButton.cpp buildButton.cpp trainButton.cpp researchButton.cpp orderButton.cpp stateToggleButton.cpp) set(UNIT_BUTTONS unitButton.cpp tradeButton.cpp buildButton.cpp trainButton.cpp researchButton.cpp orderButton.cpp stateToggleButton.cpp)
set(OPTIONS_BUTTONS optionsButton.cpp tabButton.cpp okButton.cpp defaultsButton.cpp) set(OPTIONS_BUTTONS optionsButton.cpp tabButton.cpp okButton.cpp defaultsButton.cpp)
set(TRADING_BUTTONS playerTradeButton.cpp tradingScreenButton.cpp offerButton.cpp resourceAmmountButton.cpp) set(TRADING_BUTTONS activeStateBackButton.cpp playerTradeButton.cpp tradingScreenButton.cpp offerButton.cpp resourceAmmountButton.cpp)
set(MENU_BUTTONS mainMenuButton.cpp singlePlayerButton.cpp exitButton.cpp backButton.cpp playButton.cpp) set(MENU_BUTTONS mainMenuButton.cpp singlePlayerButton.cpp exitButton.cpp backButton.cpp playButton.cpp)
set(MAP_EDITOR_BUTTONS mapEditorButton.cpp newMapButton.cpp loadMapButton.cpp exportButton.cpp) set(MAP_EDITOR_BUTTONS mapEditorButton.cpp newMapButton.cpp loadMapButton.cpp exportButton.cpp)
set(BUTTONS statsButton.cpp activeStateButton.cpp minimapButton.cpp ${TRADING_BUTTONS} ${OPTIONS_BUTTONS} ${MENU_BUTTONS} ${MAP_EDITOR_BUTTONS} ${UNIT_BUTTONS}) set(BUTTONS statsButton.cpp activeStateButton.cpp minimapButton.cpp ${TRADING_BUTTONS} ${OPTIONS_BUTTONS} ${MENU_BUTTONS} ${MAP_EDITOR_BUTTONS} ${UNIT_BUTTONS})
+8 -4
View File
@@ -243,6 +243,12 @@ namespace battleship{
fc->removeGameObjectFrames(); fc->removeGameObjectFrames();
} }
if(!tradingScreen){
guiTexts = guiManager->getTexts();
guiRects = guiManager->getGuiRectangles();
guiButtons = guiManager->getButtons();
}
renderUnits(); renderUnits();
vector<Unit*> currSelectedUnits = mainPlayer->getSelectedUnits(); vector<Unit*> currSelectedUnits = mainPlayer->getSelectedUnits();
@@ -540,11 +546,9 @@ namespace battleship{
} }
void ActiveGameState::onAction(int bind, bool isPressed) { void ActiveGameState::onAction(int bind, bool isPressed) {
if(tradingScreen || !ConcreteGuiManager::getSingleton()->findClickedButtons().empty()) return;
GameObjectFrameController *ufCtr = GameObjectFrameController::getSingleton(); GameObjectFrameController *ufCtr = GameObjectFrameController::getSingleton();
if(!ConcreteGuiManager::getSingleton()->findClickedButtons().empty())
return;
vector<Unit*> selectedUnits = mainPlayer->getSelectedUnits(); vector<Unit*> selectedUnits = mainPlayer->getSelectedUnits();
switch((Bind)bind){ switch((Bind)bind){
+14 -4
View File
@@ -42,8 +42,10 @@ namespace battleship{
void onRawMouseWheelScroll(bool); void onRawMouseWheelScroll(bool);
inline CursorState getCursorState(){return cursorState;} inline CursorState getCursorState(){return cursorState;}
inline void setCursorState(CursorState cs){this->cursorState = cs;} inline void setCursorState(CursorState cs){this->cursorState = cs;}
inline void addButton(vb01Gui::Button *b){buttons.push_back(b);} inline void addButton(vb01Gui::Button *b){guiButtons.push_back(b);}
inline std::vector<vb01Gui::Button*> getButtons(){return buttons;} inline std::vector<vb01Gui::Button*> getGuiButtons(){return guiButtons;}
inline std::vector<vb01::Node*> getGuiRects(){return guiRects;}
inline std::vector<vb01::Text*> getGuiTexts(){return guiTexts;}
inline Player* getPlayer(){return mainPlayer;} inline Player* getPlayer(){return mainPlayer;}
inline std::vector<Unit*>& getUnitGroup(int i){return unitGroups[i];} inline std::vector<Unit*>& getUnitGroup(int i){return unitGroups[i];}
inline void setBuildableStructSelected(bool bss){this->buildableStructSelected = bss;} inline void setBuildableStructSelected(bool bss){this->buildableStructSelected = bss;}
@@ -51,6 +53,10 @@ namespace battleship{
inline float getDepth(){return depth;} inline float getDepth(){return depth;}
inline void setForceCursorState(bool force){this->forceCursorState = force;} inline void setForceCursorState(bool force){this->forceCursorState = force;}
inline bool isForceCursorState(){return forceCursorState;} inline bool isForceCursorState(){return forceCursorState;}
inline void setTradingScreen(bool ts){this->tradingScreen = ts;}
inline bool isTradingScreen(){return tradingScreen;}
inline void setOfferScreen(bool os){this->offerScreen = os;}
inline bool isOfferScreen(){return offerScreen;}
private: private:
bool selectedUnitsAmongst(std::vector<Unit*>); bool selectedUnitsAmongst(std::vector<Unit*>);
void updateGameObjHoveredOn(); void updateGameObjHoveredOn();
@@ -75,11 +81,13 @@ namespace battleship{
GuiAppState *guiState; GuiAppState *guiState;
std::string unitGuiScreen = ""; std::string unitGuiScreen = "";
GameObject *gameObjHoveredOn = nullptr; GameObject *gameObjHoveredOn = nullptr;
vb01::Node *dragboxNode = nullptr;
vb01::Vector2 clickPoint; vb01::Vector2 clickPoint;
std::vector<Unit*> unitGroups[9], prevSelectedUnits; std::vector<Unit*> unitGroups[9], prevSelectedUnits;
std::vector<Order::Target> targets; std::vector<Order::Target> targets;
std::vector<vb01Gui::Button*> buttons, unitButtons; vb01::Node *dragboxNode = nullptr;
std::vector<vb01::Node*> guiRects;
std::vector<vb01::Text*> guiTexts;
std::vector<vb01Gui::Button*> guiButtons, unitButtons;
bool isSelectionBox = false; bool isSelectionBox = false;
bool shiftPressed = false; bool shiftPressed = false;
bool controlPressed = false; bool controlPressed = false;
@@ -90,6 +98,8 @@ namespace battleship{
bool selectingDestOrient = false; bool selectingDestOrient = false;
bool forceCursorState = false; bool forceCursorState = false;
bool orderPossible = false; bool orderPossible = false;
bool tradingScreen = false;
bool offerScreen = false;
int playerId, zooms = 0; int playerId, zooms = 0;
const int NUM_MAX_ZOOMS = 10; const int NUM_MAX_ZOOMS = 10;
float depth = 1; float depth = 1;
+21
View File
@@ -0,0 +1,21 @@
#include "activeStateBackButton.h"
#include "activeGameState.h"
#include "gameManager.h"
#include <stateManager.h>
namespace battleship{
using namespace std;
using namespace vb01;
using namespace gameBase;
ActiveStateBackButton::ActiveStateBackButton(Vector3 pos, Vector2 size, string name) : BackButton(pos, size, name, "activeGameState.lua"){}
void ActiveStateBackButton::onClick(){
StateManager *stateManager = GameManager::getSingleton()->getStateManager();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
activeState->setTradingScreen(false);
BackButton::onClick();
}
}
+15
View File
@@ -0,0 +1,15 @@
#ifndef ACTIVE_STATE_BACK_BUTTON_H
#define ACTIVE_STATE_BACK_BUTTON_H
#include "backButton.h"
namespace battleship{
class ActiveStateBackButton : public BackButton{
public:
ActiveStateBackButton(vb01::Vector3, vb01::Vector2, std::string);
void onClick();
private:
};
}
#endif
+19 -6
View File
@@ -18,15 +18,28 @@ namespace battleship{
using namespace vb01Gui; using namespace vb01Gui;
using namespace gameBase; using namespace gameBase;
ActiveStateButton::ActiveStateButton(Vector3 pos, Vector2 size, string gs, string name, string fontPath, int trigger, string imagePath) : Button(pos, size, name, fontPath, trigger, true, imagePath), guiScreen(gs){ ActiveStateButton::ActiveStateButton(Vector3 pos, Vector2 size, string gs, string name, string fontPath, int trigger, string imagePath) :
Button(pos, size, name, fontPath, trigger, true, imagePath), guiScreen(gs){}
void ActiveStateButton::onClick(){
StateManager *stateManager = GameManager::getSingleton()->getStateManager(); StateManager *stateManager = GameManager::getSingleton()->getStateManager();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE); ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
if(activeState) vector<Button*> buttons = activeState->getGuiButtons();
activeState->addButton(this); buttons.push_back(this);
}
void ActiveStateButton::onClick(){ vector<Node*> rects = activeState->getGuiRects();
ConcreteGuiManager::getSingleton()->parseLuaScript(guiScreen); vector<Text*> texts = activeState->getGuiTexts();
ConcreteGuiManager::getSingleton()->readLuaScreenScript(
guiScreen,
buttons,
vector<Listbox*>{},
vector<Checkbox*>{},
vector<Slider*>{},
vector<Textbox*>{},
rects,
texts
);
} }
} }
+3 -3
View File
@@ -36,6 +36,7 @@
#include "orderButton.h" #include "orderButton.h"
#include "stateToggleButton.h" #include "stateToggleButton.h"
#include "minimapButton.h" #include "minimapButton.h"
#include "activeStateBackButton.h"
namespace battleship{ namespace battleship{
using namespace std; using namespace std;
@@ -207,9 +208,8 @@ namespace battleship{
case SELL_RESEARCH: case SELL_RESEARCH:
button = new TradeButton(pos, size, name, (int)guiTable["trigger"], imagePath, (int)SOL_LUA_STATE["UnitId"]["TRADE_CENTER"], TradeButton::Type::SELL_RESEARCH); button = new TradeButton(pos, size, name, (int)guiTable["trigger"], imagePath, (int)SOL_LUA_STATE["UnitId"]["TRADE_CENTER"], TradeButton::Type::SELL_RESEARCH);
break; break;
case ACTIVE_GAME_STATE: case ACTIVE_STATE_BACK:
guiScreen = guiTable["guiScreen"]; button = new ActiveStateBackButton(pos, size, name);
button = new ActiveStateButton(pos, size, guiScreen, name, fontBasePath + "batang.ttf", (int)guiTable["trigger"], imagePath);
break; break;
case PLAYER_TRADE: case PLAYER_TRADE:
guiScreen = guiTable["guiScreen"]; guiScreen = guiTable["guiScreen"];
+2 -2
View File
@@ -45,14 +45,14 @@ namespace battleship{
SELL_REFINEDS, SELL_REFINEDS,
BUY_RESEARCH, BUY_RESEARCH,
SELL_RESEARCH, SELL_RESEARCH,
ACTIVE_GAME_STATE, ACTIVE_STATE_BACK,
PLAYER_TRADE, PLAYER_TRADE,
TRADING_SCREEN, TRADING_SCREEN,
TRADE_OFFER, TRADE_OFFER,
RESOURCE_AMMOUNT, RESOURCE_AMMOUNT,
UNIT_STATE, UNIT_STATE,
ORDER, ORDER,
MINIMAP MINIMAP,
}; };
enum ListboxType { enum ListboxType {
CONTROLS, CONTROLS,
+2 -2
View File
@@ -101,13 +101,13 @@ namespace battleship{
if (!paused) { if (!paused) {
gm->getStateManager()->dettachAppState(activeState); gm->getStateManager()->dettachAppState(activeState);
guiManager->readLuaScreenScript("gamePaused.lua", activeState->getButtons()); guiManager->readLuaScreenScript("gamePaused.lua", activeState->getGuiButtons());
} }
else { else {
for(string f : configData::scripts) for(string f : configData::scripts)
generateView().script_file(gm->getPath() + f); generateView().script_file(gm->getPath() + f);
guiManager->readLuaScreenScript("inGame.lua", activeState->getButtons()); guiManager->readLuaScreenScript("inGame.lua", activeState->getGuiButtons());
sol::state_view SOL_LUA_VIEW = generateView(); sol::state_view SOL_LUA_VIEW = generateView();
string gop = SOL_LUA_VIEW["gameObjPrefix"], vfxp = SOL_LUA_VIEW["vfxPrefix"]; string gop = SOL_LUA_VIEW["gameObjPrefix"], vfxp = SOL_LUA_VIEW["vfxPrefix"];
AssetManager::getSingleton()->load(gm->getPath() + gop, true); AssetManager::getSingleton()->load(gm->getPath() + gop, true);
+9 -12
View File
@@ -16,10 +16,15 @@ namespace battleship{
PlayerTradeButton::PlayerTradeButton(Vector3 pos, Vector2 size, string gs, string name, int trigger, string imagePath) : ActiveStateButton(pos, size, gs, name, GameManager::getSingleton()->getPath() + "Fonts/batang.ttf", trigger, imagePath){} PlayerTradeButton::PlayerTradeButton(Vector3 pos, Vector2 size, string gs, string name, int trigger, string imagePath) : ActiveStateButton(pos, size, gs, name, GameManager::getSingleton()->getPath() + "Fonts/batang.ttf", trigger, imagePath){}
void PlayerTradeButton::onClick(){ void PlayerTradeButton::onClick(){
ActiveStateButton::onClick();
StateManager *stateManager = GameManager::getSingleton()->getStateManager(); StateManager *stateManager = GameManager::getSingleton()->getStateManager();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE); ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
if(activeState->isTradingScreen() && !activeState->isOfferScreen()) return;
else if(!activeState->isTradingScreen()) activeState->setTradingScreen(true);
else if(activeState->isOfferScreen()) activeState->setOfferScreen(false);
ActiveStateButton::onClick();
Player *mainPlayer = activeState->getPlayer(); Player *mainPlayer = activeState->getPlayer();
Game *game = Game::getSingleton(); Game *game = Game::getSingleton();
@@ -28,18 +33,11 @@ namespace battleship{
sol::state_view SOL_LUA_VIEW = generateView(); sol::state_view SOL_LUA_VIEW = generateView();
for(int i = 0, lineId = 0; i < players.size(); i++){ for(int i = 0, lineId = 0; i < players.size(); i++){
if(players[i] != mainPlayer){ if(players[i] == mainPlayer) continue;
vector<Button*> buttons = guiManager->getButtons();
vector<Listbox*> listboxes = guiManager->getListboxes();
vector<Checkbox*> checkboxes = guiManager->getCheckboxes();
vector<Slider*> sliders = guiManager->getSliders();
vector<Textbox*> textboxes = guiManager->getTextboxes();
vector<Node*> guiRects = guiManager->getGuiRectangles();
vector<Text*> texts = guiManager->getTexts();
SOL_LUA_VIEW.script("lineId = " + to_string(lineId)); SOL_LUA_VIEW.script("lineId = " + to_string(lineId));
SOL_LUA_VIEW.script("playerId = " + to_string(i)); SOL_LUA_VIEW.script("playerId = " + to_string(i));
guiManager->readLuaScreenScript("tradingPlayerGuiTray.lua", buttons, listboxes, checkboxes, sliders, textboxes, guiRects, texts); guiManager->parseLuaScript("tradingPlayerGuiTray.lua");
vector<Button*> guiButtons = guiManager->getButtons(); vector<Button*> guiButtons = guiManager->getButtons();
@@ -64,4 +62,3 @@ namespace battleship{
} }
} }
} }
}
+3 -1
View File
@@ -27,9 +27,11 @@ namespace battleship{
ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton(); ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton();
Game *game = Game::getSingleton(); Game *game = Game::getSingleton();
if(listbox->getNumLines() > 0){
StateManager *stateManager = GameManager::getSingleton()->getStateManager(); StateManager *stateManager = GameManager::getSingleton()->getStateManager();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE); ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
activeState->setOfferScreen(true);
if(listbox->getNumLines() > 0){
Player *mainPlayer = activeState->getPlayer(); Player *mainPlayer = activeState->getPlayer();
TradeOffer *tradeOffer = game->findTradeOffers(mainPlayer, game->getPlayer(playerId))[listbox->getSelectedOption()]; TradeOffer *tradeOffer = game->findTradeOffers(mainPlayer, game->getPlayer(playerId))[listbox->getSelectedOption()];