//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Point entity used to create templates out of other entities or groups of entities // //=============================================================================// #ifndef POINT_TEMPLATE_H #define POINT_TEMPLATE_H #ifdef _WIN32 #pragma once #endif #define MAX_NUM_TEMPLATES 16 struct template_t { int iTemplateIndex; VMatrix matEntityToTemplate; DECLARE_SIMPLE_DATADESC(); }; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CPointTemplate : public CLogicalEntity { DECLARE_CLASS( CPointTemplate, CLogicalEntity ); public: DECLARE_DATADESC(); virtual void Spawn( void ); virtual void Precache(); // Template initialization void StartBuildingTemplates( void ); void FinishBuildingTemplates( void ); // Template Entity accessors int GetNumTemplateEntities( void ); CBaseEntity *GetTemplateEntity( int iTemplateNumber ); void AddTemplate( CBaseEntity *pEntity, const char *pszMapData, int nLen ); bool ShouldRemoveTemplateEntities( void ); bool AllowNameFixup(); // Templates accessors int GetNumTemplates( void ); int GetTemplateIndexForTemplate( int iTemplate ); // Template instancing bool CreateInstance( const Vector &vecOrigin, const QAngle &vecAngles, CUtlVector *pEntities ); // Inputs void InputForceSpawn( inputdata_t &inputdata ); virtual void PerformPrecache(); private: string_t m_iszTemplateEntityNames[MAX_NUM_TEMPLATES]; // List of map entities this template targets. Built inside our Spawn(). // It's only valid between Spawn() & Activate(), because the map entity parsing // code removes all the entities in it once it finishes turning them into templates. CUtlVector< CBaseEntity * > m_hTemplateEntities; // List of templates, generated from our template entities. CUtlVector< template_t > m_hTemplates; COutputEvent m_pOutputOnSpawned; }; #endif // POINT_TEMPLATE_H