sof-sdk/Source/Game/gamecpp/g_econ.h
2000-06-15 00:00:00 +00:00

170 lines
4.7 KiB
C++

#define DEFAULT_KILLED_VALUE 100
#define DEFAULT_SURVIVAL_VALUE 0
#define DEFAULT_MONSTER_CLASS ENEMY_GRUNT
typedef enum
{
ENEMY_GRUNT, // these should be set for statistical record keeping
ENEMY_LEADER,
ENEMY_ANIMAL,
ENEMY_BOSS,
NPC,
NPC_ANIMAL,
SPECIAL,
} monsterclass;
class CTokenizer;
class CMonsterStats
{
private:
int m_MonsterID;
int m_KilledValue;
int m_SurvivalValue;
monsterclass m_MonsterClass;
public:
CMonsterStats(edict_t* Monster = NULL, int KilledValue = DEFAULT_KILLED_VALUE, int SurvivalValue = DEFAULT_SURVIVAL_VALUE, monsterclass myClass = ENEMY_GRUNT);
void Delete();
int GetKilledValue(){return m_KilledValue;};
void SetKilledValue(int amount){m_KilledValue = amount;};
int GetSurvivalValue(){return m_SurvivalValue;};
void SetSurvivalValue(int amount){m_SurvivalValue = amount;};
monsterclass GetMonsterClass(){return m_MonsterClass;};
void SetMonsterClass(monsterclass myClass){m_MonsterClass = myClass;};
bool MatchMonsterID(edict_t *ent);
};
#define PLAYER_STARTING_CASH_IN_BANK 10000
#define PLAYER_STARTING_CASH_IN_HAND 0
class CPlayerStats
{
private:
long m_CashToBeAwarded;
long m_CashOnHand;
long m_CashInBank;
bool m_Buymode;
public:
void Init(long CashInBank = PLAYER_STARTING_CASH_IN_BANK, long CashOnHand = PLAYER_STARTING_CASH_IN_HAND);
void SetBuyModeOnOff(bool On){m_Buymode = On;}
bool GetBuyModeOnOff(void){return m_Buymode;}
long GetCashToBeAwarded(){return m_CashToBeAwarded;};
void SetCashToBeAwarded(long amount){m_CashToBeAwarded = amount;};
void AdjustCashToBeAwarded(long amount){m_CashToBeAwarded += amount;};
long GetCashOnHand(){return m_CashOnHand;};
void SetCashOnHand(long amount){m_CashOnHand = amount;};
void AdjustCashOnHand(long amount){m_CashOnHand += amount;};
long GetCashInBank(){return m_CashInBank;};
void SetCashInBank(long amount){m_CashInBank = amount;};
void AdjustCashInBank(long amount){m_CashInBank += amount;};
};
class CNonPlayer
{
private:
char* m_MonsterName;
int m_KilledValue;
int m_SurvivalValue;
monsterclass m_MonsterClass;
public:
CNonPlayer(void);
CNonPlayer(const char* name);
void Delete();
bool ParseNonPlayerData(CTokenizer* Tokenizer);
char* GetMonsterName(){return m_MonsterName;};
int GetKilledValue(){return m_KilledValue;};
int GetSurvivalValue(){return m_SurvivalValue;};
monsterclass GetMonsterClass(){return m_MonsterClass;};
};
class CLocation
{
private:
List<CNonPlayer *> m_NonPlayerList;
char* m_LocationName;
public:
CLocation(void);
CLocation(const char* name);
void Delete();
bool RegisterNonPlayers(CTokenizer* Tokenizer);
int GetDefaultKilledValue(CTokenizer* Tokenizer);
int GetDefaultSurvivalValue(CTokenizer* Tokenizer);
monsterclass GetDefaultMonsterClass(CTokenizer* Tokenizer);
char* GetLocationName(){return m_LocationName;};
};
class CMonsterList
{
private:
List<CLocation *> m_LocationList;
public:
CMonsterList();
void Delete();
bool RegisterLocations(CTokenizer* Tokenizer);
int GetDefaultKilledValue(CTokenizer* Tokenizer);
int GetDefaultSurvivalValue(CTokenizer* Tokenizer);
monsterclass GetDefaultMonsterClass(CTokenizer* Tokenizer);
};
class CEconomyRegistry
{
private:
CMonsterList* m_MonsterList;
// CObjectList * m_ObjectList;
// etc.... Should probably change these to <map> templates once I understand them...
void RegisterMonsters(CTokenizer* Tokenizer);
public:
CEconomyRegistry(void);
void Delete();
CMonsterList* GetMonsterList(void){return m_MonsterList;};
int GetDefaultKilledValue(edict_t* ent);
int GetDefaultSurvivalValue(edict_t* ent);
monsterclass GetDefaultMonsterClass(edict_t* ent);
};
// make sure this thing is deallocated when the game is quit
class CGameStats
{
private:
List<CMonsterStats *> m_MonsterStats;
CEconomyRegistry* m_EconomyRegistry;
void FragmentEntClassname(edict_t* ent, char* ClassName);
public:
CGameStats(void);
void Delete();
int GetDefaultKilledValue(edict_t *ent);
int GetDefaultSurvivalValue(edict_t *ent);
monsterclass GetDefaultMonsterClass(edict_t *ent);
CMonsterStats* GetMonsterStats(edict_t *ent);
void AddEconomyRegistry(void);
void AddMonsterToStatsList(edict_t *ent, float killedValue = 12345678, float survivalValue = 12345678);
void BuyModeImpulse(edict_t *ent, int impulse);//currently, this will call exitbuymode with the right impuls
void EnterBuyMode(edict_t *ent);
void ExitBuyMode(edict_t *ent);
bool CanBuy(edict_t *ent);
};
CPlayerStats *GetPlayerStats(edict_t *ent);