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,
BUY_RESEARCH = 28,
SELL_RESEARCH = 29,
ACTIVE_GAME_STATE = 30,
ACTIVE_STATE_BACK = 30,
PLAYER_TRADE = 31,
TRADING_SCREEN = 32,
TRADE_OFFER = 33,
+1 -2
View File
@@ -16,9 +16,8 @@ gui = {
},
{
guiType = GuiType.BUTTON,
buttonType = ButtonType.ACTIVE_GAME_STATE,
buttonType = ButtonType.ACTIVE_STATE_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},
size = buttonSize,
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(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(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})
+8 -4
View File
@@ -243,6 +243,12 @@ namespace battleship{
fc->removeGameObjectFrames();
}
if(!tradingScreen){
guiTexts = guiManager->getTexts();
guiRects = guiManager->getGuiRectangles();
guiButtons = guiManager->getButtons();
}
renderUnits();
vector<Unit*> currSelectedUnits = mainPlayer->getSelectedUnits();
@@ -540,11 +546,9 @@ namespace battleship{
}
void ActiveGameState::onAction(int bind, bool isPressed) {
if(tradingScreen || !ConcreteGuiManager::getSingleton()->findClickedButtons().empty()) return;
GameObjectFrameController *ufCtr = GameObjectFrameController::getSingleton();
if(!ConcreteGuiManager::getSingleton()->findClickedButtons().empty())
return;
vector<Unit*> selectedUnits = mainPlayer->getSelectedUnits();
switch((Bind)bind){
+14 -4
View File
@@ -42,8 +42,10 @@ namespace battleship{
void onRawMouseWheelScroll(bool);
inline CursorState getCursorState(){return cursorState;}
inline void setCursorState(CursorState cs){this->cursorState = cs;}
inline void addButton(vb01Gui::Button *b){buttons.push_back(b);}
inline std::vector<vb01Gui::Button*> getButtons(){return buttons;}
inline void addButton(vb01Gui::Button *b){guiButtons.push_back(b);}
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 std::vector<Unit*>& getUnitGroup(int i){return unitGroups[i];}
inline void setBuildableStructSelected(bool bss){this->buildableStructSelected = bss;}
@@ -51,6 +53,10 @@ namespace battleship{
inline float getDepth(){return depth;}
inline void setForceCursorState(bool force){this->forceCursorState = force;}
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:
bool selectedUnitsAmongst(std::vector<Unit*>);
void updateGameObjHoveredOn();
@@ -75,11 +81,13 @@ namespace battleship{
GuiAppState *guiState;
std::string unitGuiScreen = "";
GameObject *gameObjHoveredOn = nullptr;
vb01::Node *dragboxNode = nullptr;
vb01::Vector2 clickPoint;
std::vector<Unit*> unitGroups[9], prevSelectedUnits;
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 shiftPressed = false;
bool controlPressed = false;
@@ -90,6 +98,8 @@ namespace battleship{
bool selectingDestOrient = false;
bool forceCursorState = false;
bool orderPossible = false;
bool tradingScreen = false;
bool offerScreen = false;
int playerId, zooms = 0;
const int NUM_MAX_ZOOMS = 10;
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 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();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
if(activeState)
activeState->addButton(this);
}
vector<Button*> buttons = activeState->getGuiButtons();
buttons.push_back(this);
void ActiveStateButton::onClick(){
ConcreteGuiManager::getSingleton()->parseLuaScript(guiScreen);
vector<Node*> rects = activeState->getGuiRects();
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 "stateToggleButton.h"
#include "minimapButton.h"
#include "activeStateBackButton.h"
namespace battleship{
using namespace std;
@@ -207,9 +208,8 @@ namespace battleship{
case SELL_RESEARCH:
button = new TradeButton(pos, size, name, (int)guiTable["trigger"], imagePath, (int)SOL_LUA_STATE["UnitId"]["TRADE_CENTER"], TradeButton::Type::SELL_RESEARCH);
break;
case ACTIVE_GAME_STATE:
guiScreen = guiTable["guiScreen"];
button = new ActiveStateButton(pos, size, guiScreen, name, fontBasePath + "batang.ttf", (int)guiTable["trigger"], imagePath);
case ACTIVE_STATE_BACK:
button = new ActiveStateBackButton(pos, size, name);
break;
case PLAYER_TRADE:
guiScreen = guiTable["guiScreen"];
+2 -2
View File
@@ -45,14 +45,14 @@ namespace battleship{
SELL_REFINEDS,
BUY_RESEARCH,
SELL_RESEARCH,
ACTIVE_GAME_STATE,
ACTIVE_STATE_BACK,
PLAYER_TRADE,
TRADING_SCREEN,
TRADE_OFFER,
RESOURCE_AMMOUNT,
UNIT_STATE,
ORDER,
MINIMAP
MINIMAP,
};
enum ListboxType {
CONTROLS,
+2 -2
View File
@@ -101,13 +101,13 @@ namespace battleship{
if (!paused) {
gm->getStateManager()->dettachAppState(activeState);
guiManager->readLuaScreenScript("gamePaused.lua", activeState->getButtons());
guiManager->readLuaScreenScript("gamePaused.lua", activeState->getGuiButtons());
}
else {
for(string f : configData::scripts)
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();
string gop = SOL_LUA_VIEW["gameObjPrefix"], vfxp = SOL_LUA_VIEW["vfxPrefix"];
AssetManager::getSingleton()->load(gm->getPath() + gop, true);
+25 -28
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){}
void PlayerTradeButton::onClick(){
ActiveStateButton::onClick();
StateManager *stateManager = GameManager::getSingleton()->getStateManager();
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();
Game *game = Game::getSingleton();
@@ -28,40 +33,32 @@ namespace battleship{
sol::state_view SOL_LUA_VIEW = generateView();
for(int i = 0, lineId = 0; i < players.size(); i++){
if(players[i] != mainPlayer){
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();
if(players[i] == mainPlayer) continue;
SOL_LUA_VIEW.script("lineId = " + to_string(lineId));
SOL_LUA_VIEW.script("playerId = " + to_string(i));
guiManager->readLuaScreenScript("tradingPlayerGuiTray.lua", buttons, listboxes, checkboxes, sliders, textboxes, guiRects, texts);
SOL_LUA_VIEW.script("lineId = " + to_string(lineId));
SOL_LUA_VIEW.script("playerId = " + to_string(i));
guiManager->parseLuaScript("tradingPlayerGuiTray.lua");
vector<Button*> guiButtons = guiManager->getButtons();
vector<Button*> guiButtons = guiManager->getButtons();
for(int j = guiButtons.size() - 1; j > 0; j--)
if(guiButtons[j]->getName() == "Offer")
((OfferButton*)guiButtons[j])->setPlayerId(i);
for(int j = guiButtons.size() - 1; j > 0; j--)
if(guiButtons[j]->getName() == "Offer")
((OfferButton*)guiButtons[j])->setPlayerId(i);
int numListboxes = guiManager->getListboxes().size();
Listbox *listbox = guiManager->getListboxes()[numListboxes - 1];
int numOffers = game->findTradeOffers(mainPlayer, players[i]).size();
int numListboxes = guiManager->getListboxes().size();
Listbox *listbox = guiManager->getListboxes()[numListboxes - 1];
int numOffers = game->findTradeOffers(mainPlayer, players[i]).size();
for(int j = 0; j < numOffers; j++)
listbox->addLine(L"TRADE_OFFER_" + to_wstring(j));
for(int j = 0; j < numOffers; j++)
listbox->addLine(L"TRADE_OFFER_" + to_wstring(j));
if(listbox->getNumLines() < listbox->getMaxDisplay())
listbox->setMaxDisplay(listbox->getNumLines());
if(listbox->getNumLines() < listbox->getMaxDisplay())
listbox->setMaxDisplay(listbox->getNumLines());
int numTexts = guiManager->getTexts().size();
guiManager->getTexts()[numTexts - 1]->setText(stringToWstring(players[i]->getName()));
int numTexts = guiManager->getTexts().size();
guiManager->getTexts()[numTexts - 1]->setText(stringToWstring(players[i]->getName()));
lineId++;
}
lineId++;
}
}
}
+4 -2
View File
@@ -27,9 +27,11 @@ namespace battleship{
ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton();
Game *game = Game::getSingleton();
StateManager *stateManager = GameManager::getSingleton()->getStateManager();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
activeState->setOfferScreen(true);
if(listbox->getNumLines() > 0){
StateManager *stateManager = GameManager::getSingleton()->getStateManager();
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
Player *mainPlayer = activeState->getPlayer();
TradeOffer *tradeOffer = game->findTradeOffers(mainPlayer, game->getPlayer(playerId))[listbox->getSelectedOption()];