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

125 lines
5.9 KiB
C++
Executable File

// ======================================================================
//
// GroupMissionCriticalObjectsBuilder.cpp
// asommers
//
// copyright 2004, sony online entertainment
//
// ======================================================================
#include "serverGame/FirstServerGame.h"
#include "serverGame/GroupMissionCriticalObjectsBuilder.h"
#include "serverGame/CreatureObject.h"
#include "serverGame/GroupObject.h"
#include "sharedObject/NetworkIdManager.h"
// ======================================================================
namespace GroupMissionCriticalObjectsBuilderNamespace
{
void buildGroupMissionCriticalObjects(GroupObject const & groupObject, CreatureObject::GroupMissionCriticalObjectSet & groupMissionCriticalObjects);
void buildGroupMissionCriticalObjects(CreatureObject const & creatureObject, CreatureObject::GroupMissionCriticalObjectSet & groupMissionCriticalObjects);
void updateGroupMissionCriticalObjects(GroupObject const & groupObject, CreatureObject::GroupMissionCriticalObjectSet const & groupMissionCriticalObjects);
void updateGroupMissionCriticalObjects(CreatureObject & creatureObject, CreatureObject::GroupMissionCriticalObjectSet const & groupMissionCriticalObjects);
}
using namespace GroupMissionCriticalObjectsBuilderNamespace;
// ======================================================================
// GroupMissionCriticalObjectsBuilderNamespace
// ======================================================================
void GroupMissionCriticalObjectsBuilderNamespace::buildGroupMissionCriticalObjects(GroupObject const & groupObject, CreatureObject::GroupMissionCriticalObjectSet & groupMissionCriticalObjects)
{
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)
continue;
CreatureObject const * const creatureObject = serverObject->asCreatureObject();
if (!creatureObject)
continue;
buildGroupMissionCriticalObjects(*creatureObject, groupMissionCriticalObjects);
}
}
// ----------------------------------------------------------------------
void GroupMissionCriticalObjectsBuilderNamespace::buildGroupMissionCriticalObjects(CreatureObject const & creatureObject, CreatureObject::GroupMissionCriticalObjectSet & groupMissionCriticalObjects)
{
CreatureObject::MissionCriticalObjectSet const & missionCriticalObjects = creatureObject.getMissionCriticalObjects();
for (CreatureObject::MissionCriticalObjectSet::const_iterator missionCriticalObjectsIter = missionCriticalObjects.begin(); missionCriticalObjectsIter != missionCriticalObjects.end(); ++missionCriticalObjectsIter)
groupMissionCriticalObjects.insert(std::make_pair(creatureObject.getNetworkId(), *missionCriticalObjectsIter));
}
// ----------------------------------------------------------------------
void GroupMissionCriticalObjectsBuilderNamespace::updateGroupMissionCriticalObjects(GroupObject const & groupObject, CreatureObject::GroupMissionCriticalObjectSet const & groupMissionCriticalObjects)
{
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 * serverObject = object->asServerObject();
if (!serverObject)
continue;
CreatureObject * const creatureObject = serverObject->asCreatureObject();
if (!creatureObject)
continue;
updateGroupMissionCriticalObjects(*creatureObject, groupMissionCriticalObjects);
}
}
// ----------------------------------------------------------------------
void GroupMissionCriticalObjectsBuilderNamespace::updateGroupMissionCriticalObjects(CreatureObject & creatureObject, CreatureObject::GroupMissionCriticalObjectSet const & groupMissionCriticalObjects)
{
if (creatureObject.isAuthoritative())
creatureObject.setGroupMissionCriticalObjects(groupMissionCriticalObjects);
}
// ======================================================================
// PUBLIC GroupMissionCriticalObjectsBuilder
// ======================================================================
void GroupMissionCriticalObjectsBuilder::updateGroupMissionCriticalObjects(GroupObject const & groupObject)
{
CreatureObject::GroupMissionCriticalObjectSet groupMissionCriticalObjects;
buildGroupMissionCriticalObjects(groupObject, groupMissionCriticalObjects);
GroupMissionCriticalObjectsBuilderNamespace::updateGroupMissionCriticalObjects(groupObject, groupMissionCriticalObjects);
}
// ----------------------------------------------------------------------
void GroupMissionCriticalObjectsBuilder::updateGroupMissionCriticalObjects(CreatureObject & creatureObject, bool const updateGroup)
{
GroupObject const * const groupObject = creatureObject.getGroup();
if (groupObject && updateGroup)
{
CreatureObject::GroupMissionCriticalObjectSet groupMissionCriticalObjects;
buildGroupMissionCriticalObjects(*groupObject, groupMissionCriticalObjects);
GroupMissionCriticalObjectsBuilderNamespace::updateGroupMissionCriticalObjects(*groupObject, groupMissionCriticalObjects);
}
else
{
CreatureObject::GroupMissionCriticalObjectSet groupMissionCriticalObjects;
buildGroupMissionCriticalObjects(creatureObject, groupMissionCriticalObjects);
GroupMissionCriticalObjectsBuilderNamespace::updateGroupMissionCriticalObjects(creatureObject, groupMissionCriticalObjects);
}
}
// ======================================================================