Files
src-1.2/engine/server/library/serverGame/src/shared/object/GroupWaypointBuilder.cpp
T

149 lines
5.5 KiB
C++
Executable File

// ======================================================================
//
// GroupWaypointBuilder.cpp
//
// Copyright 2004 Sony Online Entertainment
//
// ======================================================================
#include "serverGame/FirstServerGame.h"
#include "serverGame/GroupWaypointBuilder.h"
#include "serverGame/ConfigServerGame.h"
#include "serverGame/CreatureObject.h"
#include "serverGame/GroupObject.h"
#include "serverGame/PlayerCreatureController.h"
#include "serverGame/PlayerObject.h"
#include "sharedUtility/Location.h"
#include "sharedObject/NetworkIdManager.h"
// ======================================================================
namespace GroupWaypointBuilderNamespace
{
void buildGroupWaypoints(GroupObject const &groupObject, PlayerObject::WaypointMap &groupWaypoints);
void buildGroupWaypoints(PlayerObject const &playerObject, PlayerObject::WaypointMap &groupWaypoints);
void updateGroupWaypoints(GroupObject const &groupObject, PlayerObject::WaypointMap const &groupWaypoints);
void updateGroupWaypoints(PlayerObject &playerObject, PlayerObject::WaypointMap const &groupWaypoints);
}
using namespace GroupWaypointBuilderNamespace;
// ======================================================================
// GroupWaypointBuilderNamespace
// ======================================================================
void GroupWaypointBuilderNamespace::buildGroupWaypoints(GroupObject const &groupObject, PlayerObject::WaypointMap &groupWaypoints)
{
GroupObject::GroupMemberVector const & groupMemberVector = groupObject.getGroupMembers();
for (GroupObject::GroupMemberVector::const_iterator groupMemberVectorIter = groupMemberVector.begin(); groupMemberVectorIter != groupMemberVector.end(); ++groupMemberVectorIter)
{
Object const * const object = NetworkIdManager::getObjectById(groupMemberVectorIter->first);
if (!object)
continue;
ServerObject const * serverObject = object->asServerObject();
if (!serverObject || !serverObject->isPlayerControlled())
continue;
CreatureObject const * const creatureObject = serverObject->asCreatureObject();
if (!creatureObject)
continue;
PlayerObject const * const playerObject = PlayerCreatureController::getPlayerObject(creatureObject);
if (!playerObject)
continue;
buildGroupWaypoints(*playerObject, groupWaypoints);
}
}
// ----------------------------------------------------------------------
void GroupWaypointBuilderNamespace::buildGroupWaypoints(PlayerObject const &playerObject, PlayerObject::WaypointMap &groupWaypoints)
{
PlayerObject::WaypointMap const &waypoints = playerObject.getWaypoints();
if (!waypoints.empty())
{
for (PlayerObject::WaypointMap::const_iterator i = waypoints.begin(); i != waypoints.end(); ++i)
if ((*i).second.isActive() && !strcmp((*i).second.getLocation().getSceneId(), ConfigServerGame::getSceneID()))
groupWaypoints[(*i).first] = (*i).second;
}
}
// ----------------------------------------------------------------------
void GroupWaypointBuilderNamespace::updateGroupWaypoints(GroupObject const &groupObject, PlayerObject::WaypointMap const &groupWaypoints)
{
GroupObject::GroupMemberVector const &groupMemberVector = groupObject.getGroupMembers();
for (GroupObject::GroupMemberVector::const_iterator groupMemberVectorIter = groupMemberVector.begin(); groupMemberVectorIter != groupMemberVector.end(); ++groupMemberVectorIter)
{
Object * const object = NetworkIdManager::getObjectById(groupMemberVectorIter->first);
if (!object)
continue;
ServerObject * const serverObject = object->asServerObject();
if (!serverObject || !serverObject->isPlayerControlled())
continue;
CreatureObject * const creatureObject = serverObject->asCreatureObject();
if (!creatureObject)
continue;
PlayerObject * const playerObject = PlayerCreatureController::getPlayerObject(creatureObject);
if (!playerObject)
continue;
updateGroupWaypoints(*playerObject, groupWaypoints);
}
}
// ----------------------------------------------------------------------
void GroupWaypointBuilderNamespace::updateGroupWaypoints(PlayerObject &playerObject, PlayerObject::WaypointMap const &groupWaypoints)
{
if (playerObject.isAuthoritative())
playerObject.setGroupWaypoints(groupWaypoints);
}
// ======================================================================
// PUBLIC GroupWaypointBuilder
// ======================================================================
void GroupWaypointBuilder::updateGroupWaypoints(GroupObject const &groupObject)
{
#if 0
PlayerObject::WaypointMap groupWaypoints;
buildGroupWaypoints(groupObject, groupWaypoints);
GroupWaypointBuilderNamespace::updateGroupWaypoints(groupObject, groupWaypoints);
#endif
}
// ----------------------------------------------------------------------
void GroupWaypointBuilder::updateGroupWaypoints(PlayerObject &playerObject, bool const updateGroup)
{
#if 0
CreatureObject const * const creatureObject = playerObject.getCreatureObject();
if (creatureObject)
{
GroupObject const * const groupObject = creatureObject->getGroup();
if (groupObject && updateGroup)
{
PlayerObject::WaypointMap groupWaypoints;
buildGroupWaypoints(*groupObject, groupWaypoints);
GroupWaypointBuilderNamespace::updateGroupWaypoints(*groupObject, groupWaypoints);
}
else
{
PlayerObject::WaypointMap groupWaypoints;
buildGroupWaypoints(playerObject, groupWaypoints);
GroupWaypointBuilderNamespace::updateGroupWaypoints(playerObject, groupWaypoints);
}
}
#endif
}
// ======================================================================