//----------------------------------------------------------------------------- // Purpose: Strikes once for its configured lifetime. //----------------------------------------------------------------------------- void CEnvBeam::Strike( void ) { CBroadcastRecipientFilter filter; CBaseEntity *pStart = RandomTargetname( STRING(m_iszStartEntity) ); CBaseEntity *pEnd = RandomTargetname( STRING(m_iszEndEntity) ); if ( pStart == NULL || pEnd == NULL ) return; m_speed = (int)clamp( m_speed, 0, MAX_BEAM_SCROLLSPEED ); int pointStart = IsStaticPointEntity( pStart ); int pointEnd = IsStaticPointEntity( pEnd ); if ( pointStart || pointEnd ) { if ( m_spawnflags & SF_BEAM_RING ) { // don't work return; } te->BeamEntPoint( filter, 0.0, pointStart ? 0 : pStart->entindex(), pointStart ? &pStart->GetAbsOrigin() : NULL, pointEnd ? 0 : pEnd->entindex(), pointEnd ? &pEnd->GetAbsOrigin() : NULL, m_spriteTexture, 0, // No halo m_frameStart, (int)m_flFrameRate, m_life, m_boltWidth, m_boltWidth, // End width 0, // No fade m_noiseAmplitude, m_clrRender->r, m_clrRender->g, m_clrRender->b, m_clrRender->a, m_speed ); } else { if ( m_spawnflags & SF_BEAM_RING) { te->BeamRing( filter, 0.0, pStart->entindex(), pEnd->entindex(), m_spriteTexture, 0, // No halo m_frameStart, (int)m_flFrameRate, m_life, m_boltWidth, 0, // No spread m_noiseAmplitude, m_clrRender->r, m_clrRender->g, m_clrRender->b, m_clrRender->a, m_speed ); } else { te->BeamEnts( filter, 0.0, pStart->entindex(), pEnd->entindex(), m_spriteTexture, 0, // No halo m_frameStart, (int)m_flFrameRate, m_life, m_boltWidth, m_boltWidth, // End width 0, // No fade m_noiseAmplitude, m_clrRender->r, m_clrRender->g, m_clrRender->b, m_clrRender->a, m_speed ); } } DoSparks( pStart->GetAbsOrigin(), pEnd->GetAbsOrigin() ); if ( m_flDamage > 0 ) { trace_t tr; UTIL_TraceLine( pStart->GetAbsOrigin(), pEnd->GetAbsOrigin(), MASK_SOLID, NULL, COLLISION_GROUP_NONE, &tr ); BeamDamageInstant( &tr, m_flDamage ); } }
//----------------------------------------------------------------------------- // 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 ); } }
//----------------------------------------------------------------------------- // Purpose: Strikes once for its configured lifetime. //----------------------------------------------------------------------------- void CEnvBeam::Strike( void ) { CBroadcastRecipientFilter filter; CBaseEntity *pStart = RandomTargetname( STRING(m_iszStartEntity) ); CBaseEntity *pEnd = RandomTargetname( STRING(m_iszEndEntity) ); // if the end entity is missing, we use the Hammer-specified vector offset instead. bool bEndPointFromEntity = pEnd != NULL; if ( pStart == NULL || ( !bEndPointFromEntity && !HasEndPointHandle() ) ) return; Vector vEndPointLocation; if ( bEndPointFromEntity ) { vEndPointLocation = pEnd->GetAbsOrigin() ; } else { EntityToWorldSpace( m_vEndPointRelative, &vEndPointLocation ); } m_speed = clamp( m_speed, 0, MAX_BEAM_SCROLLSPEED ); bool pointStart = IsStaticPointEntity( pStart ); bool pointEnd = !bEndPointFromEntity || IsStaticPointEntity( pEnd ); if ( pointStart || pointEnd ) { if ( m_spawnflags & SF_BEAM_RING ) { // don't work return; } te->BeamEntPoint( filter, 0.0, pointStart ? 0 : pStart->entindex(), pointStart ? &pStart->GetAbsOrigin() : NULL, pointEnd ? 0 : pEnd->entindex(), pointEnd ? &vEndPointLocation : NULL, m_spriteTexture, 0, // No halo m_frameStart, (int)m_flFrameRate, m_life, m_boltWidth, m_boltWidth, // End width 0, // No fade m_noiseAmplitude, m_clrRender->r, m_clrRender->g, m_clrRender->b, m_clrRender->a, m_speed ); } else { if ( m_spawnflags & SF_BEAM_RING) { te->BeamRing( filter, 0.0, pStart->entindex(), pEnd->entindex(), m_spriteTexture, 0, // No halo m_frameStart, (int)m_flFrameRate, m_life, m_boltWidth, 0, // No spread m_noiseAmplitude, m_clrRender->r, m_clrRender->g, m_clrRender->b, m_clrRender->a, m_speed ); } else { te->BeamEnts( filter, 0.0, pStart->entindex(), pEnd->entindex(), m_spriteTexture, 0, // No halo m_frameStart, (int)m_flFrameRate, m_life, m_boltWidth, m_boltWidth, // End width 0, // No fade m_noiseAmplitude, m_clrRender->r, m_clrRender->g, m_clrRender->b, m_clrRender->a, m_speed ); } } DoSparks( pStart->GetAbsOrigin(), pEnd->GetAbsOrigin() ); if ( m_flDamage > 0 ) { trace_t tr; UTIL_TraceLine( pStart->GetAbsOrigin(), pEnd->GetAbsOrigin(), MASK_SOLID, NULL, COLLISION_GROUP_NONE, &tr ); BeamDamageInstant( &tr, m_flDamage ); } }