// // Touching a button simply "activates" it. // void CBaseButton::ButtonTouch(CBaseEntity *pOther) { // Ignore touches by anything but players if(!FClassnameIs(pOther->pev, "player")) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if(code == BUTTON_NOTHING) return; if(!UTIL_IsMasterTriggered(m_sMaster, pOther)) { // play button locked sound PlayLockSounds(pev, &m_ls, TRUE, TRUE); return; } // Temporarily disable the touch function, until movement is finished. SetTouch(NULL); if(code == BUTTON_RETURN) { EMIT_SOUND(ENT(pev), CHAN_VOICE, (char *)STRING(pev->noise), 1, ATTN_NORM); SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); ButtonReturn(); } else // code == BUTTON_ACTIVATE ButtonActivate(); }
void CBaseButton:: ButtonTouch( CBaseEntity *pOther ) { // ignore touches by anything but players if( !pOther->IsPlayer( )) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if( code == BUTTON_NOTHING ) return; if( IsLockedByMaster( )) { // play button locked sound PlayLockSounds( pev, &m_ls, TRUE, TRUE ); return; } // temporarily disable the touch function, until movement is finished. SetTouch( NULL ); if( code == BUTTON_RETURN ) { EMIT_SOUND( edict(), CHAN_VOICE, STRING( pev->noise ), 1, ATTN_NORM ); SUB_UseTargets( m_hActivator, USE_TOGGLE, 0 ); ButtonReturn(); } else { ButtonActivate( ); } }
// // ButtonShot // int CBaseButton::TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) { BUTTON_CODE code = ButtonResponseToTouch(); if(code == BUTTON_NOTHING) return 0; // Temporarily disable the touch function, until movement is finished. SetTouch(NULL); m_hActivator = CBaseEntity::Instance(pevAttacker); if(m_hActivator == NULL) return 0; if(code == BUTTON_RETURN) { EMIT_SOUND(ENT(pev), CHAN_VOICE, (char *)STRING(pev->noise), 1, ATTN_NORM); // Toggle buttons fire when they get back to their "home" position if(!(pev->spawnflags & SF_BUTTON_TOGGLE)) SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); ButtonReturn(); } else // code == BUTTON_ACTIVATE ButtonActivate(); return 0; }
int CBaseButton :: TakeDamage( entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType ) { if( FBitSet( pev->spawnflags, SF_BUTTON_DAMAGED_AT_LASER ) && !( bitsDamageType & DMG_ENERGYBEAM )) return 0; BUTTON_CODE code = ButtonResponseToTouch(); if( code == BUTTON_NOTHING ) return 0; // temporarily disable the touch function, until movement is finished. SetTouch( NULL ); m_hActivator = CBaseEntity::Instance( pevAttacker ); if( m_hActivator == NULL ) return 0; if( code == BUTTON_RETURN ) { EMIT_SOUND( edict(), CHAN_VOICE, STRING( pev->noise ), 1, ATTN_NORM ); // toggle buttons fire when they get back to their "home" position if( !FBitSet( pev->spawnflags, SF_BUTTON_TOGGLE )) SUB_UseTargets( m_hActivator, USE_TOGGLE, 0 ); ButtonReturn(); } else { // code == BUTTON_ACTIVATE ButtonActivate( ); } return 0; }
void CBaseButton::ButtonTouch(CBaseEntity *pOther) { if (!FClassnameIs(pOther->pev, "player")) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if (code == BUTTON_NOTHING) return; if (!UTIL_IsMasterTriggered(m_sMaster, pOther)) { PlayLockSounds(pev, &m_ls, TRUE, TRUE); return; } SetTouch(NULL); if (code == BUTTON_RETURN) { EMIT_SOUND(ENT(pev), CHAN_VOICE, STRING(pev->noise), VOL_NORM, ATTN_NORM); SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); ButtonReturn(); } else ButtonActivate(); }
int CBaseButton::TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType) { BUTTON_CODE code = ButtonResponseToTouch(); if (code == BUTTON_NOTHING) return 0; SetTouch(NULL); m_hActivator = CBaseEntity::Instance(pevAttacker); if (m_hActivator == NULL) return 0; if (code == BUTTON_RETURN) { EMIT_SOUND(ENT(pev), CHAN_VOICE, STRING(pev->noise), VOL_NORM, ATTN_NORM); if (!(pev->spawnflags & SF_BUTTON_TOGGLE)) SUB_UseTargets(m_hActivator, USE_TOGGLE, 0); ButtonReturn(); } else ButtonActivate(); return 0; }
//----------------------------------------------------------------------------- // Purpose: We have been damaged. Possibly activate, depending on our flags. // Input : pInflictor - // pAttacker - // flDamage - // bitsDamageType - // Output : //----------------------------------------------------------------------------- int CBaseButton::OnTakeDamage( const CTakeDamageInfo &info ) { m_OnDamaged.FireOutput(m_hActivator, this); // dvsents2: remove obselete health keyvalue from func_button if (!HasSpawnFlags(SF_BUTTON_DAMAGE_ACTIVATES) && (m_iHealth == 0)) { return(0); } BUTTON_CODE code = ButtonResponseToTouch(); if ( code == BUTTON_NOTHING ) return 0; m_hActivator = info.GetAttacker(); // dvsents2: why would activator be NULL here? if ( m_hActivator == NULL ) return 0; if (m_bLocked) { return(0); } // Temporarily disable the touch function, until movement is finished. SetTouch( NULL ); if ( code == BUTTON_RETURN ) { if ( m_sNoise != NULL_STRING ) { CPASAttenuationFilter filter( this ); EmitSound_t ep; ep.m_nChannel = CHAN_VOICE; ep.m_pSoundName = (char*)STRING(m_sNoise); ep.m_flVolume = 1; ep.m_SoundLevel = SNDLVL_NORM; EmitSound( filter, entindex(), ep ); } m_OnPressed.FireOutput(m_hActivator, this); ButtonReturn(); } else { // code == BUTTON_ACTIVATE m_OnPressed.FireOutput(m_hActivator, this); ButtonActivate( ); } return 0; }
//----------------------------------------------------------------------------- // Purpose: Touch function that activates the button if it responds to touch. // Input : pOther - The entity that touched us. //----------------------------------------------------------------------------- void CBaseButton::ButtonTouch( CBaseEntity *pOther ) { // Ignore touches by anything but players if ( !pOther->IsPlayer() ) return; m_hActivator = pOther; BUTTON_CODE code = ButtonResponseToTouch(); if ( code == BUTTON_NOTHING ) return; if (!UTIL_IsMasterTriggered(m_sMaster, pOther) || m_bLocked) { // play button locked sound PlayLockSounds(this, &m_ls, TRUE, TRUE); return; } // Temporarily disable the touch function, until movement is finished. SetTouch( NULL ); if ( code == BUTTON_RETURN ) { if ( m_sNoise != NULL_STRING ) { CPASAttenuationFilter filter( this ); EmitSound_t ep; ep.m_nChannel = CHAN_VOICE; ep.m_pSoundName = (char*)STRING(m_sNoise); ep.m_flVolume = 1; ep.m_SoundLevel = SNDLVL_NORM; EmitSound( filter, entindex(), ep ); } m_OnPressed.FireOutput(m_hActivator, this); ButtonReturn(); } else { // code == BUTTON_ACTIVATE m_OnPressed.FireOutput(m_hActivator, this); ButtonActivate( ); } }