1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/* Author: Tobi Vollebregt */
/* based on code from GlobalSynced.{cpp,h} */
#include "StdAfx.h"
#include "PlayerHandler.h"
#include "LogOutput.h"
#include "Game/GameSetup.h"
#include "mmgr.h"
CR_BIND(CPlayerHandler,);
CR_REG_METADATA(CPlayerHandler, (
CR_MEMBER(players),
CR_RESERVED(64)
));
CPlayerHandler* playerHandler;
CPlayerHandler::CPlayerHandler()
{
}
CPlayerHandler::~CPlayerHandler()
{
}
void CPlayerHandler::LoadFromSetup(const CGameSetup* setup)
{
players.resize(setup->playerStartingData.size());
for (size_t i = 0; i < setup->playerStartingData.size(); ++i)
{
players[i] = setup->playerStartingData[i];
players[i].playerNum = (int)i;
players[i].myControl.myController = &players[i];
}
}
int CPlayerHandler::Player(const std::string& name) const
{
for (playerVec::const_iterator it = players.begin(); it != players.end(); ++it) {
if (it->name == name)
return it->playerNum;
}
return -1;
}
void CPlayerHandler::PlayerLeft(int player, unsigned char reason)
{
Player(player)->active = false;
Player(player)->ping = 0;
}
std::vector<int> CPlayerHandler::ActivePlayersInTeam(int teamId) const
{
std::vector<int> playersInTeam;
size_t p = 0;
for(playerVec::const_iterator pi = players.begin(); pi != players.end(); ++pi, ++p) {
// do not count spectators, or demos will desync
if (pi->active && !pi->spectator && (pi->team == teamId)) {
playersInTeam.push_back(p);
}
}
return playersInTeam;
}
void CPlayerHandler::GameFrame(int frameNum)
{
for(playerVec::iterator it = players.begin(); it != players.end(); ++it)
{
it->GameFrame(frameNum);
}
}
|