本文整理汇总了C++中logic::CEntity::activate方法的典型用法代码示例。如果您正苦于以下问题:C++ CEntity::activate方法的具体用法?C++ CEntity::activate怎么用?C++ CEntity::activate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类logic::CEntity
的用法示例。
在下文中一共展示了CEntity::activate方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createAndMirrorSpectator
void CGameServerState::createAndMirrorSpectator(Net::NetID playerNetId) {
// Primero comprobamos si habia una entidad correspondiente a este jugador
// ya que durante el juego tambien podemos cambiar de clase.
// En caso de que la haya la eliminamos para crear la nueva
std::pair<Logic::TEntityID, bool> id = _playersMgr->getPlayerId(playerNetId);
if(id.second) { // Si el id devuelto es valido
Logic::CEntity* deletePlayer = _map->getEntityByID( id.first );
if(deletePlayer) {
Logic::CEntityFactory::getSingletonPtr()->deleteEntity(deletePlayer, true);
}
}
// Obtenemos el nickname del jugador que quiere espectar
std::string nickname = _playersMgr->getPlayerNickname(playerNetId);
// Creamos la entidad espectador con el nombre del jugador
Logic::CEntity* spectator = _map->createPlayer(nickname, "Spectator");
// Obtenemos la id logica de la entidad espectador
Logic::TEntityID spectatorId = spectator->getEntityID();
// Seteamos la id logica del jugador en el gestor de jugadores
_playersMgr->setEntityID(playerNetId, spectatorId);
// Escribimos el tipo de mensaje de red a enviar
Net::NetMessageType netMsg = Net::LOAD_PLAYERS;
int nbPlayers = 1;
// Serializamos toda la información que se necesita para la creación de la entidad
Net::CBuffer buffer;
buffer.write(&netMsg, sizeof(netMsg));
buffer.write(&nbPlayers, sizeof(nbPlayers));
buffer.write(&playerNetId, sizeof(playerNetId));
buffer.write(&spectatorId, sizeof(spectatorId));
buffer.serialize(nickname, false); // Nombre del player
buffer.serialize("Spectator", false); // Clase del player
// Enviamos la entidad nueva al resto de jugadores
_netMgr->broadcastIgnoring(playerNetId, buffer.getbuffer(), buffer.getSize());
buffer.reset();
// Enviamos la entidad nueva al jugador local
netMsg = Net::LOAD_LOCAL_PLAYER;
// Serializamos toda la información que se necesita para la creación de la entidad
buffer.write(&netMsg, sizeof(netMsg));
buffer.write(&playerNetId, sizeof(playerNetId));
buffer.write(&spectatorId, sizeof(spectatorId));
buffer.serialize(nickname, false); // Nombre del player
buffer.serialize("Spectator", false); // Clase del player
spectator->activate();
spectator->start();
_netMgr->sendTo(playerNetId, buffer.getbuffer(), buffer.getSize());
_playersMgr->setPlayerState(playerNetId, false);
_playersMgr->setPlayerTeam(playerNetId, Logic::TeamFaction::eNONE);
}
示例2: dataPacketReceived
//.........这里部分代码省略.........
case Net::CLASS_SELECTED: {
int race;
inBuffer.deserialize(race);
if(race == 5) {
unsigned int nbSpectators = 0;
for(auto it = _playersMgr->begin(); it != _playersMgr->end(); ++it) {
std::pair<Logic::TEntityID, bool> id = _playersMgr->getPlayerId(playerNetId);
if(id.second) {
if(Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(id.first)->getType() == "Spectator")
++nbSpectators;
}
}
if(nbSpectators < _maxSpectators) {
// Creamos una entidad espectador y la replicamos en el cliente
createAndMirrorSpectator(playerNetId);
}
else {
// Mandamos un mensaje de que no existen slots disponibles
// para jugar
Net::NetMessageType noSlotsMsg = Net::NO_FREE_SPECTATOR_SLOTS;
Net::CBuffer errorBuffer( sizeof(noSlotsMsg) );
errorBuffer.write( &noSlotsMsg, sizeof(noSlotsMsg) );
_netMgr->sendTo(playerNetId, errorBuffer.getbuffer(), errorBuffer.getSize());
}
}
else {
// Si quedan slots para conectarse como jugador permitimos que
// se conecte, sino le mandamos un mensaje
bool isChanging = false;
if( _playersMgr->existsByNetId(playerNetId) ) {
isChanging = _playersMgr->getPlayer(playerNetId).isSpawned();
}
// Si estamos cambiando de clase, consideramos un jugador menos, ya que
// nosotros si no contariamos
unsigned nbPlayersPlaying = _playersMgr->getNumberOfPlayersSpawned();
if(isChanging)
--nbPlayersPlaying;
if( nbPlayersPlaying < _maxPlayers) {
Logic::TeamFaction::Enum team;
if(_autoBalanceTeams) {
if(_playersMgr->blueTeamPlayers() < _playersMgr->redTeamPlayers()) {
team = Logic::TeamFaction::eBLUE_TEAM;
}
else {
team = Logic::TeamFaction::eRED_TEAM;
}
}
else {
if(_gameMode == GameMode::eTEAM_DEATHMATCH ||
_gameMode == GameMode::eCAPTURE_THE_FLAG) {
inBuffer.read(&team, sizeof(team));
}
else {
team = Logic::TeamFaction::eNONE;
}
}
// Creamos una entidad jugador con la clase que nos hayan dicho
// y la replicamos en el cliente
createAndMirrorPlayer(race, playerNetId, team);
}
else {
// Mandamos un mensaje de que no existen slots disponibles
// para jugar
Net::NetMessageType noSlotsMsg = Net::NO_FREE_PLAYER_SLOTS;
Net::CBuffer errorBuffer( sizeof(noSlotsMsg) );
errorBuffer.write( &noSlotsMsg, sizeof(noSlotsMsg) );
_netMgr->sendTo(playerNetId, errorBuffer.getbuffer(), errorBuffer.getSize());
}
}
break;
}
case Net::PING: {
Net::NetMessageType ackMsg = Net::PING;
clock_t time = clock();
Net::CBuffer ackBuffer(sizeof(ackMsg) + sizeof(time));
ackBuffer.write(&ackMsg, sizeof(ackMsg));
ackBuffer.write(&time, sizeof(time));
_netMgr->sendTo(playerNetId, ackBuffer.getbuffer(), ackBuffer.getSize());
break;
}
case Net::LOCAL_PLAYER_LOADED:
{
Logic::TEntityID id;
inBuffer.deserialize(id);
Logic::CEntity* player = _map->getEntityByID(id);
player->activate();
player->start();
break;
}
}
} // dataPacketReceived
示例3: createAndMirrorPlayer
void CGameServerState::createAndMirrorPlayer(int race, Net::NetID playerNetId, Logic::TeamFaction::Enum team) {
// Primero comprobamos si habia una entidad correspondiente a este jugador
// ya que durante el juego tambien podemos cambiar de clase.
// En caso de que la haya la eliminamos para crear la nueva
std::pair<Logic::TEntityID, bool> id = _playersMgr->getPlayerId(playerNetId);
if(id.second) { // Si el id devuelto es valido
Logic::CEntity* deletePlayer = _map->getEntityByID( id.first );
if(deletePlayer) {
Logic::CEntityFactory::getSingletonPtr()->deleteEntity(deletePlayer, true);
}
}
std::string name = _playersMgr->getPlayerNickname(playerNetId);
// Obtenemos el nombre de la clase a la que pertenece el player
std::string playerClass;
switch(race) {
case 1:
playerClass = "Screamer";
break;
case 2:
playerClass = "Hound";
break;
case 3:
playerClass = "Archangel";
break;
case 4:
playerClass = "Shadow";
break;
}
// Creamos el player
Logic::CEntity* player = _map->createPlayer(name, playerClass);
// Seteamos la id logica asociada al player
Logic::TEntityID playerId = player->getEntityID();
_playersMgr->setEntityID(playerNetId, playerId);
// Escribimos el tipo de mensaje de red a enviar
Net::NetMessageType netMsg = Net::LOAD_PLAYERS;
int nbPlayers = 1;
// Serializamos toda la información que se necesita para la creación de la entidad
Net::CBuffer buffer;
buffer.write(&netMsg, sizeof(netMsg));
buffer.write(&nbPlayers, sizeof(nbPlayers));
buffer.write(&playerNetId, sizeof(playerNetId));
buffer.write(&playerId, sizeof(playerId));
buffer.serialize(player->getName(), false); // Nombre del player
buffer.serialize(player->getType(), false); // Clase del player
buffer.write(&team, sizeof(team));
// Enviamos la entidad nueva al resto de jugadores
_netMgr->broadcastIgnoring(playerNetId, buffer.getbuffer(), buffer.getSize());
buffer.reset();
// Enviamos la entidad nueva al jugador local
netMsg = Net::LOAD_LOCAL_PLAYER;
// Serializamos toda la información que se necesita para la creación de la entidad
buffer.write(&netMsg, sizeof(netMsg));
buffer.write(&playerNetId, sizeof(playerNetId));
buffer.write(&playerId, sizeof(playerId));
buffer.serialize(player->getName(), false); // Nombre del player
buffer.serialize(player->getType(), false); // Clase del player
buffer.write(&team, sizeof(team));
std::cout << "el equipo que estoy enviando es ... " << team << std::endl;
player->activate();
player->start();
_netMgr->sendTo(playerNetId, buffer.getbuffer(), buffer.getSize());
_playersMgr->setPlayerState(playerNetId, true);
_playersMgr->setPlayerTeam(playerNetId, team);
}