void CHelicopter::startRocket(u16 idx) { if((getRocketCount()>=1)&&m_use_rocket_on_attack) { CExplosiveRocket* pGrenade = smart_cast<CExplosiveRocket*>(getCurrentRocket()); VERIFY(pGrenade); pGrenade->SetInitiator(this->ID()); Fmatrix rocketXFORM; (idx==1)?rocketXFORM=m_left_rocket_bone_xform:rocketXFORM=m_right_rocket_bone_xform; Fvector vel; Fvector dir; dir.sub(m_enemy.destEnemyPos, rocketXFORM.c ).normalize_safe(); vel.mul(dir,CRocketLauncher::m_fLaunchSpeed); Fmatrix xform; xform.identity(); xform.k.set(dir); Fvector::generate_orthonormal_basis(xform.k,xform.j,xform.i); xform.c = rocketXFORM.c; VERIFY2(_valid(xform),"CHelicopter::startRocket. Invalid xform"); LaunchRocket(xform, vel, zero_vel); NET_Packet P; u_EventGen(P,GE_LAUNCH_ROCKET,ID()); P.w_u16(u16( getCurrentRocket()->ID())); u_EventSend(P); dropCurrentRocket(); m_last_launched_rocket = idx; HUD_SOUND_ITEM::PlaySound(m_sndShotRocket, xform.c, this, false); } }
void CGEWeaponRocketLauncher::ItemPostFrame( void ) { if( m_bPreLaunch && m_flRocketSpawnTime < gpGlobals->curtime ) { LaunchRocket(); m_bPreLaunch = false; } BaseClass::ItemPostFrame(); }
void CGEWeaponRocketLauncher::FireNPCPrimaryAttack( CBaseCombatCharacter *pOperator, bool bUseWeaponAngles ) { LaunchRocket(); }