nuclide/Source/gs-entbase/server/basetrigger.cpp

123 lines
2.5 KiB
C++
Raw Normal View History

/***
*
* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved.
*
* See the file LICENSE attached with the sources for usage details.
*
****/
enum {
USE_TOGGLE,
USE_CONTINOUS
};
class CBaseTrigger : CBaseEntity
{
int m_strGlobalState;
string m_strTarget;
string m_strTargetName;
string m_strKillTarget;
string m_strMessage;
int m_iUseType;
void() CBaseTrigger;
virtual void() Trigger;
virtual void() UseTargets;
virtual int() GetValue;
virtual void( float del ) UseTargets_Delay;
virtual void() InitBrushTrigger;
virtual void() InitPointTrigger;
};
void CBaseTrigger :: UseTargets ( void )
{
for ( entity eFind = world; ( eFind = find( eFind, CBaseTrigger::m_strTargetName, m_strTarget ) ); ) {
CBaseTrigger trigger = (CBaseTrigger) eFind;
#ifdef GS_DEVELOPER
print( sprintf( "%s: Triggering %s `%s`\n",
this.classname, eFind.classname, trigger.m_strTargetName ) );
#endif
trigger.Trigger();
}
if ( m_strKillTarget ) {
entity eKill = find( world, CBaseTrigger::m_strTargetName, m_strKillTarget );
if ( eKill ) {
remove( eKill );
}
}
}
int CBaseTrigger :: GetValue ( void )
{
return TRUE;
}
void CBaseTrigger :: UseTargets_Delay ( float fDelay )
{
static void Entities_UseTargets_Delay_Think( void ) {
CBaseTrigger::UseTargets();
remove( self );
}
#ifdef GS_DEVELOPER
print( sprintf( "CBaseTrigger: Delaying trigger of `%s`\n", m_strTarget ) );
#endif
CBaseTrigger eTimer = spawn( CBaseTrigger );
eTimer.owner = self;
eTimer.think = Entities_UseTargets_Delay_Think;
eTimer.m_strTarget = m_strTarget;
eTimer.nextthink = time + fDelay;
}
void CBaseTrigger :: Trigger ( void )
{
}
void CBaseTrigger :: InitPointTrigger ( void )
{
setsize( this, VEC_HULL_MIN, VEC_HULL_MAX );
solid = SOLID_TRIGGER;
}
void CBaseTrigger :: InitBrushTrigger ( void )
{
precache_model( model );
setmodel( this, model );
movetype = MOVETYPE_NONE;
#ifdef GS_DEVELOPER
alpha = 0.5f;
effects = EF_ADDITIVE;
#else
modelindex = 0;
model = "";
#endif
solid = SOLID_TRIGGER;
}
void CBaseTrigger :: CBaseTrigger ( void )
{
for ( int i = 1; i < ( tokenize( __fullspawndata ) - 1 ); i += 2 ) {
switch ( argv( i ) ) {
case "target":
m_strTarget = argv( i + 1 );
target = __NULL__;
break;
case "targetname":
m_strTargetName = argv( i + 1 );
targetname = __NULL__;
break;
case "killtarget":
m_strKillTarget = argv( i + 1 );
break;
case "message":
m_strMessage = argv( i + 1);
break;
default:
break;
}
}
CBaseEntity::CBaseEntity();
}