mirror of
https://github.com/ApfelTeeSaft/PlanetFleet.git
synced 2026-08-26 19:33:38 +00:00
using a generic number of resource types
ability to order to collect resources from buyers
This commit is contained in:
+33
-14
@@ -148,14 +148,16 @@ namespace battleship{
|
|||||||
}
|
}
|
||||||
|
|
||||||
vector<TradeOffer*> offers = (gameObjHoveredOn && alliedGameObj ? mainPlayer->getTradeOffers(gameObjHoveredOn->getPlayer()) : vector<TradeOffer*>{});
|
vector<TradeOffer*> offers = (gameObjHoveredOn && alliedGameObj ? mainPlayer->getTradeOffers(gameObjHoveredOn->getPlayer()) : vector<TradeOffer*>{});
|
||||||
bool sellRefs = false, sellWealth = false, sellTech = false;
|
bool tradeResource[NUM_RESOURCES][2], trade = false;
|
||||||
|
|
||||||
for(TradeOffer *offer : offers){
|
for(TradeOffer *offer : offers)
|
||||||
if(!sellRefs && offer->sellRefineds > 0) sellRefs = true;
|
for(int i = 0; i < NUM_RESOURCES; i++)
|
||||||
if(!sellWealth && offer->sellWealth > 0) sellWealth = true;
|
for(int j = 0; j < 2; j++){
|
||||||
if(!sellTech && offer->sellResearch > 0) sellTech = true;
|
if(!tradeResource[i][j] && offer->tradeResources[i][j] > 0){
|
||||||
|
tradeResource[i][j] = true;
|
||||||
if(sellRefs && sellWealth && sellTech) break;
|
trade = true;
|
||||||
|
}
|
||||||
|
else tradeResource[i][j] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int objClass = (gameObjUnit ? int(((Unit*)gameObjHoveredOn)->getUnitClass()) : -1);
|
int objClass = (gameObjUnit ? int(((Unit*)gameObjHoveredOn)->getUnitClass()) : -1);
|
||||||
@@ -176,21 +178,34 @@ namespace battleship{
|
|||||||
orderPossible = (((Extractor*)gameObjHoveredOn)->getDeposit()->getAmmount() > 0);
|
orderPossible = (((Extractor*)gameObjHoveredOn)->getDeposit()->getAmmount() > 0);
|
||||||
cursorState = CursorState::SUPPLY;
|
cursorState = CursorState::SUPPLY;
|
||||||
}
|
}
|
||||||
else if(roverSelected && (tradeCenter || refinery || lab) && (ownGameObj || (alliedGameObj && (sellRefs || sellWealth || sellTech)))){
|
else if(roverSelected && (tradeCenter || refinery || lab) && (ownGameObj || (alliedGameObj && trade))){
|
||||||
bool canLoad = (rover && rover->calcTotalLoad() < rover->getCapacity());
|
bool canLoad = (rover && rover->calcTotalLoad() < rover->getCapacity());
|
||||||
|
bool tradeRes;
|
||||||
|
int resId;
|
||||||
|
|
||||||
switch((UnitClass)objClass){
|
switch((UnitClass)objClass){
|
||||||
case UnitClass::TRADE_CENTER:
|
case UnitClass::TRADE_CENTER:
|
||||||
orderPossible = ((ownGameObj && canLoad) || (alliedGameObj && sellWealth && rover->getLoad((int)ResourceType::WEALTH) > 0));
|
tradeRes = (tradeResource[(int)ResourceType::WEALTH][0] || tradeResource[(int)ResourceType::WEALTH][1]);
|
||||||
|
resId = (int)ResourceType::WEALTH;
|
||||||
break;
|
break;
|
||||||
case UnitClass::REFINERY:
|
case UnitClass::REFINERY:
|
||||||
orderPossible = ((ownGameObj && canLoad) || (alliedGameObj && sellRefs && rover->getLoad((int)ResourceType::REFINEDS) > 0));
|
tradeRes = (tradeResource[(int)ResourceType::REFINEDS][0] || tradeResource[(int)ResourceType::REFINEDS][1]);
|
||||||
|
resId = (int)ResourceType::REFINEDS;
|
||||||
break;
|
break;
|
||||||
case UnitClass::LAB:
|
case UnitClass::LAB:
|
||||||
orderPossible = ((ownGameObj && canLoad) || (alliedGameObj && sellTech && rover->getLoad((int)ResourceType::RESEARCH) > 0));
|
tradeRes = (tradeResource[(int)ResourceType::RESEARCH][0] || tradeResource[(int)ResourceType::RESEARCH][1]);
|
||||||
|
resId = (int)ResourceType::RESEARCH;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
orderPossible = (
|
||||||
|
(ownGameObj && canLoad) ||
|
||||||
|
(
|
||||||
|
alliedGameObj &&
|
||||||
|
tradeRes &&
|
||||||
|
(rover->calcTotalLoad() < rover->getCapacity() || rover->getLoad(resId) > 0)
|
||||||
|
)
|
||||||
|
);
|
||||||
cursorState = CursorState::SUPPLY;
|
cursorState = CursorState::SUPPLY;
|
||||||
}
|
}
|
||||||
else if(gameObjUnit && !(ownGameObj || alliedGameObj))
|
else if(gameObjUnit && !(ownGameObj || alliedGameObj))
|
||||||
@@ -202,11 +217,15 @@ namespace battleship{
|
|||||||
if(cursorState == CursorState::GARRISON)
|
if(cursorState == CursorState::GARRISON)
|
||||||
orderPossible = (ownGameObj && gameObjTransport && canGarrison);
|
orderPossible = (ownGameObj && gameObjTransport && canGarrison);
|
||||||
else if(cursorState == CursorState::SUPPLY){
|
else if(cursorState == CursorState::SUPPLY){
|
||||||
|
bool tradeRefs = (tradeResource[(int)ResourceType::REFINEDS][0] || tradeResource[(int)ResourceType::REFINEDS][1]);
|
||||||
|
bool tradeWealth = (tradeResource[(int)ResourceType::WEALTH][0] || tradeResource[(int)ResourceType::WEALTH][1]);
|
||||||
|
bool tradeTech = (tradeResource[(int)ResourceType::RESEARCH][0] || tradeResource[(int)ResourceType::RESEARCH][1]);
|
||||||
|
|
||||||
bool canLoad = (rover->calcTotalLoad() < rover->getCapacity());
|
bool canLoad = (rover->calcTotalLoad() < rover->getCapacity());
|
||||||
bool transfer = (
|
bool transfer = (
|
||||||
(refinery && ((ownGameObj && canLoad) || (alliedGameObj && sellRefs && rover->getLoad((int)ResourceType::REFINEDS) > 0))) ||
|
(refinery && ((ownGameObj && canLoad) || (alliedGameObj && tradeRefs && rover->getLoad((int)ResourceType::REFINEDS) > 0))) ||
|
||||||
(tradeCenter && ((ownGameObj && canLoad) || (alliedGameObj && sellWealth && rover->getLoad((int)ResourceType::WEALTH) > 0))) ||
|
(tradeCenter && ((ownGameObj && canLoad) || (alliedGameObj && tradeWealth && rover->getLoad((int)ResourceType::WEALTH) > 0))) ||
|
||||||
(lab && ((ownGameObj && canLoad) || (alliedGameObj && sellTech && rover->getLoad((int)ResourceType::RESEARCH) > 0)))
|
(lab && ((ownGameObj && canLoad) || (alliedGameObj && tradeTech && rover->getLoad((int)ResourceType::RESEARCH) > 0)))
|
||||||
);
|
);
|
||||||
orderPossible = (roverSelected && (ownExtractor || transfer));
|
orderPossible = (roverSelected && (ownExtractor || transfer));
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -35,6 +35,6 @@ namespace battleship{
|
|||||||
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
|
ActiveGameState *activeState = (ActiveGameState*)stateManager->getAppStateByType((int)AppStateType::ACTIVE_STATE);
|
||||||
Player *mainPlayer = activeState->getPlayer();
|
Player *mainPlayer = activeState->getPlayer();
|
||||||
|
|
||||||
mainPlayer->addTradeOffer(Game::getSingleton()->getPlayer(playerId), new TradeOffer(true, true, buyRef, sellRef, buyWealth, sellWealth, buyRes, sellRes));
|
mainPlayer->addTradeOffer(Game::getSingleton()->getPlayer(playerId), new TradeOffer(buyRef, sellRef, buyWealth, sellWealth, buyRes, sellRes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-27
@@ -22,9 +22,10 @@ namespace battleship{
|
|||||||
cpuPlayer(cpuPl),
|
cpuPlayer(cpuPl),
|
||||||
spawnPointId(sp),
|
spawnPointId(sp),
|
||||||
name("pl"),
|
name("pl"),
|
||||||
refineds(30000),
|
|
||||||
trader(new Trader())
|
trader(new Trader())
|
||||||
{
|
{
|
||||||
|
resources[0] = 30000;
|
||||||
|
|
||||||
colorMaterial = new Material(Root::getSingleton()->getLibPath() + "texture");
|
colorMaterial = new Material(Root::getSingleton()->getLibPath() + "texture");
|
||||||
colorMaterial->addBoolUniform("lightingEnabled", true);
|
colorMaterial->addBoolUniform("lightingEnabled", true);
|
||||||
colorMaterial->addBoolUniform("texturingEnabled", false);
|
colorMaterial->addBoolUniform("texturingEnabled", false);
|
||||||
@@ -56,6 +57,12 @@ namespace battleship{
|
|||||||
|
|
||||||
for(ResourceDeposit *rd : resourceDeposits)
|
for(ResourceDeposit *rd : resourceDeposits)
|
||||||
rd->update();
|
rd->update();
|
||||||
|
|
||||||
|
updateTradeOffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::updateTradeOffers(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int Player::getOrderLineId(Order::TYPE type, Vector3 startPos, Vector3 endPos){
|
int Player::getOrderLineId(Order::TYPE type, Vector3 startPos, Vector3 endPos){
|
||||||
@@ -186,48 +193,37 @@ namespace battleship{
|
|||||||
return ucUnits;
|
return ucUnits;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::addTechnology(int techId){
|
void Player::updateTradedResource(Player *player, ResourceType type, int amount, bool selfDistributed, bool increased){
|
||||||
technologies.push_back(techId);
|
for(pair<Player*, vector<TradedResource>> pair : tradedResources)
|
||||||
}
|
if(pair.first == player){
|
||||||
|
TradedResource &tr = pair.second[(int)type];
|
||||||
|
|
||||||
int Player::getResource(ResourceType type){
|
if(selfDistributed) (increased ? tr.taken : tr.given) += amount;
|
||||||
switch(type){
|
else (increased ? tr.received : tr.hadTaken) += amount;
|
||||||
case ResourceType::REFINEDS:
|
|
||||||
return refineds;
|
|
||||||
case ResourceType::WEALTH:
|
|
||||||
return wealth;
|
|
||||||
case ResourceType::RESEARCH:
|
|
||||||
return research;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Player::updateResource(ResourceType type, int ammount, bool add){
|
|
||||||
switch(type){
|
|
||||||
case ResourceType::REFINEDS:
|
|
||||||
refineds = (add ? refineds + ammount : ammount);
|
|
||||||
break;
|
|
||||||
case ResourceType::WEALTH:
|
|
||||||
wealth = (add ? wealth + ammount : ammount);
|
|
||||||
break;
|
|
||||||
case ResourceType::RESEARCH:
|
|
||||||
research = (add ? research + ammount : ammount);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::initTradeOffersVec(){
|
void Player::initTradingVecs(){
|
||||||
vector<Player*> players = Game::getSingleton()->getPlayers();
|
vector<Player*> players = Game::getSingleton()->getPlayers();
|
||||||
|
|
||||||
for(Player *pl : players){
|
for(Player *pl : players){
|
||||||
if(this == pl) continue;
|
if(this == pl) continue;
|
||||||
|
|
||||||
if(team == pl->getTeam())
|
if(team == pl->getTeam()){
|
||||||
tradeOffers.push_back(make_pair(pl, vector<TradeOffer*>{}));
|
tradeOffers.push_back(make_pair(pl, vector<TradeOffer*>{}));
|
||||||
|
tradedResources.push_back(make_pair(pl, vector<TradedResource>{
|
||||||
|
TradedResource(ResourceType::REFINEDS),
|
||||||
|
TradedResource(ResourceType::WEALTH),
|
||||||
|
TradedResource(ResourceType::RESEARCH)
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::addTradeOffer(Player *player, TradeOffer *offer){
|
void Player::addTradeOffer(Player *player, TradeOffer *offer){
|
||||||
if(tradeOffers.empty()) initTradeOffersVec();
|
if(tradeOffers.empty()) initTradingVecs();
|
||||||
|
|
||||||
for(pair<Player*, vector<TradeOffer*>> &offers : tradeOffers)
|
for(pair<Player*, vector<TradeOffer*>> &offers : tradeOffers)
|
||||||
if(offers.first == player)
|
if(offers.first == player)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ namespace battleship{
|
|||||||
class Unit;
|
class Unit;
|
||||||
struct TradeOffer;
|
struct TradeOffer;
|
||||||
|
|
||||||
|
const int NUM_RESOURCES = 3;
|
||||||
enum class ResourceType{REFINEDS, WEALTH, RESEARCH};
|
enum class ResourceType{REFINEDS, WEALTH, RESEARCH};
|
||||||
|
|
||||||
class Player {
|
class Player {
|
||||||
@@ -31,11 +32,12 @@ namespace battleship{
|
|||||||
void selectUnits(std::vector<Unit*>);
|
void selectUnits(std::vector<Unit*>);
|
||||||
std::vector<Unit*> getUnitsById(int, int = -1);
|
std::vector<Unit*> getUnitsById(int, int = -1);
|
||||||
std::vector<Unit*> getUnitsByClass(UnitClass, int = -1);
|
std::vector<Unit*> getUnitsByClass(UnitClass, int = -1);
|
||||||
void addTechnology(int);
|
void addTechnology(int id){technologies.push_back(id);}
|
||||||
int getResource(ResourceType);
|
void updateTradedResource(Player*, ResourceType, int, bool, bool);
|
||||||
void updateResource(ResourceType, int, bool);
|
|
||||||
void addTradeOffer(Player*, TradeOffer*);
|
void addTradeOffer(Player*, TradeOffer*);
|
||||||
std::vector<TradeOffer*> getTradeOffers(Player*);
|
std::vector<TradeOffer*> getTradeOffers(Player*);
|
||||||
|
inline int getResource(ResourceType rt){return resources[(int)rt];}
|
||||||
|
inline void updateResource(ResourceType rt, int amount, bool add){resources[(int)rt] = (add ? resources[(int)rt] + amount : amount);}
|
||||||
inline Trader* getTrader(){return trader;}
|
inline Trader* getTrader(){return trader;}
|
||||||
inline void deselectUnits(){selectedUnits.clear();}
|
inline void deselectUnits(){selectedUnits.clear();}
|
||||||
inline Unit* getSelectedUnit(int id){return selectedUnits[id];}
|
inline Unit* getSelectedUnit(int id){return selectedUnits[id];}
|
||||||
@@ -75,10 +77,17 @@ namespace battleship{
|
|||||||
inline vb01::Material* getColorMaterial(){return colorMaterial;}
|
inline vb01::Material* getColorMaterial(){return colorMaterial;}
|
||||||
inline std::vector<int> getTechnologies(){return technologies;}
|
inline std::vector<int> getTechnologies(){return technologies;}
|
||||||
private:
|
private:
|
||||||
|
struct TradedResource{
|
||||||
|
ResourceType type;
|
||||||
|
int taken = 0, given = 0, received = 0, hadTaken = 0;
|
||||||
|
|
||||||
|
TradedResource(ResourceType t) : type(t){}
|
||||||
|
};
|
||||||
|
|
||||||
bool cpuPlayer = false;
|
bool cpuPlayer = false;
|
||||||
std::vector<int> technologies;
|
std::vector<int> technologies;
|
||||||
int luaPlayerId;
|
int luaPlayerId;
|
||||||
int refineds = 0, wealth = 0, research = 0;
|
int resources[3]{0, 0, 0};
|
||||||
int faction, difficulty, team;
|
int faction, difficulty, team;
|
||||||
int vehiclesBuilt = 0, vehiclesDestroyed = 0, vehiclesLost = 0;
|
int vehiclesBuilt = 0, vehiclesDestroyed = 0, vehiclesLost = 0;
|
||||||
int structuresBuilt = 0, structuresDestroyed = 0, structuresLost = 0;
|
int structuresBuilt = 0, structuresDestroyed = 0, structuresLost = 0;
|
||||||
@@ -91,9 +100,11 @@ namespace battleship{
|
|||||||
vb01::Vector3 color;
|
vb01::Vector3 color;
|
||||||
vb01::Material *colorMaterial = nullptr;
|
vb01::Material *colorMaterial = nullptr;
|
||||||
std::vector<std::pair<Player*, std::vector<TradeOffer*>>> tradeOffers;
|
std::vector<std::pair<Player*, std::vector<TradeOffer*>>> tradeOffers;
|
||||||
|
std::vector<std::pair<Player*, std::vector<TradedResource>>> tradedResources;
|
||||||
|
|
||||||
int getOrderLineId(Order::TYPE, vb01::Vector3, vb01::Vector3);
|
int getOrderLineId(Order::TYPE, vb01::Vector3, vb01::Vector3);
|
||||||
void initTradeOffersVec();
|
void initTradingVecs();
|
||||||
|
void updateTradeOffers();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-12
@@ -5,19 +5,22 @@
|
|||||||
|
|
||||||
namespace battleship{
|
namespace battleship{
|
||||||
struct TradeOffer{
|
struct TradeOffer{
|
||||||
bool sellerAggrees = true, sellerDelivers = true, buyerAggrees = false, buyerDelivers = false;
|
bool sellerAggrees = true, sellerDelivers = true, buyerAggrees = true, buyerDelivers = false;
|
||||||
int sellRefineds = 0, buyRefineds = 0, sellWealth = 0, buyWealth = 0, sellResearch = 0, buyResearch = 0;
|
int tradeResources[NUM_RESOURCES][2], deliveredResources[NUM_RESOURCES][2];
|
||||||
|
|
||||||
TradeOffer(bool bd, bool sd, int br, int sr, int bw, int sw, int bt, int st) :
|
TradeOffer(int br, int sr, int bw, int sw, int bt, int st){
|
||||||
buyerDelivers(bd),
|
tradeResources[(int)ResourceType::REFINEDS][0] = br;
|
||||||
sellerDelivers(sd),
|
tradeResources[(int)ResourceType::REFINEDS][1] = sr;
|
||||||
buyRefineds(br),
|
tradeResources[(int)ResourceType::WEALTH][0] = bw;
|
||||||
buyWealth(bw),
|
tradeResources[(int)ResourceType::WEALTH][1] = sw;
|
||||||
buyResearch(bt),
|
tradeResources[(int)ResourceType::RESEARCH][0] = bt;
|
||||||
sellRefineds(sr),
|
tradeResources[(int)ResourceType::RESEARCH][1] = st;
|
||||||
sellWealth(sw),
|
|
||||||
sellResearch(st)
|
for(int i = 0; i < NUM_RESOURCES; i++){
|
||||||
{}
|
deliveredResources[i][0] = 0;
|
||||||
|
deliveredResources[i][1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,12 +41,12 @@ namespace battleship{
|
|||||||
ActiveStateButton::onClick();
|
ActiveStateButton::onClick();
|
||||||
vector<Textbox*> textboxes = guiManager->getTextboxes();
|
vector<Textbox*> textboxes = guiManager->getTextboxes();
|
||||||
|
|
||||||
textboxes[0]->setEntry(to_wstring(tradeOffer->buyRefineds));
|
textboxes[0]->setEntry(to_wstring(tradeOffer->tradeResources[0][0]));
|
||||||
textboxes[1]->setEntry(to_wstring(tradeOffer->sellRefineds));
|
textboxes[1]->setEntry(to_wstring(tradeOffer->tradeResources[0][1]));
|
||||||
textboxes[2]->setEntry(to_wstring(tradeOffer->buyWealth));
|
textboxes[2]->setEntry(to_wstring(tradeOffer->tradeResources[1][0]));
|
||||||
textboxes[3]->setEntry(to_wstring(tradeOffer->sellWealth));
|
textboxes[3]->setEntry(to_wstring(tradeOffer->tradeResources[1][1]));
|
||||||
textboxes[4]->setEntry(to_wstring(tradeOffer->buyResearch));
|
textboxes[4]->setEntry(to_wstring(tradeOffer->tradeResources[2][0]));
|
||||||
textboxes[5]->setEntry(to_wstring(tradeOffer->sellResearch));
|
textboxes[5]->setEntry(to_wstring(tradeOffer->tradeResources[2][1]));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ActiveStateButton::onClick();
|
ActiveStateButton::onClick();
|
||||||
|
|||||||
Reference in New Issue
Block a user