//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CObjectSentrygun::SetModel( const char *pModel ) { float flPoseParam0 = 0.0; float flPoseParam1 = 0.0; // Save pose parameters across model change if ( m_iPitchPoseParameter >= 0 ) { flPoseParam0 = GetPoseParameter( m_iPitchPoseParameter ); } if ( m_iYawPoseParameter >= 0 ) { flPoseParam1 = GetPoseParameter( m_iYawPoseParameter ); } BaseClass::SetModel( pModel ); // Reset this after model change UTIL_SetSize( this, SENTRYGUN_MINS, SENTRYGUN_MAXS ); SetSolid( SOLID_BBOX ); // Restore pose parameters m_iPitchPoseParameter = LookupPoseParameter( "aim_pitch" ); m_iYawPoseParameter = LookupPoseParameter( "aim_yaw" ); SetPoseParameter( m_iPitchPoseParameter, flPoseParam0 ); SetPoseParameter( m_iYawPoseParameter, flPoseParam1 ); CreateBuildPoints(); ReattachChildren(); ResetSequenceInfo(); }
//----------------------------------------------------------------------------- // Purpose: Start building the object //----------------------------------------------------------------------------- bool CObjectSentrygun::StartBuilding( CBaseEntity *pBuilder ) { SetModel( SENTRY_MODEL_LEVEL_1_UPGRADE ); CreateBuildPoints(); SetPoseParameter( m_iPitchPoseParameter, 0.0 ); SetPoseParameter( m_iYawPoseParameter, 0.0 ); return BaseClass::StartBuilding( pBuilder ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CObjectTeleporter::SetModel( const char *pModel ) { BaseClass::SetModel( pModel ); // Reset this after model change UTIL_SetSize( this, TELEPORTER_MINS, TELEPORTER_MAXS ); CreateBuildPoints(); ReattachChildren(); m_iDirectionBodygroup = FindBodygroupByName( "teleporter_direction" ); m_iBlurBodygroup = FindBodygroupByName( "teleporter_blur" ); if ( m_iBlurBodygroup >= 0 ) { SetBodygroup( m_iBlurBodygroup, 0 ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_BaseObject::OnDataChanged( DataUpdateType_t updateType ) { if (updateType == DATA_UPDATE_CREATED) { CreateBuildPoints(); } BaseClass::OnDataChanged( updateType ); // Did we just finish building? if ( m_bWasBuilding && !m_bBuilding ) { FinishedBuilding(); } // Did we just go active? bool bShouldBeActive = ShouldBeActive(); if ( !m_bWasActive && bShouldBeActive ) { OnGoActive(); } else if ( m_bWasActive && !bShouldBeActive ) { OnGoInactive(); } if ( m_bDisabled != m_bOldDisabled ) { if ( m_bDisabled ) { OnStartDisabled(); } else { OnEndDisabled(); } } if ( ( !IsBuilding() && m_iHealth != m_iOldHealth ) ) { // recalc our damage particle state BuildingDamageLevel_t damageLevel = CalculateDamageLevel(); if ( damageLevel != m_damageLevel ) { UpdateDamageEffects( damageLevel ); m_damageLevel = damageLevel; } } if ( m_bWasBuilding && !m_bBuilding ) { // Force update damage effect when finishing construction. BuildingDamageLevel_t damageLevel = CalculateDamageLevel(); UpdateDamageEffects( damageLevel ); m_damageLevel = damageLevel; } // Kill all particles when getting picked up. if ( !m_bWasCarried && m_bCarried ) { ParticleProp()->StopParticlesInvolving( this ); } if ( m_iHealth > m_iOldHealth && m_iHealth == m_iMaxHealth ) { // If we were just fully healed, remove all decals RemoveAllDecals(); } if ( GetOwner() == C_TFPlayer::GetLocalTFPlayer() ) { IGameEvent *event = gameeventmanager->CreateEvent( "building_info_changed" ); if ( event ) { event->SetInt( "building_type", GetType() ); event->SetInt( "object_mode", GetObjectMode() ); gameeventmanager->FireEventClientSide( event ); } } if ( IsPlacing() && GetSequence() != m_nObjectOldSequence ) { // Ignore server sequences while placing OnPlacementStateChanged( m_iLastPlacementPosValid > 0 ); } }