void CElectrifiedWire::DoLightning() { const size_t uiSegment1 = UTIL_RandomLong( 0, GetNumSegments() - 1 ); size_t uiSegment2; size_t uiIndex; //Try to get a random segment. for( uiIndex = 0; uiIndex < 10; ++uiIndex ) { uiSegment2 = UTIL_RandomLong( 0, GetNumSegments() - 1 ); if( uiSegment2 != uiSegment1 ) break; } if( uiIndex >= 10 ) return; CRopeSegment* pSegment1; CRopeSegment* pSegment2; if( GetToggleValue() ) { pSegment1 = GetAltSegments()[ uiSegment1 ]; pSegment2 = GetAltSegments()[ uiSegment2 ]; } else { pSegment1 = GetSegments()[ uiSegment1 ]; pSegment2 = GetSegments()[ uiSegment2 ]; } MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_BEAMENTS ); WRITE_SHORT( pSegment1->entindex() ); WRITE_SHORT( pSegment2->entindex() ); WRITE_SHORT( m_iLightningSprite ); WRITE_BYTE( 0 ); WRITE_BYTE( 0 ); WRITE_BYTE( 1 ); WRITE_BYTE( 10 ); WRITE_BYTE( 80 ); WRITE_BYTE( 255 ); WRITE_BYTE( 255 ); WRITE_BYTE( 255 ); WRITE_BYTE( 255 ); WRITE_BYTE( 255 ); MESSAGE_END(); }
void CElectrifiedWire::Think() { if( gpGlobals->time - m_flLastSparkTime > 0.1 ) { m_flLastSparkTime = gpGlobals->time; if( m_uiNumUninsulatedSegments > 0 ) { for( size_t uiIndex = 0; uiIndex < m_uiNumUninsulatedSegments; ++uiIndex ) { if( ShouldDoEffect( m_iBodySparkFrequency ) ) { DoSpark( m_uiUninsulatedSegments[ uiIndex ], false ); } } } if( ShouldDoEffect( m_iTipSparkFrequency ) ) { DoSpark( GetNumSegments() - 1, true ); } if( ShouldDoEffect( m_iLightningFrequency ) ) DoLightning(); } BaseClass::Think(); }
void CElectrifiedWire::Use( CBaseEntity* pActivator, CBaseEntity* pCaller, USE_TYPE useType, float flValue ) { m_bIsActive = !m_bIsActive; if( m_uiNumUninsulatedSegments > 0 ) { for( size_t uiIndex = 0; uiIndex < m_uiNumUninsulatedSegments; ++uiIndex ) { GetSegments()[ m_uiUninsulatedSegments[ uiIndex ] ]->SetCauseDamageOnTouch( m_bIsActive ); GetAltSegments()[ m_uiUninsulatedSegments[ uiIndex ] ]->SetCauseDamageOnTouch( m_bIsActive ); } } if( m_iTipSparkFrequency > 0 ) { GetSegments()[ GetNumSegments() - 1 ]->SetCauseDamageOnTouch( m_bIsActive ); GetAltSegments()[ GetNumSegments() - 1 ]->SetCauseDamageOnTouch( m_bIsActive ); } }
void CElectrifiedWire::Spawn() { BaseClass::Spawn(); m_uiNumUninsulatedSegments = 0; m_bIsActive = true; if( m_iBodySparkFrequency > 0 ) { for( size_t uiIndex = 0; uiIndex < GetNumSegments(); ++uiIndex ) { if( IsValidSegmentIndex( uiIndex ) ) { m_uiUninsulatedSegments[ m_uiNumUninsulatedSegments++ ] = uiIndex; } } } if( m_uiNumUninsulatedSegments > 0 ) { for( size_t uiIndex = 0; uiIndex < m_uiNumUninsulatedSegments; ++uiIndex ) { GetSegments()[ uiIndex ]->SetCauseDamageOnTouch( m_bIsActive ); GetAltSegments()[ uiIndex ]->SetCauseDamageOnTouch( m_bIsActive ); } } if( m_iTipSparkFrequency > 0 ) { GetSegments()[ GetNumSegments() - 1 ]->SetCauseDamageOnTouch( m_bIsActive ); GetAltSegments()[ GetNumSegments() - 1 ]->SetCauseDamageOnTouch( m_bIsActive ); } m_flLastSparkTime = gpGlobals->time; SetSoundAllowed( false ); }
ElfReader::ElfReader(void *ptr) { base = (char*)ptr; base32 = (u32 *)ptr; header = (Elf32_Ehdr*)ptr; byteswapHeader(*header); segments = (Elf32_Phdr *)(base + header->e_phoff); sections = (Elf32_Shdr *)(base + header->e_shoff); for (int i = 0; i < GetNumSegments(); i++) { byteswapSegment(segments[i]); } for (int i = 0; i < GetNumSections(); i++) { byteswapSection(sections[i]); } entryPoint = header->e_entry; }