mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-21 04:56:01 +08:00
Added original SDK code for Alien Swarm.
This commit is contained in:
133
game/server/cbaseprojectile.cpp
Normal file
133
game/server/cbaseprojectile.cpp
Normal file
@ -0,0 +1,133 @@
|
||||
//========= Copyright <20> 1996-2007, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Base class for simple projectiles that use studio models
|
||||
//
|
||||
// $Workfile: $
|
||||
// $Date: $
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
// This file was made before I
|
||||
// realized Portal had already
|
||||
// made the same thing
|
||||
// (probably because it was
|
||||
// squirreled away in the PORTAL
|
||||
// source folder). Anyway, this
|
||||
// needs to be reconciled with that
|
||||
// file since clearly there is
|
||||
// demand for this feature (sjb) 11/27/07
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
||||
#include "cbase.h"
|
||||
#include "cbaseprojectile.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS( baseprojectile, CBaseProjectile );
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Save/Restore
|
||||
//---------------------------------------------------------
|
||||
BEGIN_DATADESC( CBaseProjectile )
|
||||
|
||||
DEFINE_FIELD( m_iDmg, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( m_iDmgType, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( m_hIntendedTarget, FIELD_EHANDLE ),
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
//---------------------------------------------------------
|
||||
//---------------------------------------------------------
|
||||
void CBaseProjectile::Spawn( char *pszModel,
|
||||
const Vector &vecOrigin,
|
||||
const Vector &vecVelocity,
|
||||
edict_t *pOwner,
|
||||
MoveType_t iMovetype,
|
||||
MoveCollide_t nMoveCollide,
|
||||
int iDamage,
|
||||
int iDamageType,
|
||||
CBaseEntity *pIntendedTarget )
|
||||
{
|
||||
Precache();
|
||||
|
||||
SetModel( pszModel );
|
||||
|
||||
m_iDmg = iDamage;
|
||||
m_iDmgType = iDamageType;
|
||||
|
||||
|
||||
SetMoveType( iMovetype, nMoveCollide );
|
||||
UTIL_SetSize( this, -Vector(1,1,1), Vector(1,1,1) );
|
||||
SetSolid( SOLID_BBOX );
|
||||
|
||||
SetCollisionGroup( COLLISION_GROUP_PROJECTILE );
|
||||
|
||||
UTIL_SetOrigin( this, vecOrigin );
|
||||
SetAbsVelocity( vecVelocity );
|
||||
|
||||
SetOwnerEntity( Instance( pOwner ) );
|
||||
|
||||
m_hIntendedTarget.Set( pIntendedTarget );
|
||||
|
||||
QAngle angles;
|
||||
|
||||
VectorAngles( vecVelocity, angles );
|
||||
|
||||
SetAbsAngles( angles );
|
||||
|
||||
// Call think for free the first time. It's up to derived classes to rethink.
|
||||
SetNextThink( gpGlobals->curtime );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
//---------------------------------------------------------
|
||||
void CBaseProjectile::Touch( CBaseEntity *pOther )
|
||||
{
|
||||
if ( pOther->IsSolidFlagSet(FSOLID_TRIGGER) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
HandleTouch( pOther );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
//---------------------------------------------------------
|
||||
void CBaseProjectile::HandleTouch( CBaseEntity *pOther )
|
||||
{
|
||||
CBaseEntity *pOwner;
|
||||
|
||||
pOwner = GetOwnerEntity();
|
||||
|
||||
if( !pOwner )
|
||||
{
|
||||
pOwner = this;
|
||||
}
|
||||
|
||||
trace_t tr;
|
||||
tr = BaseClass::GetTouchTrace( );
|
||||
|
||||
CTakeDamageInfo info( this, pOwner, m_iDmg, m_iDmgType );
|
||||
GuessDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos );
|
||||
pOther->TakeDamage( info );
|
||||
|
||||
UTIL_Remove( this );
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
//---------------------------------------------------------
|
||||
void CBaseProjectile::Think()
|
||||
{
|
||||
HandleThink();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
//---------------------------------------------------------
|
||||
void CBaseProjectile::HandleThink()
|
||||
{
|
||||
}
|
||||
|
Reference in New Issue
Block a user