You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: Used at the bottom of maps where objects should fall away to infinity
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include "triggers.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Used at the bottom of maps where objects should fall away to infinity
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CTriggerFall : public CBaseTrigger
|
||
|
{
|
||
|
DECLARE_CLASS( CTriggerFall, CBaseTrigger );
|
||
|
public:
|
||
|
void Spawn( void );
|
||
|
void FallTouch( CBaseEntity *pOther );
|
||
|
|
||
|
DECLARE_DATADESC();
|
||
|
|
||
|
// Outputs
|
||
|
COutputEvent m_OnFallingObject;
|
||
|
};
|
||
|
|
||
|
BEGIN_DATADESC( CTriggerFall )
|
||
|
|
||
|
// Function Pointers
|
||
|
DEFINE_FUNCTION( FallTouch ),
|
||
|
|
||
|
// Outputs
|
||
|
DEFINE_OUTPUT( m_OnFallingObject, "OnFallingObject" ),
|
||
|
|
||
|
END_DATADESC()
|
||
|
|
||
|
|
||
|
LINK_ENTITY_TO_CLASS( trigger_fall, CTriggerFall );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Called when spawning, after keyvalues have been handled.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTriggerFall::Spawn( void )
|
||
|
{
|
||
|
BaseClass::Spawn();
|
||
|
InitTrigger();
|
||
|
SetTouch( FallTouch );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Make the object fall away
|
||
|
// Input : pOther - The entity that is touching us.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CTriggerFall::FallTouch( CBaseEntity *pOther )
|
||
|
{
|
||
|
// If it's a player, just kill him for now
|
||
|
if ( pOther->IsPlayer() )
|
||
|
{
|
||
|
if ( pOther->IsAlive() == false )
|
||
|
return;
|
||
|
|
||
|
pOther->TakeDamage( CTakeDamageInfo( this, this, 200, DMG_FALL ) );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Just remove the entity
|
||
|
UTIL_Remove( pOther );
|
||
|
}
|
||
|
|
||
|
// Fire our output
|
||
|
m_OnFallingObject.FireOutput( pOther, this );
|
||
|
}
|