//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CEnvLaser::FireAtPoint( trace_t &tr ) { SetAbsEndPos( tr.endpos ); if ( m_pSprite ) { UTIL_SetOrigin( m_pSprite, tr.endpos ); } // Apply damage and do sparks every 1/10th of a second. if ( gpGlobals->curtime >= m_flFireTime + 0.1 ) { BeamDamage( &tr ); DoSparks( GetAbsStartPos(), tr.endpos ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CEnvBeam::BeamUpdateVars( void ) { CBaseEntity *pStart = gEntList.FindEntityByName( NULL, m_iszStartEntity ); CBaseEntity *pEnd = gEntList.FindEntityByName( NULL, m_iszEndEntity ); if (( pStart == NULL ) || ( pEnd == NULL )) { return; } m_nNumBeamEnts = 2; m_speed = (int)clamp( m_speed, 0, MAX_BEAM_SCROLLSPEED ); // NOTE: If the end entity is the beam itself (and the start entity // isn't *also* the beam itself, we've got problems. This is a problem // because SetAbsStartPos actually sets the entity's origin. if ( ( pEnd == this ) && ( pStart != this ) ) { DevMsg("env_beams cannot have the end entity be the beam itself\n" "unless the start entity is also the beam itself!\n" ); Assert(0); } SetModelName( m_iszSpriteName ); SetTexture( m_spriteTexture ); SetType( BEAM_ENTPOINT ); if ( IsStaticPointEntity( pStart ) ) { SetAbsStartPos( pStart->GetAbsOrigin() ); } else { SetStartEntity( pStart ); } if ( IsStaticPointEntity( pEnd ) ) { SetAbsEndPos( pEnd->GetAbsOrigin() ); } else { SetEndEntity( pEnd ); } RelinkBeam(); SetWidth( MIN(MAX_BEAM_WIDTH, m_boltWidth) ); SetNoise( MIN(MAX_BEAM_NOISEAMPLITUDE, m_noiseAmplitude) ); SetFrame( m_frameStart ); SetScrollRate( m_speed ); if ( m_spawnflags & SF_BEAM_SHADEIN ) { SetBeamFlags( FBEAM_SHADEIN ); } else if ( m_spawnflags & SF_BEAM_SHADEOUT ) { SetBeamFlags( FBEAM_SHADEOUT ); } }