using a generic number of resource types

ability to order to collect resources from buyers
This commit is contained in:
devZoGok
2025-04-21 15:55:45 +03:00
parent 13d1e8fcbd
commit 22c4146ffe
6 changed files with 97 additions and 68 deletions
+25 -29
View File
@@ -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,8 +57,14 @@ namespace battleship{
for(ResourceDeposit *rd : resourceDeposits)
rd->update();
updateTradeOffers();
}
void Player::updateTradeOffers(){
}
int Player::getOrderLineId(Order::TYPE type, Vector3 startPos, Vector3 endPos){
Vector3 color;
@@ -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)