csgo-2018-source/game/server/inforemarkable.cpp
2021-07-24 21:11:47 -07:00

77 lines
2.0 KiB
C++

//========= Copyright © 1996-2008, Valve Corporation, All rights reserved. ============//
//
// Purpose: Definition of the info_remarkable entity.
// This entity is a quick and dirty hack to provide writers
// with some kind of object that characters can remark upon.
// It is not performant, because it relies upon each character
// polling over each of these for visibility. A better approach
// will be an object that is notified by the engine when it is within
// a character's view.
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "inforemarkable.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
/// A global list of entities that can be remarked upon.
/// @todo This is an awful, brute force solution. Fix it.
class CRemarkableEntityList : public CAutoGameSystem
{
public:
CRemarkableEntityList( char const *name ) : CAutoGameSystem( name )
{}
virtual void LevelShutdownPostEntity()
{
m_list.Purge();
}
void AddEntity( CInfoRemarkable *pItem )
{
m_list.AddToTail( pItem );
}
void RemoveEntity( CInfoRemarkable *pItem )
{
m_list.FindAndRemove( pItem );
}
CUtlLinkedList< CInfoRemarkable * > m_list;
};
CRemarkableEntityList g_RemarkableList( "CRemarkableEntityList" );
CUtlLinkedList< CInfoRemarkable * > *CInfoRemarkable::GetListOfAllThatIsRemarkable( void )
{
return &g_RemarkableList.m_list;
}
CInfoRemarkable::~CInfoRemarkable()
{
g_RemarkableList.RemoveEntity( this );
}
void CInfoRemarkable::Spawn( void )
{
g_RemarkableList.AddEntity(this);
m_iTimesRemarkedUpon = 0;
}
//--------------------------------------------------------------------------------------------------------
LINK_ENTITY_TO_CLASS( info_remarkable, CInfoRemarkable );
//--------------------------------------------------------------------------------------------------------
BEGIN_DATADESC( CInfoRemarkable )
DEFINE_KEYFIELD( m_szRemarkContext, FIELD_STRING, "contextsubject" ),
END_DATADESC()