Files
FC1/CryGame/GameTagPoints.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

138 lines
3.4 KiB
C++

//////////////////////////////////////////////////////////////////////
//
// Game source code (c) Crytek 2001-2003
//
// File: GameTagPoints.cpp
//
// History:
// -December 11,2001: created
// -October 31,2003: split from GameLoading.cpp and other files
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Game.h"
#include "XNetwork.h"
#include "XServer.h"
#include "XClient.h"
#include "UIHud.h"
#include "XPlayer.h"
#include "PlayerSystem.h"
#include "XServer.h"
#include "WeaponSystemEx.h"
#include "ScriptObjectGame.h"
#include "ScriptObjectInput.h"
#include <IEntitySystem.h>
#include "UISystem.h"
#include "ScriptObjectUI.h"
#include "TagPoint.h"
//#include "XPath.h"
//////////////////////////////////////////////////////////////////////
// Inserts a tag-point in the list.
ITagPoint *CXGame::CreateTagPoint(const string &name, const Vec3d &pos, const Vec3d &angles)
{
// if a tag point with this name doesn't exist
//if (m_mapTagPoints.find(name) == m_mapTagPoints.end() )
//{
// create new one
CTagPoint *pNewPoint = new CTagPoint(this);
pNewPoint->OverrideName(name.c_str());
pNewPoint->SetPos(pos);
pNewPoint->SetAngles(angles);
// insert it into the map
m_mapTagPoints.insert(TagPointMap::iterator::value_type(name,pNewPoint));
return (ITagPoint *) pNewPoint;
//}
//else
// return 0;
}
//////////////////////////////////////////////////////////////////////
// Remove tag-point.
void CXGame::RemoveTagPoint(ITagPoint *pPoint)
{
TagPointMap::iterator ti;
// find and delete tag-point
for (ti = m_mapTagPoints.begin();ti!=m_mapTagPoints.end();ti++)
{
if ( ti->second == pPoint )
{
m_mapTagPoints.erase(ti);
pPoint->Release();
return;
}
}
}
//////////////////////////////////////////////////////////////////////
// Retrieve a tag-point by its name
ITagPoint *CXGame::GetTagPoint(const string &name)
{
TagPointMap::iterator ti;
// find and return tag-point
if ((ti = m_mapTagPoints.find(name)) == m_mapTagPoints.end())
return 0;
else
return (ITagPoint *) ti->second;
}
//////////////////////////////////////////////////////////////////////
bool CXGame::RenameTagPoint(const string &oldname, const string &newname)
{
TagPointMap::iterator ti;
// find tag-point
if (( ti = m_mapTagPoints.find(oldname)) != m_mapTagPoints.end())
{
// does the new name already exist ?
if (m_mapTagPoints.find(newname) == m_mapTagPoints.end())
{
// change name
CTagPoint *pPoint = ti->second;
pPoint->OverrideName(newname);
m_mapTagPoints.erase(oldname);
m_mapTagPoints.insert(TagPointMap::iterator::value_type(newname,pPoint));
return true;
}
else
return false;
}
return false;
}
//////////////////////////////////////////////////////////////////////////
//! Remove all tag-points from the list
void CXGame::ClearTagPoints()
{
if (!m_mapTagPoints.empty())
{
TagPointMap::iterator ti;
for (ti=m_mapTagPoints.begin();ti!=m_mapTagPoints.end();ti++)
(ti->second)->Release();
m_mapTagPoints.clear();
}
if(m_pServer)m_pServer->ClearRespawnPoints();
}
//////////////////////////////////////////////////////////////////////////
void CXGame::AddRespawnPoint(ITagPoint *pPoint)
{
// m_pServer->m_vRespawnPoints.push_back(pPoint);
m_pServer->AddRespawnPoint(pPoint);
}
//////////////////////////////////////////////////////////////////////////
void CXGame::RemoveRespawnPoint(ITagPoint *pPoint)
{
m_pServer->RemoveRespawnPoint(pPoint);
}