//----------------------------------------------------------------------------- // Purpose: check if weapon viewmodel should be drawn //----------------------------------------------------------------------------- bool C_BaseViewModel::ShouldDraw() { if ( g_bEngineIsHLTV ) { return ( HLTVCamera()->GetMode() == OBS_MODE_IN_EYE && HLTVCamera()->GetPrimaryTarget() == GetOwner() ); } #if defined( REPLAY_ENABLED ) else if ( engine->IsReplay() ) { return ( ReplayCamera()->GetMode() == OBS_MODE_IN_EYE && ReplayCamera()->GetPrimaryTarget() == GetOwner() ); } #endif else { Assert( !IsEffectActive( EF_NODRAW ) ); Assert( GetRenderMode() != kRenderNone ); if ( vm_draw_always.GetBool() ) return true; if ( GetOwner() != C_BasePlayer::GetLocalPlayer() ) return false; return BaseClass::ShouldDraw(); } }
// Alien Swarm weapons use custom bone merge cache so they can pitch the guns up slightly void C_ASW_Weapon::CalcBoneMerge( CStudioHdr *hdr, int boneMask, CBoneBitList &boneComputed ) { // For EF_BONEMERGE entities, copy the bone matrices for any bones that have matching names. bool boneMerge = IsEffectActive(EF_BONEMERGE); if ( boneMerge || m_pBoneMergeCache ) { if ( boneMerge ) { if ( !m_pBoneMergeCache ) { m_pBoneMergeCache = new CASW_Bone_Merge_Cache; m_pBoneMergeCache->Init( this ); } CASW_Bone_Merge_Cache *pASWBoneMergeCache = static_cast<CASW_Bone_Merge_Cache*>( m_pBoneMergeCache ); pASWBoneMergeCache->MergeMatchingBones( boneMask, boneComputed, ShouldAlignWeaponToLaserPointer(), m_vecLaserPointerDirection ); int iAttachment = GetMuzzleAttachment(); if ( iAttachment > 0 && m_pLaserPointerEffect ) { Vector vecOrigin; QAngle angWeapon; GetAttachment( iAttachment, vecOrigin, angWeapon ); m_pLaserPointerEffect->SetControlPoint( 1, vecOrigin ); } } else { delete m_pBoneMergeCache; m_pBoneMergeCache = NULL; } } }
// Smoke grenade particles should always transmitted to clients. If not, a client who // enters the PVS late will see the smoke start billowing from then, allowing better vision. int ParticleSmokeGrenade::UpdateTransmitState( void ) { if ( IsEffectActive( EF_NODRAW ) ) return SetTransmitState( FL_EDICT_DONTSEND ); return SetTransmitState( FL_EDICT_ALWAYS ); }
//IOS Added from HLCoders: ShadowType_t C_SDKPlayer::ShadowCastType( void ) { if ( !IsVisible() || IsEffectActive(EF_NODRAW | EF_NOSHADOW) ) return SHADOWS_NONE; else return SHADOWS_RENDER_TO_TEXTURE_DYNAMIC; }
void CWeaponHL2MPBase::Materialize( void ) { if ( IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. EmitSound( "AlyxEmp.Charge" ); RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } if ( HasSpawnFlags( SF_NORESPAWN ) == false ) { VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); HL2MPRules()->AddLevelDesignerPlacedObject( this ); } if ( HasSpawnFlags( SF_NORESPAWN ) == false ) { if ( GetOriginalSpawnOrigin() == vec3_origin ) { m_vOriginalSpawnOrigin = GetAbsOrigin(); m_vOriginalSpawnAngles = GetAbsAngles(); } } SetPickupTouch(); SetThink (NULL); }
//==================================================================================== // WEAPON SPAWNING //==================================================================================== //----------------------------------------------------------------------------- // Purpose: Make a weapon visible and tangible //-----------------------------------------------------------------------------// void CBaseCombatWeapon::Materialize( void ) { if ( IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. #ifdef HL2MP EmitSound( "AlyxEmp.Charge" ); #else EmitSound( "BaseCombatWeapon.WeaponMaterialize" ); #endif RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } #ifdef HL2MP if ( HasSpawnFlags( SF_NORESPAWN ) == false ) { VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); HL2MPRules()->AddLevelDesignerPlacedObject( this ); } #else SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_TRIGGER ); #endif SetPickupTouch(); SetThink (NULL); }
void C_ASW_Buzzer::UpdateFireEmitters() { bool bOnFire = (m_bOnFire && !IsEffectActive(EF_NODRAW)); if (bOnFire != m_bClientOnFire) { m_bClientOnFire = bOnFire; if (m_bClientOnFire) { if ( !m_pBurningEffect ) { m_pBurningEffect = UTIL_ASW_CreateFireEffect( this ); } EmitSound( "ASWFire.BurningFlesh" ); } else { if ( m_pBurningEffect ) { ParticleProp()->StopEmission( m_pBurningEffect ); m_pBurningEffect = NULL; } StopSound("ASWFire.BurningFlesh"); if ( C_BaseEntity::IsAbsQueriesValid() ) EmitSound("ASWFire.StopBurning"); } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_EntityFlame::Simulate( void ) { if ( gpGlobals->frametime <= 0.0f ) return; if ( IsEffectActive(EF_BRIGHTLIGHT) || IsEffectActive(EF_DIMLIGHT) ) { dlight_t *dl = effects->CL_AllocDlight ( index ); dl->origin = GetAbsOrigin(); dl->origin[2] += 16; dl->color.r = 254; dl->color.g = 174; dl->color.b = 10; dl->radius = random->RandomFloat(400,431); dl->die = gpGlobals->curtime + 0.001; } }
//----------------------------------------------------------------------------- // Purpose: Add entity to visible view models list //----------------------------------------------------------------------------- void C_BaseViewModel::AddEntity( void ) { // Server says don't interpolate this frame, so set previous info to new info. if ( IsEffectActive(EF_NOINTERP) ) { ResetLatched(); } }
bool C_BaseObject::WasLastPlacementPosValid( void ) { if ( MustBeBuiltOnAttachmentPoint() ) { return ( !IsEffectActive(EF_NODRAW) ); } return ( m_iLastPlacementPosValid > 0 ); }
int CBaseViewModel::UpdateTransmitState() { if ( IsEffectActive( EF_NODRAW ) ) { return SetTransmitState( FL_EDICT_DONTSEND ); } return SetTransmitState( FL_EDICT_FULLCHECK ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CSniperDot::ShouldDraw( void ) { if ( IsEffectActive( EF_NODRAW ) ) return false; // Don't draw the sniper dot when in thirdperson. if ( ::input->CAM_IsThirdPerson() ) return false; return true; }
//----------------------------------------------------------------------------- // Purpose: Since the control zone is a data only class, force it to always be sent ( shouldn't change often so ) // bandwidth usage should be small. // Input : **ppSendTable - // *recipient - // *pvs - // clientArea - // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- int CControlZone::UpdateTransmitState() { if ( IsEffectActive( EF_NODRAW ) ) { return SetTransmitState( FL_EDICT_DONTSEND ); } else { return SetTransmitState( FL_EDICT_ALWAYS ); } }
//----------------------------------------------------------------------------- // Purpose: // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool C_BaseCombatWeapon::ShouldDraw( void ) { if ( m_iWorldModelIndex == 0 ) return false; // FIXME: All weapons with owners are set to transmit in CBaseCombatWeapon::UpdateTransmitState, // even if they have EF_NODRAW set, so we have to check this here. Ideally they would never // transmit except for the weapons owned by the local player. if ( IsEffectActive( EF_NODRAW ) ) return false; C_BaseCombatCharacter *pOwner = GetOwner(); // weapon has no owner, always draw it if ( !pOwner ) return true; bool bIsActive = ( m_iState == WEAPON_IS_ACTIVE ); C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer(); // carried by local player? if ( pOwner == pLocalPlayer ) { // Only ever show the active weapon if ( !bIsActive ) return false; if ( !pOwner->ShouldDraw() ) { // Our owner is invisible. // This also tests whether the player is zoomed in, in which case you don't want to draw the weapon. return false; } // 3rd person mode? if ( !ShouldDrawLocalPlayerViewModel() ) return true; // don't draw active weapon if not in some kind of 3rd person mode, the viewmodel will do that return false; } // If it's a player, then only show active weapons if ( pOwner->IsPlayer() ) { // Show it if it's active... return bIsActive; } // FIXME: We may want to only show active weapons on NPCs // These are carried by AIs; always show them return true; }
int CBaseParticleEntity::UpdateTransmitState( void ) { if ( IsEffectActive( EF_NODRAW ) ) return SetTransmitState( FL_EDICT_DONTSEND ); if ( IsEFlagSet( EFL_IN_SKYBOX ) ) return SetTransmitState( FL_EDICT_ALWAYS ); // cull against PVS return SetTransmitState( FL_EDICT_PVSCHECK ); }
//----------------------------------------------------------------------------- // Purpose: Input handler that toggles the sprite between hidden and shown. //----------------------------------------------------------------------------- void CSprite::InputToggleSprite( inputdata_t &inputdata ) { if ( !IsEffectActive( EF_NODRAW ) ) { TurnOff(); } else { TurnOn(); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPowerup::Materialize( void ) { if ( !m_bDisabled && IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. EmitSound( "Item.Materialize" ); RemoveEffects( EF_NODRAW ); } m_bRespawning = false; SetTouch( &CItem::ItemTouch ); }
//----------------------------------------------------------------------------- // Should this object cast render-to-texture shadows? //----------------------------------------------------------------------------- ShadowType_t C_PropVehicleDriveable::ShadowCastType() { CStudioHdr *pStudioHdr = GetModelPtr(); if ( !pStudioHdr ) return SHADOWS_NONE; if ( IsEffectActive(EF_NODRAW | EF_NOSHADOW) ) return SHADOWS_NONE; // Always use render-to-texture. We'll always the dirty bits in our think function return SHADOWS_RENDER_TO_TEXTURE; }
void GhostEntity::HandleGhost() { if (currentStep == NULL) { GhostEngine::getEngine()->getRun(this)->EndRun(); } else { if (!isActive) { if (Q_strcmp(currentMap, STRING(gpGlobals->mapname)) == 0) { DispatchSpawn(this); } } else { if (nextStep != NULL) { if (Q_strcmp(STRING(gpGlobals->mapname), currentMap) != 0) { if (!IsEffectActive(EF_NODRAW)) AddEffects(EF_NODRAW); return; } if (IsEffectActive(EF_NODRAW)) RemoveEffects(EF_NODRAW); if (Q_strcmp(currentStep->map, nextStep->map) == 0) { //interpolate position float x = currentStep->x; float y = currentStep->y; float z = currentStep->z; if (x == 0.0f) return; float x2 = nextStep->x; float y2 = nextStep->y; float z2 = nextStep->z; float t1 = currentStep->tim; float t2 = nextStep->tim; float scalar = ((((float)Plat_FloatTime()) - startTime) - t1) / (t2 - t1); float xfinal = x + (scalar * (x2 - x)); float yfinal = y + (scalar * (y2 - y)); float zfinal = z + (scalar * (z2 - z)); SetAbsOrigin(Vector(xfinal, yfinal, (zfinal - 15.0f))); } else {//set it to the last position before it updates to the next map SetAbsOrigin(Vector(currentStep->x, currentStep->y, (currentStep->z - 15.0f))); } } } } }
//----------------------------------------------------------------------------- // Purpose: Creates, destroys, and updates the flashlight effect as needed. //----------------------------------------------------------------------------- void C_HL2MP_Player::UpdateFlashlight() { // The dim light is the flashlight. if ( IsEffectActive( EF_DIMLIGHT ) ) { if (!m_pHL2MPFlashLightEffect) { // Turned on the headlight; create it. m_pHL2MPFlashLightEffect = new CHL2MPFlashlightEffect(index); if (!m_pHL2MPFlashLightEffect) return; m_pHL2MPFlashLightEffect->TurnOn(); } Vector vecForward, vecRight, vecUp; Vector position = EyePosition(); if ( ::input->CAM_IsThirdPerson() ) { int iAttachment = LookupAttachment( "anim_attachment_RH" ); if ( iAttachment >= 0 ) { Vector vecOrigin; //Tony; EyeAngles will return proper whether it's local player or not. QAngle eyeAngles = EyeAngles(); GetAttachment( iAttachment, vecOrigin, eyeAngles ); Vector vForward; AngleVectors( eyeAngles, &vecForward, &vecRight, &vecUp ); position = vecOrigin; } else EyeVectors( &vecForward, &vecRight, &vecUp ); } else EyeVectors( &vecForward, &vecRight, &vecUp ); // Update the light with the new position and direction. m_pHL2MPFlashLightEffect->UpdateLight( position, vecForward, vecRight, vecUp, FLASHLIGHT_DISTANCE ); } else if (m_pHL2MPFlashLightEffect) { // Turned off the flashlight; delete it. delete m_pHL2MPFlashLightEffect; m_pHL2MPFlashLightEffect = NULL; } }
//----------------------------------------------------------------------------- // Should this object cast shadows? //----------------------------------------------------------------------------- ShadowType_t C_BaseCombatWeapon::ShadowCastType() { if ( IsEffectActive( /*EF_NODRAW |*/ EF_NOSHADOW ) ) return SHADOWS_NONE; if (!IsBeingCarried()) return SHADOWS_RENDER_TO_TEXTURE; if (IsCarriedByLocalPlayer()) return SHADOWS_NONE; return (m_iState != WEAPON_IS_CARRIED_BY_PLAYER) ? SHADOWS_RENDER_TO_TEXTURE : SHADOWS_NONE; }
//----------------------------------------------------------------------------- // Should this object cast shadows? //----------------------------------------------------------------------------- ShadowType_t C_BaseCombatWeapon::ShadowCastType() { if ( IsEffectActive( /*EF_NODRAW |*/ EF_NOSHADOW ) ) return SHADOWS_NONE; if (!IsBeingCarried()) return SHADOWS_RENDER_TO_TEXTURE; if (IsCarriedByLocalPlayer() && !C_BasePlayer::ShouldDrawLocalPlayer()) return SHADOWS_NONE; return SHADOWS_RENDER_TO_TEXTURE; }
//========================================================= // Materialize - make a CWeaponDODBase visible and tangible //========================================================= void CWeaponDODBase::Materialize() { if ( IsEffectActive( EF_NODRAW ) ) { RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } AddSolidFlags( FSOLID_TRIGGER ); SetThink (&CWeaponDODBase::SUB_Remove); SetNextThink( gpGlobals->curtime + 1 ); }
//----------------------------------------------------------------------------- // Purpose: Think function to move the ghost //----------------------------------------------------------------------------- void GhostEntity::Think( void ) { CBaseAnimating::Think(); if (Q_strlen(m_gName) != 0) { if (!IsEffectActive(EF_NODRAW)) EntityText(0, m_gName, 0); updateStep(); HandleGhost(); } else { EndRun(); } SetNextThink( gpGlobals->curtime + 0.01f ); }
int CBeam::ShouldTransmit( const CCheckTransmitInfo *pInfo ) { if ( IsEffectActive( EF_NODRAW ) ) return FL_EDICT_DONTSEND; // Transmit us with the same rules as our move parent if ( GetMoveParent() ) { return GetMoveParent()->ShouldTransmit( pInfo ); } return BaseClass::ShouldTransmit( pInfo ); }
//----------------------------------------------------------------------------- // Should we transmit it to the client? //----------------------------------------------------------------------------- int CEnvParticleScript::UpdateTransmitState() { if ( IsEffectActive( EF_NODRAW ) ) { return SetTransmitState( FL_EDICT_DONTSEND ); } if ( IsEFlagSet( EFL_IN_SKYBOX ) ) { return SetTransmitState( FL_EDICT_ALWAYS ); } return SetTransmitState( FL_EDICT_PVSCHECK ); }
//----------------------------------------------------------------------------- // Should this object receive shadows? //----------------------------------------------------------------------------- bool C_HL2MP_Player::ShouldReceiveProjectedTextures( int flags ) { Assert( flags & SHADOW_FLAGS_PROJECTED_TEXTURE_TYPE_MASK ); if ( IsEffectActive( EF_NODRAW ) ) return false; if( flags & SHADOW_FLAGS_FLASHLIGHT ) { return true; } return BaseClass::ShouldReceiveProjectedTextures( flags ); }
// DVS TODO: Obsolete Use handler void CSprite::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { int on = !IsEffectActive( EF_NODRAW ); if ( ShouldToggle( useType, on ) ) { if ( on ) { TurnOff(); } else { TurnOn(); } } }
void CItem::Materialize( void ) { CreateItemVPhysicsObject(); if ( IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. EmitSound( "Item.Materialize" ); RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } SetTouch( &CItem::ItemTouch ); }
//==================================================================================== // WEAPON SPAWNING //==================================================================================== //----------------------------------------------------------------------------- // Purpose: Make a weapon visible and tangible //-----------------------------------------------------------------------------// void CBaseCombatWeapon::Materialize( void ) { if ( IsEffectActive( EF_NODRAW ) ) { // changing from invisible state to visible. EmitSound( "BaseCombatWeapon.WeaponMaterialize" ); RemoveEffects( EF_NODRAW ); DoMuzzleFlash(); } SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_TRIGGER ); SetPickupTouch(); SetThink (NULL); }