MegaGlest/source/glest_game/type_instances/faction.h

152 lines
4.2 KiB
C++
Raw Blame History

// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2001-2008 Marti<74>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 <vector>
#include <map>
#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<Resource> Resources;
typedef vector<Resource> Store;
typedef vector<Faction*> Allies;
typedef vector<Unit*> Units;
typedef map<int, Unit*> 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:
Faction();
~Faction();
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;
int getCountForMaxUnitCount(const UnitType *unitType) 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