//------------------------------------------------------------------------------ // Purpose : Fire a missile at the target position // Input : // Output : //------------------------------------------------------------------------------ void CTripwireGrenade::FireMissile(const Vector &vTargetPos) { Vector vTargetDir = (vTargetPos - GetAbsOrigin()); VectorNormalize(vTargetDir); float flGravity = 0.0001; // No gravity on the missiles bool bSmokeTrail = true; float flHomingSpeed = 0; Vector vLaunchVelocity = TGRENADE_LAUNCH_VEL*vTargetDir; float flSpinMagnitude = TGRENADE_SPIN_MAG; float flSpinSpeed = TGRENADE_SPIN_SPEED; //<<CHECK>> hold in string_t CGrenadeHomer *pGrenade = CGrenadeHomer::CreateGrenadeHomer( MAKE_STRING(GRENADETRIPWIRE_MISSILEMDL), MAKE_STRING("TripwireGrenade.FlySound"), GetAbsOrigin(), vec3_angle, edict() ); pGrenade->Spawn( ); pGrenade->SetSpin(flSpinMagnitude,flSpinSpeed); pGrenade->SetHoming(0,0,0,0,0); pGrenade->SetDamage(sk_dmg_tripwire.GetFloat()); pGrenade->SetDamageRadius(sk_tripwire_radius.GetFloat()); pGrenade->Launch(this,NULL,vLaunchVelocity,flHomingSpeed,flGravity,bSmokeTrail); // Calculate travel time float flTargetDist = (GetAbsOrigin() - vTargetPos).Length(); pGrenade->m_flDetonateTime = gpGlobals->curtime + flTargetDist/TGRENADE_LAUNCH_VEL; }
//----------------------------------------------------------------------------- // Purpose: Explode // Input : // Output : //----------------------------------------------------------------------------- void CPlayer_Missile::LoseMissileControl(void) { // Create a missile to take the place of this one CGrenadeHomer *pGrenade = (CGrenadeHomer*)CreateEntityByName( "grenade_homer" ); if ( pGrenade ) { pGrenade->Spawn(); pGrenade->SetLocalOrigin( GetLocalOrigin() ); pGrenade->SetLocalAngles( GetLocalAngles() ); pGrenade->SetModel( PMISSILE_MISSILE_MODEL ); pGrenade->SetDamage(m_flDamage); pGrenade->SetDamageRadius(m_flDamageRadius); pGrenade->Launch(this,NULL,GetAbsVelocity(),0,0,HOMER_SMOKE_TRAIL_OFF); pGrenade->m_hRocketTrail[0] = m_hSmokeTrail; ((SmokeTrail*)(CBaseEntity*)m_hSmokeTrail)->FollowEntity(ENTINDEX(pGrenade->pev)); } m_takedamage = DAMAGE_NO; m_lifeState = LIFE_DEAD; StopSound( "Player_Manhack.Fly" ); ControlDeactivate(); }