MegaGlest/source/glest_game/type_instances/upgrade.h

98 lines
2.2 KiB
C++

// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2001-2008 Martio 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_UPGRADE_H_
#define _GLEST_GAME_UPGRADE_H_
#include <vector>
#include <string>
#include <map>
#include "leak_dumper.h"
using std::vector;
using std::map;
namespace Glest { namespace Game {
class Unit;
class UpgradeType;
enum UpgradeState {
usUpgrading,
usUpgraded,
upgradeStateCount
};
class UpgradeManager;
class TotalUpgrade;
// =====================================================
// class Upgrade
//
/// A bonus to an UnitType
// =====================================================
class Upgrade {
private:
UpgradeState state;
int factionIndex;
const UpgradeType *type;
friend class UpgradeManager;
public:
Upgrade(const UpgradeType *upgradeType, int factionIndex);
private:
//get
UpgradeState getState() const;
int getFactionIndex() const;
const UpgradeType * getType() const;
//set
void setState(UpgradeState state);
std::string toString() const;
};
// ===============================
// class UpgradeManager
// ===============================
class UpgradeManager{
private:
typedef vector<Upgrade*> Upgrades;
typedef map<const UpgradeType *,int> UgradesLookup;
Upgrades upgrades;
UgradesLookup upgradesLookup;
public:
~UpgradeManager();
int getUpgradeCount() const {return upgrades.size();}
void startUpgrade(const UpgradeType *upgradeType, int factionIndex);
void cancelUpgrade(const UpgradeType *upgradeType);
void finishUpgrade(const UpgradeType *upgradeType);
bool isUpgraded(const UpgradeType *upgradeType) const;
bool isUpgrading(const UpgradeType *upgradeType) const;
bool isUpgradingOrUpgraded(const UpgradeType *upgradeType) const;
void computeTotalUpgrade(const Unit *unit, TotalUpgrade *totalUpgrade) const;
std::string toString() const;
};
}}//end namespace
#endif