//----------------------------------------------------------------------------- // Spawns headcrabs //----------------------------------------------------------------------------- void CEnvHeadcrabCanister::InputSpawnHeadcrabs( inputdata_t &inputdata ) { if ( m_bLanded && m_bOpened && HasSpawnFlags( SF_WAIT_FOR_INPUT_TO_SPAWN_HEADCRABS ) ) { StartSpawningHeadcrabs( 0.01f ); } }
//----------------------------------------------------------------------------- // Canister finished opening //----------------------------------------------------------------------------- void CEnvHeadcrabCanister::CanisterFinishedOpening( void ) { ResetSequence( LookupSequence( "idle_open" ) ); m_OnOpened.FireOutput( this, this, 0 ); m_bOpened = true; SetContextThink( NULL, gpGlobals->curtime, s_pOpenThinkContext ); if ( !HasSpawnFlags( SF_START_IMPACTED ) ) { if ( !HasSpawnFlags( SF_WAIT_FOR_INPUT_TO_SPAWN_HEADCRABS ) ) { StartSpawningHeadcrabs( 3.0f ); } } }
//----------------------------------------------------------------------------- // Fires the canister! //----------------------------------------------------------------------------- void CEnvHeadcrabCanister::InputFireCanister( inputdata_t &inputdata ) { if (m_bLaunched) return; m_bLaunched = true; if ( HasSpawnFlags( SF_START_IMPACTED ) ) { StartSpawningHeadcrabs( 0.01f ); return; } // Play a firing sound CPASAttenuationFilter filter( this, ATTN_NONE ); if ( !HasSpawnFlags( SF_NO_LAUNCH_SOUND ) ) { EmitSound( filter, entindex(), "HeadcrabCanister.LaunchSound" ); } // Place the canister CE_CSkyCamera *pCamera = PlaceCanisterInWorld(); // Hook up a smoke trail CE_CSpriteTrail *trail = CE_CSpriteTrail::SpriteTrailCreate( "sprites/smoke.vmt", GetAbsOrigin(), true ); trail->SetTransparency( kRenderTransAdd, 224, 224, 255, 255, kRenderFxNone ); trail->SetAttachment( BaseEntity(), 0 ); trail->SetStartWidth( 32.0 ); trail->SetEndWidth( 200.0 ); trail->SetStartWidthVariance( 15.0f ); trail->SetTextureResolution( 0.002 ); trail->SetLifeTime( ENV_HEADCRABCANISTER_TRAIL_TIME ); trail->SetMinFadeLength( 1000.0f ); m_hTrail.Set(trail->BaseEntity()); if ( pCamera && m_Shared.IsInSkybox() ) { m_hTrail->SetSkybox( pCamera->m_skyboxData->origin, pCamera->m_skyboxData->scale ); } // Fire that output! m_OnLaunched.Set( BaseEntity(), BaseEntity(), BaseEntity() ); }