void CWeaponHL2MPBase::Materialize( void ) { if ( IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. EmitSound( "AlyxEmp.Charge" ); RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } if ( HasSpawnFlags( SF_NORESPAWN ) == false ) { VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); HL2MPRules()->AddLevelDesignerPlacedObject( this ); } if ( HasSpawnFlags( SF_NORESPAWN ) == false ) { if ( GetOriginalSpawnOrigin() == vec3_origin ) { m_vOriginalSpawnOrigin = GetAbsOrigin(); m_vOriginalSpawnAngles = GetAbsAngles(); } } SetPickupTouch(); SetThink (NULL); }
//==================================================================================== // WEAPON SPAWNING //==================================================================================== //----------------------------------------------------------------------------- // Purpose: Make a weapon visible and tangible //-----------------------------------------------------------------------------// void CBaseCombatWeapon::Materialize( void ) { if ( IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. #ifdef HL2MP EmitSound( "AlyxEmp.Charge" ); #else EmitSound( "BaseCombatWeapon.WeaponMaterialize" ); #endif RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } #ifdef HL2MP if ( HasSpawnFlags( SF_NORESPAWN ) == false ) { VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); HL2MPRules()->AddLevelDesignerPlacedObject( this ); } #else SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_TRIGGER ); #endif SetPickupTouch(); SetThink (NULL); }
bool CItem::CreateItemVPhysicsObject( void ) { // Create the object in the physics system int nSolidFlags = GetSolidFlags() | FSOLID_NOT_STANDABLE; if ( !m_bActivateWhenAtRest ) { nSolidFlags |= FSOLID_TRIGGER; } if ( VPhysicsInitNormal( SOLID_VPHYSICS, nSolidFlags, false ) == NULL ) { SetSolid( SOLID_BBOX ); AddSolidFlags( nSolidFlags ); // If it's not physical, drop it to the floor if (UTIL_DropToFloor(this, MASK_SOLID) == 0) { Warning( "Item %s fell out of level at %f,%f,%f\n", GetClassname(), GetAbsOrigin().x, GetAbsOrigin().y, GetAbsOrigin().z); UTIL_Remove( this ); return false; } } return true; }
void CGEGrenade::Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel( "models/weapons/grenade/w_grenade.mdl" ); // So NPC's can "see" us AddFlag( FL_OBJECT ); m_takedamage = DAMAGE_YES; m_iHealth = 1; m_bHitSomething = false; m_bDroppedOnDeath = false; // Default Damages they should be modified by the thrower SetDamage( 320 ); SetDamageRadius( 260 ); SetSize( -Vector(4,4,4), Vector(4,4,4) ); SetCollisionGroup( COLLISION_GROUP_MINE ); // Init our physics definition VPhysicsInitNormal( SOLID_VPHYSICS, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); // Don't think until we have a time to think about! SetThink( NULL ); // Bounce if we hit something! SetTouch( &BaseClass::BounceTouch ); AddSolidFlags( FSOLID_NOT_STANDABLE ); }
void CSatchelCharge::Spawn( void ) { Precache( ); SetModel( "models/Weapons/w_slam.mdl" ); VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); SetCollisionGroup( COLLISION_GROUP_WEAPON ); UTIL_SetSize(this, Vector( -6, -6, -2), Vector(6, 6, 2)); SetThink( &CSatchelCharge::SatchelThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_plr_dmg_satchel.GetFloat(); m_DmgRadius = sk_satchel_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( 560 ) ); // slightly lower gravity SetFriction( 1.0 ); SetSequence( 1 ); SetDamage( 150 ); m_bIsAttached = false; m_bInAir = true; m_flNextBounceSoundTime = 0; m_vLastPosition = vec3_origin; m_hGlowSprite = NULL; CreateEffects(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CGETKnife::Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel( "models/weapons/knife/w_tknife.mdl" ); SetSize( -Vector(8,8,8), Vector(8,8,8) ); // Init our physics definition VPhysicsInitNormal( SOLID_VPHYSICS, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); SetCollisionGroup( COLLISION_GROUP_GRENADE ); // No Air-Drag, lower gravity VPhysicsGetObject()->EnableDrag( false ); SetGravity( UTIL_ScaleForGravity( 540.0f ) ); m_bInAir = true; m_takedamage = DAMAGE_NO; AddSolidFlags( FSOLID_NOT_STANDABLE ); m_flStopFlyingTime = gpGlobals->curtime + 4.5f; // const CBaseEntity *host = te->GetSuppressHost(); // te->SetSuppressHost( NULL ); // DispatchParticleEffect( "tracer_tknife", PATTACH_POINT_FOLLOW, this, "tip" ); // te->SetSuppressHost( (CBaseEntity*)host ); SetTouch( &CGETKnife::DamageTouch ); SetThink( &CGETKnife::SoundThink ); SetNextThink( gpGlobals->curtime ); }
bool CPhysBox::CreateVPhysics() { solid_t tmpSolid; PhysModelParseSolid( tmpSolid, this, GetModelIndex() ); if ( m_massScale > 0 ) { float mass = tmpSolid.params.mass * m_massScale; mass = clamp( mass, 0.5, 1e6 ); tmpSolid.params.mass = mass; } PhysSolidOverride( tmpSolid, m_iszOverrideScript ); IPhysicsObject *pPhysics = VPhysicsInitNormal( GetSolid(), GetSolidFlags(), true, &tmpSolid ); if ( m_damageType == 1 ) { PhysSetGameFlags( pPhysics, FVPHYSICS_DMG_SLICE ); } // Wake it up if not asleep if ( !HasSpawnFlags(SF_PHYSBOX_ASLEEP) ) { VPhysicsGetObject()->Wake(); } if ( HasSpawnFlags(SF_PHYSBOX_MOTIONDISABLED) || m_damageToEnableMotion > 0 ) { VPhysicsGetObject()->EnableMotion( false ); } // only send data when physics moves this object NetworkStateManualMode( true ); return true; }
//----------------------------------------------------------------------------- // Special trigger representation (OBB) //----------------------------------------------------------------------------- void CCollisionProperty::WorldSpaceTriggerBounds( Vector *pVecWorldMins, Vector *pVecWorldMaxs ) const { WorldSpaceAABB( pVecWorldMins, pVecWorldMaxs ); if ( ( GetSolidFlags() & FSOLID_USE_TRIGGER_BOUNDS ) == 0 ) return; // Don't bloat below, we don't want to trigger it with our heads pVecWorldMins->x -= m_triggerBloat; pVecWorldMins->y -= m_triggerBloat; pVecWorldMaxs->x += m_triggerBloat; pVecWorldMaxs->y += m_triggerBloat; pVecWorldMaxs->z += (float)m_triggerBloat * 0.5f; }
//==================================================================================== // FALL TO GROUND //==================================================================================== //----------------------------------------------------------------------------- // Purpose: Setup for the fall //----------------------------------------------------------------------------- void CBaseCombatWeapon::FallInit( void ) { SetModel( GetWorldModel() ); VPhysicsDestroyObject(); if ( !VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ) ) { SetMoveType( MOVETYPE_FLYGRAVITY ); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_TRIGGER ); } else { #if !defined( CLIENT_DLL ) // Constrained start? if ( HasSpawnFlags( SF_WEAPON_START_CONSTRAINED ) ) { //Constrain the weapon in place IPhysicsObject *pReferenceObject, *pAttachedObject; pReferenceObject = g_PhysWorldObject; pAttachedObject = VPhysicsGetObject(); if ( pReferenceObject && pAttachedObject ) { constraint_fixedparams_t fixed; fixed.Defaults(); fixed.InitWithCurrentObjectState( pReferenceObject, pAttachedObject ); fixed.constraint.forceLimit = lbs2kg( 10000 ); fixed.constraint.torqueLimit = lbs2kg( 10000 ); m_pConstraint = physenv->CreateFixedConstraint( pReferenceObject, pAttachedObject, NULL, fixed ); m_pConstraint->SetGameData( (void *) this ); } } #endif //CLIENT_DLL } SetPickupTouch(); SetThink( &CBaseCombatWeapon::FallThink ); SetNextThink( gpGlobals->curtime + 0.1f ); }
void CBaseCombatWeapon::Materialize( void ) { if ( IsEffectActive( EF_NODRAW ) ) { RemoveEffects( EF_NODRAW ); // DoMuzzleFlash(); } // if ( HasSpawnFlags( SF_NORESPAWN ) == false ) // { VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); // } SetPickupTouch(); SetThink (NULL); }
void CTripmineGrenade::Spawn( void ) { Precache( ); // motor SetMoveType( MOVETYPE_FLY ); SetSolid( SOLID_BBOX ); SetModel( "models/Weapons/w_slam.mdl" ); IPhysicsObject *pObject = VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, true ); pObject->EnableMotion( false ); SetCollisionGroup( COLLISION_GROUP_WEAPON ); SetCycle( 0.0f ); m_nBody = 3; m_flDamage = sk_plr_dmg_tripmine.GetFloat(); m_DmgRadius = sk_tripmine_radius.GetFloat(); ResetSequenceInfo( ); m_flPlaybackRate = 0; UTIL_SetSize(this, Vector( -4, -4, -2), Vector(4, 4, 2)); m_flPowerUp = gpGlobals->curtime + 2.0; SetThink( &CTripmineGrenade::PowerupThink ); SetNextThink( gpGlobals->curtime + 0.2 ); m_takedamage = DAMAGE_YES; m_iHealth = 1; EmitSound( "TripmineGrenade.Place" ); SetDamage ( 200 ); // Tripmine sits at 90 on wall so rotate back to get m_vecDir QAngle angles = GetAbsAngles(); angles.x -= 90; AngleVectors( angles, &m_vecDir ); m_vecEnd = GetAbsOrigin() + m_vecDir * 2048; AddEffects( EF_NOSHADOW ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CPhysMagnet::Spawn( void ) { Precache(); SetMoveType( MOVETYPE_NONE ); SetSolid( SOLID_VPHYSICS ); SetModel( STRING( GetModelName() ) ); m_takedamage = DAMAGE_EVENTS_ONLY; solid_t tmpSolid; PhysModelParseSolid( tmpSolid, this, GetModelIndex() ); if ( m_massScale > 0 ) { float mass = tmpSolid.params.mass * m_massScale; mass = clamp( mass, 0.5, 1e6 ); tmpSolid.params.mass = mass; } PhysSolidOverride( tmpSolid, m_iszOverrideScript ); VPhysicsInitNormal( GetSolid(), GetSolidFlags(), true, &tmpSolid ); // Wake it up if not asleep if ( !HasSpawnFlags(SF_MAGNET_ASLEEP) ) { VPhysicsGetObject()->Wake(); } if ( HasSpawnFlags(SF_MAGNET_MOTIONDISABLED) ) { VPhysicsGetObject()->EnableMotion( false ); } m_bActive = true; m_pConstraintGroup = NULL; m_flTotalMass = 0; m_flNextSuckTime = 0; BaseClass::Spawn(); }
void CHoldout::Spawn( void ) { #ifdef MFS if (HL2MPRules()->IsHoldout() == false) { return; } #endif Precache( ); SetModel( "models/objectives/holdout/holdout.mdl" ); VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetCollisionGroup(COLLISION_GROUP_INTERACTIVE); //UTIL_SetSize(this, Vector( -6, -6, -2), Vector(6, 6, 2)); SetUse( &CHoldout::HoldoutUse ); SetThink( &CHoldout::HoldoutThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_hGlowSprite = NULL; }
void Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel(ENTITY_MODEL); SetMoveType(MOVETYPE_FLYGRAVITY); SetSolid(SOLID_BBOX); SetBlocksLOS(false); AddEFlags(EFL_NO_ROTORWASH_PUSH); SetCollisionGroup(COLLISION_GROUP_WEAPON); int nSolidFlags = GetSolidFlags() | FSOLID_NOT_STANDABLE | FSOLID_NOT_STANDABLE | FSOLID_TRIGGER | FSOLID_USE_TRIGGER_BOUNDS; VPhysicsInitNormal(SOLID_VPHYSICS, nSolidFlags, false); CollisionProp()->UseTriggerBounds(true, 64); SetUse(&CItemFlashlightBattery::Pickup); SetGlow(true); };