MegaGlest/source/glest_game/types/element_type.h

133 lines
3.5 KiB
C++

// ==============================================================
// 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_ELEMENTTYPE_H_
#define _GLEST_GAME_ELEMENTTYPE_H_
#ifdef WIN32
#include <winsock2.h>
#include <winsock.h>
#endif
#include <vector>
#include <string>
#include "texture.h"
#include "resource.h"
#include "leak_dumper.h"
using std::vector;
using std::string;
using Shared::Graphics::Texture2D;
namespace Glest{ namespace Game{
class UpgradeType;
class TechTree;
class UnitType;
class UpgradeType;
class DisplayableType;
class ResourceType;
// =====================================================
// class DisplayableType
//
/// Base class for anything that has a name and a portrait
// =====================================================
class DisplayableType {
protected:
string name; //name
Texture2D *image; //portrait
public:
DisplayableType();
virtual ~DisplayableType(){};
//get
virtual string getName(bool translatedValue=false) const;
virtual const Texture2D *getImage() const { return image; }
//virtual void saveGame(XmlNode *rootNode) const;
};
// =====================================================
// class RequirableType
//
/// Base class for anything that has requirements
// =====================================================
class RequirableType: public DisplayableType{
private:
typedef vector<const UnitType*> UnitReqs;
typedef vector<const UpgradeType*> UpgradeReqs;
protected:
UnitReqs unitReqs; //needed units
UpgradeReqs upgradeReqs; //needed upgrades
public:
//get
int getUpgradeReqCount() const {return (int)upgradeReqs.size();}
int getUnitReqCount() const {return (int)unitReqs.size();}
const UpgradeType *getUpgradeReq(int i) const {return upgradeReqs[i];}
const UnitType *getUnitReq(int i) const {return unitReqs[i];}
//other
virtual string getReqDesc(bool translatedValue) const;
//virtual void saveGame(XmlNode *rootNode) const;
};
// =====================================================
// class ProducibleType
//
/// Base class for anything that can be produced
// =====================================================
class ProducibleType: public RequirableType {
private:
typedef vector<Resource> Costs;
protected:
Costs costs;
Texture2D *cancelImage;
int productionTime;
public:
ProducibleType();
virtual ~ProducibleType();
//get
int getCostCount() const {return (int)costs.size();}
const Resource *getCost(int i) const {return &costs[i];}
const Resource *getCost(const ResourceType *rt) const;
int getProductionTime() const {return productionTime;}
const Texture2D *getCancelImage() const {return cancelImage;}
//varios
void checkCostStrings(TechTree *techTree);
virtual string getReqDesc(bool translatedValue) const;
string getResourceReqDesc(bool lineBreaks,bool translatedValue) const;
string getUnitAndUpgradeReqDesc(bool lineBreaks, bool translatedValue) const;
string getReqDesc(bool ignoreResourceRequirements, bool translatedValue) const;
// virtual void saveGame(XmlNode *rootNode) const;
// void loadGame(const XmlNode *rootNode);
};
}}//end namespace
#endif