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