// ============================================================== // This file is part of Glest (www.glest.org) // // Copyright (C) 2001-2008 Marti�o Figueroa // // You can redistribute this code and/or modify it under // the terms of the GNU General Public License as published // by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version // ============================================================== #ifndef _GLEST_GAME_FACTION_H_ #define _GLEST_GAME_FACTION_H_ #include #include #include "upgrade.h" #include "texture.h" #include "resource.h" #include "game_constants.h" using std::map; using std::vector; using Shared::Graphics::Texture2D; namespace Glest{ namespace Game{ class Unit; class TechTree; class FactionType; class ProducibleType; class RequirableType; class CommandType; class UnitType; class Game; class ScriptManager; class World; // ===================================================== // class Faction // /// Each of the game players // ===================================================== class Faction{ private: typedef vector Resources; typedef vector Store; typedef vector Allies; typedef vector Units; typedef map UnitMap; private: UpgradeManager upgradeManager; Resources resources; Store store; Allies allies; Units units; UnitMap unitMap; World *world; ScriptManager *scriptManager; ControlType control; Texture2D *texture; const FactionType *factionType; int index; int teamIndex; int startLocationIndex; bool thisFaction; public: void init( const FactionType *factionType, ControlType control, TechTree *techTree, Game *game, int factionIndex, int teamIndex, int startLocationIndex, bool thisFaction, bool giveResources); void end(); //get const Resource *getResource(const ResourceType *rt) const; const Resource *getResource(int i) const {return &resources[i];} int getStoreAmount(const ResourceType *rt) const; const FactionType *getType() const {return factionType;} int getIndex() const {return index;} int getTeam() const {return teamIndex;} bool getCpuControl() const; bool getCpuEasyControl() const {return control==ctCpuEasy;} bool getCpuUltraControl() const {return control==ctCpuUltra;} bool getCpuMegaControl() const {return control==ctCpuMega;} ControlType getControlType() const {return control;} Unit *getUnit(int i) const {return units[i];} int getUnitCount() const {return units.size();} const UpgradeManager *getUpgradeManager() const {return &upgradeManager;} const Texture2D *getTexture() const {return texture;} int getStartLocationIndex() const {return startLocationIndex;} bool getThisFaction() const {return thisFaction;} //upgrades void startUpgrade(const UpgradeType *ut); void cancelUpgrade(const UpgradeType *ut); void finishUpgrade(const UpgradeType *ut); //cost application bool applyCosts(const ProducibleType *p); void applyDiscount(const ProducibleType *p, int discount); void applyStaticCosts(const ProducibleType *p); void applyStaticProduction(const ProducibleType *p); void deApplyCosts(const ProducibleType *p); void deApplyStaticCosts(const ProducibleType *p); void deApplyStaticConsumption(const ProducibleType *p); void applyCostsOnInterval(); bool checkCosts(const ProducibleType *pt); //reqs bool reqsOk(const RequirableType *rt) const; bool reqsOk(const CommandType *ct) const; //diplomacy bool isAlly(const Faction *faction); //other Unit *findUnit(int id); void addUnit(Unit *unit); void removeUnit(Unit *unit); void addStore(const UnitType *unitType); void removeStore(const UnitType *unitType); //resources void incResourceAmount(const ResourceType *rt, int amount); void setResourceBalance(const ResourceType *rt, int balance); std::string toString() const; private: void limitResourcesToStore(); void resetResourceAmount(const ResourceType *rt); }; }}//end namespace #endif