ef2gamesource/dlls/game/teammateroster.hpp

118 lines
3.1 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Code/DLLs/game/surfaceflags.h $
// $Revision:: 9 $
// $Author:: Jwaters $
// $Date:: 7/30/02 8:35p $
//
// Copyright (C) 1999 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Code/DLLs/game/surfaceflags.h $
#ifndef TEAMMATE_ROSTER_HPP
#define TEAMMATE_ROSTER_HPP
#include "listener.h"
#include "container.h"
#include "str.h"
const int MAX_TEAMMATES=4;
//Teammate Data Structure
typedef struct
{
int entNum;
int injuredHealthLevel;
int criticalHealthLevel;
bool active;
str archeType;
}TeammateData;
//-------------------------- CLASS ----------------------------------
//
// Name: TeammateRoster
// Base Class: None
//
// Description: Handles adding the teammate to the roster. This is a singleton system that will receive events
// (usually through script) to add and remove teammates to a roster. This system then updates
// the teammates health status via the database. The client reads in these database values via the
// user interface and displays this to the user.
//
// Method Of Use:
//
//-------------------------------------------------------------------
class TeammateRoster
{
public:
TeammateRoster();
~TeammateRoster();
static void createInstance(void);
static void deleteInstance(void);
static TeammateRoster* getInstance(void) { if(_instance == 0) TeammateRoster::createInstance(); return _instance; }
TeammateStatus getTeammateStatus(int index);
void addTeammate(const Entity* entity, int index);
void removeTeammate(int index);
void update(void);
void clearTeammates(void);
void Archive( Archiver &arc );
protected:
void removeTeammateDataFromDatabase(int index);
private:
TeammateData _teammateList[MAX_TEAMMATES];
static TeammateRoster* _instance;
str _healthyShader;
str _injuredShader;
str _criticalShader;
str _defaultShader;
str _healthyAnimation;
str _injuredAnimation;
str _criticalAnimation;
};
inline void TeammateRoster::Archive( Archiver& arc )
{
TeammateData* teammateData;
for(int i = 0; i < MAX_TEAMMATES; i++)
{
teammateData = &_teammateList[i];
arc.ArchiveInteger( &teammateData->entNum);
arc.ArchiveInteger( &teammateData->injuredHealthLevel);
arc.ArchiveInteger( &teammateData->criticalHealthLevel);
arc.ArchiveBool( &teammateData->active);
arc.ArchiveString( &teammateData->archeType);
}
arc.ArchiveString(&_healthyShader);
arc.ArchiveString(&_injuredShader);
arc.ArchiveString(&_criticalShader);
arc.ArchiveString(&_defaultShader);
arc.ArchiveString(&_healthyAnimation);
arc.ArchiveString(&_injuredAnimation);
arc.ArchiveString(&_criticalAnimation);
}
#endif