|
|
@ -23,26 +23,46 @@ void CBaseHL1CombatWeapon::Precache() |
|
|
|
PrecacheScriptSound( "BaseCombatWeapon.WeaponDrop" ); |
|
|
|
PrecacheScriptSound( "BaseCombatWeapon.WeaponDrop" ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool CBaseHL1CombatWeapon::CreateVPhysics( void ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); |
|
|
|
|
|
|
|
IPhysicsObject *pPhysObj = VPhysicsGetObject(); |
|
|
|
|
|
|
|
if ( pPhysObj ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
pPhysObj->SetMass( 30 ); |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Purpose:
|
|
|
|
// Purpose:
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void CBaseHL1CombatWeapon::FallInit( void ) |
|
|
|
void CBaseHL1CombatWeapon::FallInit( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
SetModel( GetWorldModel() ); |
|
|
|
SetModel( GetWorldModel() ); |
|
|
|
SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); |
|
|
|
|
|
|
|
SetSolid( SOLID_BBOX ); |
|
|
|
if( !CreateVPhysics() ) |
|
|
|
AddSolidFlags( FSOLID_TRIGGER ); |
|
|
|
{ |
|
|
|
AddSolidFlags( FSOLID_NOT_SOLID ); |
|
|
|
SetSolid( SOLID_BBOX ); |
|
|
|
|
|
|
|
SetMoveType( MOVETYPE_FLYGRAVITY ); |
|
|
|
|
|
|
|
SetSolid( SOLID_BBOX ); |
|
|
|
|
|
|
|
AddSolidFlags( FSOLID_TRIGGER ); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
SetPickupTouch(); |
|
|
|
SetPickupTouch(); |
|
|
|
|
|
|
|
|
|
|
|
SetThink( &CBaseHL1CombatWeapon::FallThink ); |
|
|
|
SetThink( &CBaseHL1CombatWeapon::FallThink ); |
|
|
|
|
|
|
|
|
|
|
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
|
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
|
|
|
|
|
|
|
|
|
|
// HACKHACK - On ground isn't always set, so look for ground underneath
|
|
|
|
// HACKHACK - On ground isn't always set, so look for ground underneath
|
|
|
|
trace_t tr; |
|
|
|
trace_t tr; |
|
|
|
UTIL_TraceLine( GetAbsOrigin(), GetAbsOrigin() - Vector(0,0,2), MASK_SOLID_BRUSHONLY, this, COLLISION_GROUP_NONE, &tr ); |
|
|
|
UTIL_TraceLine( GetAbsOrigin(), GetAbsOrigin() - Vector(0,0,256), MASK_SOLID_BRUSHONLY, this, COLLISION_GROUP_NONE, &tr ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetAbsOrigin( tr.endpos ); |
|
|
|
|
|
|
|
|
|
|
|
if ( tr.fraction < 1.0 ) |
|
|
|
if ( tr.fraction < 1.0 ) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -63,7 +83,20 @@ void CBaseHL1CombatWeapon::FallThink ( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
|
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
|
|
|
|
|
|
|
|
|
|
if ( GetFlags() & FL_ONGROUND ) |
|
|
|
bool shouldMaterialize = false; |
|
|
|
|
|
|
|
IPhysicsObject *pPhysics = VPhysicsGetObject(); |
|
|
|
|
|
|
|
if ( pPhysics ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
shouldMaterialize = pPhysics->IsAsleep(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
shouldMaterialize = (GetFlags() & FL_ONGROUND) ? true : false; |
|
|
|
|
|
|
|
if( shouldMaterialize ) |
|
|
|
|
|
|
|
SetSize( Vector( -24, -24, 0 ), Vector( 24, 24, 16 ) ); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( shouldMaterialize ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// clatter if we have an owner (i.e., dropped by someone)
|
|
|
|
// clatter if we have an owner (i.e., dropped by someone)
|
|
|
|
// don't clatter if the gun is waiting to respawn (if it's waiting, it is invisible!)
|
|
|
|
// don't clatter if the gun is waiting to respawn (if it's waiting, it is invisible!)
|
|
|
@ -73,14 +106,8 @@ void CBaseHL1CombatWeapon::FallThink ( void ) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// lie flat
|
|
|
|
// lie flat
|
|
|
|
QAngle ang = GetAbsAngles(); |
|
|
|
Materialize(); |
|
|
|
ang.x = 0; |
|
|
|
|
|
|
|
ang.z = 0; |
|
|
|
|
|
|
|
SetAbsAngles( ang ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Materialize(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetSize( Vector( -24, -24, 0 ), Vector( 24, 24, 16 ) ); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|