From abb5e91292a42c76adb7377e6a8e1a6494306fc1 Mon Sep 17 00:00:00 2001 From: devZoGok Date: Sat, 19 Apr 2025 11:10:10 +0300 Subject: [PATCH] refactored trade offers --- Assets/Scripts/Gui/tradingHub.lua | 3 ++ Assets/Scripts/Gui/tradingPlayerGuiTray.lua | 4 +-- Assets/Scripts/Gui/tradingScreen.lua | 10 +----- game.cpp | 10 ------ game.h | 3 -- offerButton.cpp | 19 +++++------ player.cpp | 35 ++++++++++++++++----- player.h | 7 ++++- playerTradeButton.cpp | 3 +- tradeOffer.h | 23 +++++++------- tradingScreenButton.cpp | 16 +++++----- 11 files changed, 71 insertions(+), 62 deletions(-) diff --git a/Assets/Scripts/Gui/tradingHub.lua b/Assets/Scripts/Gui/tradingHub.lua index 945dfba..552020e 100644 --- a/Assets/Scripts/Gui/tradingHub.lua +++ b/Assets/Scripts/Gui/tradingHub.lua @@ -7,6 +7,9 @@ HubMargin = {top = 10, left = 10, right = 10, bottom = 10} buttonSize = {x = 100, y = 20} textboxSize = {x = 200, y = 25} +warIcon = 'Icons/PlayerStates/war.png' +allianceIcon = 'Icons/PlayerStates/alliance.png' + gui = { { guiType = GuiType.GUI_RECTANGLE, diff --git a/Assets/Scripts/Gui/tradingPlayerGuiTray.lua b/Assets/Scripts/Gui/tradingPlayerGuiTray.lua index dccc609..79098c5 100644 --- a/Assets/Scripts/Gui/tradingPlayerGuiTray.lua +++ b/Assets/Scripts/Gui/tradingPlayerGuiTray.lua @@ -4,8 +4,6 @@ buttonSize = {x = 100, y = 20} textboxSize = {x = 200, y = 20} height = HubPos.y + HubMargin.top + lineId * 30 -warIcon = 'Icons/PlayerStates/war.png' -allianceIcon = 'Icons/PlayerStates/alliance.png' gui = { { @@ -23,7 +21,7 @@ gui = { guiType = GuiType.GUI_RECTANGLE, pos = {x = HubPos.x + HubMargin.left + 100, y = height, z = .11}, size = {x = 50, y = 50}, - imagePath = warIcon + imagePath = relationsIcon }, { pos = {x = HubPos.x + HubMargin.left + 200, y = height + 25, z = .11}, diff --git a/Assets/Scripts/Gui/tradingScreen.lua b/Assets/Scripts/Gui/tradingScreen.lua index 90aa351..2fab363 100644 --- a/Assets/Scripts/Gui/tradingScreen.lua +++ b/Assets/Scripts/Gui/tradingScreen.lua @@ -111,21 +111,13 @@ gui = { createResourceTrayGui(false, 2, ResourceTrayGuiId.TEXTBOX), createResourceTrayGui(false, 2, ResourceTrayGuiId.INCREMENT), createResourceTrayGui(false, 2, ResourceTrayGuiId.DECREMENT), - createResourceTrayGui(true, 3, ResourceTrayGuiId.ICON, IconPath.TIME), - createResourceTrayGui(true, 3, ResourceTrayGuiId.TEXTBOX), - createResourceTrayGui(true, 3, ResourceTrayGuiId.INCREMENT), - createResourceTrayGui(true, 3, ResourceTrayGuiId.DECREMENT), - createResourceTrayGui(false, 3, ResourceTrayGuiId.ICON, IconPath.TIME), - createResourceTrayGui(false, 3, ResourceTrayGuiId.TEXTBOX), - createResourceTrayGui(false, 3, ResourceTrayGuiId.INCREMENT), - createResourceTrayGui(false, 3, ResourceTrayGuiId.DECREMENT), { guiType = GuiType.BUTTON, buttonType = ButtonType.PLAYER_TRADE, name = 'Back', guiScreen = 'tradingHub.lua', - pos = {x = HubPos.x + HubSize.x - 2 * buttonSize.x - HubMargin.right, y = HubPos.y + HubSize.y - buttonSize.y - HubMargin.bottom, z = .2}, + pos = {x = HubPos.x + HubSize.x - 3 * buttonSize.x - HubMargin.right, y = HubPos.y + HubSize.y - buttonSize.y - HubMargin.bottom, z = .2}, size = buttonSize, trigger = 10 }, diff --git a/game.cpp b/game.cpp index f37340a..127d761 100644 --- a/game.cpp +++ b/game.cpp @@ -276,14 +276,4 @@ namespace battleship{ return false; } - - vector Game::findTradeOffers(Player *pl1, Player *pl2){ - vector offers; - - for(TradeOffer *to : tradeOffers) - if((to->initPlayer == pl1 || to->recPlayer == pl1) && (to->initPlayer == pl2 || to->recPlayer == pl2)) - offers.push_back(to); - - return offers; - } } diff --git a/game.h b/game.h index fb34af6..38d077b 100644 --- a/game.h +++ b/game.h @@ -27,9 +27,7 @@ namespace battleship{ void initTechnologies(); float calcAbilFromTech(Ability::Type, std::vector, int, int); bool isUnitUnlocked(std::vector, int); - std::vector findTradeOffers(Player*, Player*); inline void setDebug(bool d){this->debug = d;} - inline void addTradeOffer(TradeOffer *to){tradeOffers.push_back(to);} inline void addPlayer(Player *pl){players.push_back(pl);} inline bool isDebug(){return debug;} inline std::vector& getPlayers(){return players;} @@ -46,7 +44,6 @@ namespace battleship{ std::vector technologies; std::vector abilities; std::vector players; - std::vector tradeOffers; }; } diff --git a/offerButton.cpp b/offerButton.cpp index 7fae80f..1b764ac 100644 --- a/offerButton.cpp +++ b/offerButton.cpp @@ -16,24 +16,25 @@ namespace battleship{ using namespace vb01Gui; using namespace gameBase; - OfferButton::OfferButton(Vector3 pos, Vector2 size, int plId, string name, int trigger, string imagePath) : Button(pos, size, name, GameManager::getSingleton()->getPath() + "Fonts/batang.ttf", trigger, true, imagePath), playerId(plId){} + OfferButton::OfferButton(Vector3 pos, Vector2 size, int plId, string name, int trigger, string imagePath) : + Button(pos, size, name, GameManager::getSingleton()->getPath() + "Fonts/batang.ttf", trigger, true, imagePath), + playerId(plId){} void OfferButton::onClick(){ ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton(); vector textboxes = guiManager->getTextboxes(); - int recRef = (textboxes[0]->getText() == L"" ? 0 : stoi(textboxes[0]->getText())); - int initRef = (textboxes[1]->getText() == L"" ? 0 : stoi(textboxes[1]->getText())); - int recWealth = (textboxes[2]->getText() == L"" ? 0 : stoi(textboxes[2]->getText())); - int initWealth = (textboxes[3]->getText() == L"" ? 0 : stoi(textboxes[3]->getText())); - int recRes = (textboxes[4]->getText() == L"" ? 0 : stoi(textboxes[4]->getText())); - int initRes = (textboxes[5]->getText() == L"" ? 0 : stoi(textboxes[5]->getText())); + int buyRef = (textboxes[0]->getText() == L"" ? 0 : stoi(textboxes[0]->getText())); + int sellRef = (textboxes[1]->getText() == L"" ? 0 : stoi(textboxes[1]->getText())); + int buyWealth = (textboxes[2]->getText() == L"" ? 0 : stoi(textboxes[2]->getText())); + int sellWealth = (textboxes[3]->getText() == L"" ? 0 : stoi(textboxes[3]->getText())); + int buyRes = (textboxes[4]->getText() == L"" ? 0 : stoi(textboxes[4]->getText())); + int sellRes = (textboxes[5]->getText() == L"" ? 0 : stoi(textboxes[5]->getText())); StateManager *stateManager = GameManager::getSingleton()->getStateManager(); ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE); Player *mainPlayer = activeState->getPlayer(); - Game *game = Game::getSingleton(); - game->addTradeOffer(new TradeOffer(mainPlayer, game->getPlayer(playerId), initRef, recRef, initWealth, recWealth, initRes, recRes)); + mainPlayer->addTradeOffer(Game::getSingleton()->getPlayer(playerId), new TradeOffer(true, true, buyRef, sellRef, buyWealth, sellWealth, buyRes, sellRes)); } } diff --git a/player.cpp b/player.cpp index 95d51ad..968ac45 100755 --- a/player.cpp +++ b/player.cpp @@ -1,9 +1,11 @@ #include +#include #include "player.h" +#include "game.h" #include "structure.h" #include "projectile.h" -#include "stateManager.h" +#include "tradeOffer.h" #include "activeGameState.h" #include "resourceDeposit.h" @@ -213,11 +215,30 @@ namespace battleship{ } } - void Player::build(int id, Vector3 pos, Quaternion rot, bool additionalOrder){ - /* - Unit *buildStruct = GameObjectFactory::createUnit(this, id, pos, rot); - addUnit(buildStruct); - issueOrder(Order::TYPE::BUILD, vector{Order::Target(buildStruct)}, additionalOrder); - */ + void Player::initTradeOffersVec(){ + vector players = Game::getSingleton()->getPlayers(); + + for(Player *pl : players){ + if(this == pl) continue; + + if(team == pl->getTeam()) + tradeOffers.push_back(make_pair(pl, vector{})); + } + } + + void Player::addTradeOffer(Player *player, TradeOffer *offer){ + if(tradeOffers.empty()) initTradeOffersVec(); + + for(pair> &offers : tradeOffers) + if(offers.first == player) + offers.second.push_back(offer); + } + + vector Player::getTradeOffers(Player *player){ + for(pair> offers : tradeOffers) + if(offers.first == player) + return offers.second; + + return vector{}; } } diff --git a/player.h b/player.h index c33b0c4..26791bc 100755 --- a/player.h +++ b/player.h @@ -2,6 +2,7 @@ #define PLAYER_H #include +#include #include "gameManager.h" #include "trader.h" @@ -11,6 +12,7 @@ namespace battleship{ class ResourceDeposit; class Projectile; class Unit; + struct TradeOffer; enum class ResourceType{REFINEDS, WEALTH, RESEARCH}; @@ -32,7 +34,8 @@ namespace battleship{ void addTechnology(int); int getResource(ResourceType); void updateResource(ResourceType, int, bool); - void build(int, vb01::Vector3, vb01::Quaternion, bool); + void addTradeOffer(Player*, TradeOffer*); + std::vector getTradeOffers(Player*); inline Trader* getTrader(){return trader;} inline void deselectUnits(){selectedUnits.clear();} inline Unit* getSelectedUnit(int id){return selectedUnits[id];} @@ -87,8 +90,10 @@ namespace battleship{ std::vector resourceDeposits; vb01::Vector3 color; vb01::Material *colorMaterial = nullptr; + std::vector>> tradeOffers; int getOrderLineId(Order::TYPE, vb01::Vector3, vb01::Vector3); + void initTradeOffersVec(); }; } diff --git a/playerTradeButton.cpp b/playerTradeButton.cpp index c5a16dd..547a15a 100644 --- a/playerTradeButton.cpp +++ b/playerTradeButton.cpp @@ -37,6 +37,7 @@ namespace battleship{ SOL_LUA_VIEW.script("lineId = " + to_string(lineId)); SOL_LUA_VIEW.script("playerId = " + to_string(i)); + SOL_LUA_VIEW.script(string("relationsIcon = ") + (players[i]->getTeam() == mainPlayer->getTeam() ? "allianceIcon" : "warIcon")); guiManager->parseLuaScript("tradingPlayerGuiTray.lua"); vector guiButtons = guiManager->getButtons(); @@ -47,7 +48,7 @@ namespace battleship{ int numListboxes = guiManager->getListboxes().size(); Listbox *listbox = guiManager->getListboxes()[numListboxes - 1]; - int numOffers = game->findTradeOffers(mainPlayer, players[i]).size(); + int numOffers = mainPlayer->getTradeOffers(players[i]).size(); for(int j = 0; j < numOffers; j++) listbox->addLine(L"TRADE_OFFER_" + to_wstring(j)); diff --git a/tradeOffer.h b/tradeOffer.h index a0797d2..f593db3 100644 --- a/tradeOffer.h +++ b/tradeOffer.h @@ -5,19 +5,18 @@ namespace battleship{ struct TradeOffer{ - Player *initPlayer = nullptr, *recPlayer = nullptr; - int initRefineds = 0, recRefineds = 0, initWealth = 0, recWealth = 0, initResearch = 0, recResearch = 0; - bool initPlAgreed = true, recPlAgreed = false; + bool sellerAggrees = true, sellerDelivers = true, buyerAggrees = false, buyerDelivers = false; + int sellRefineds = 0, buyRefineds = 0, sellWealth = 0, buyWealth = 0, sellResearch = 0, buyResearch = 0; - TradeOffer(Player *ip, Player *rp, int ir, int rr, int iw, int rw, int it, int rt) : - initPlayer(ip), - recPlayer(rp), - initRefineds(ir), - recRefineds(rr), - initWealth(iw), - recWealth(rw), - initResearch(it), - recResearch(rr) + TradeOffer(bool bd, bool sd, int br, int sr, int bw, int sw, int bt, int st) : + buyerDelivers(bd), + sellerDelivers(sd), + buyRefineds(br), + buyWealth(bw), + buyResearch(bt), + sellRefineds(sr), + sellWealth(sw), + sellResearch(st) {} }; } diff --git a/tradingScreenButton.cpp b/tradingScreenButton.cpp index 906204a..68714ec 100644 --- a/tradingScreenButton.cpp +++ b/tradingScreenButton.cpp @@ -24,6 +24,8 @@ namespace battleship{ {} void TradingScreenButton::onClick(){ + generateView().script("playerId = " + to_string(playerId)); + ConcreteGuiManager *guiManager = ConcreteGuiManager::getSingleton(); Game *game = Game::getSingleton(); @@ -34,17 +36,17 @@ namespace battleship{ if(listbox->getNumLines() > 0){ Player *mainPlayer = activeState->getPlayer(); - TradeOffer *tradeOffer = game->findTradeOffers(mainPlayer, game->getPlayer(playerId))[listbox->getSelectedOption()]; + TradeOffer *tradeOffer = mainPlayer->getTradeOffers(game->getPlayer(playerId))[listbox->getSelectedOption()]; ActiveStateButton::onClick(); vector textboxes = guiManager->getTextboxes(); - textboxes[0]->setEntry(to_wstring(tradeOffer->recRefineds)); - textboxes[1]->setEntry(to_wstring(tradeOffer->initRefineds)); - textboxes[2]->setEntry(to_wstring(tradeOffer->recWealth)); - textboxes[3]->setEntry(to_wstring(tradeOffer->initWealth)); - textboxes[4]->setEntry(to_wstring(tradeOffer->recResearch)); - textboxes[5]->setEntry(to_wstring(tradeOffer->initResearch)); + textboxes[0]->setEntry(to_wstring(tradeOffer->buyRefineds)); + textboxes[1]->setEntry(to_wstring(tradeOffer->sellRefineds)); + textboxes[2]->setEntry(to_wstring(tradeOffer->buyWealth)); + textboxes[3]->setEntry(to_wstring(tradeOffer->sellWealth)); + textboxes[4]->setEntry(to_wstring(tradeOffer->buyResearch)); + textboxes[5]->setEntry(to_wstring(tradeOffer->sellResearch)); } else ActiveStateButton::onClick();