@@ -60,7 +60,7 @@ C_ObjectSentrygun::C_ObjectSentrygun()
60
60
m_nShieldLevel = SHIELD_NONE;
61
61
m_nOldShieldLevel = SHIELD_NONE;
62
62
m_hLaserBeamEffect = NULL ;
63
- m_pTempShield = NULL ;
63
+ m_hShieldModel = NULL ;
64
64
m_bNearMiss = false ;
65
65
m_flNextNearMissCheck = 0 .f ;
66
66
@@ -312,7 +312,7 @@ void C_ObjectSentrygun::SetDormant( bool bDormant )
312
312
if ( IsDormant () && !bDormant )
313
313
{
314
314
// Make sure our shield is where we are. We may have moved since last seen.
315
- if ( m_pTempShield )
315
+ if ( m_hShieldModel )
316
316
{
317
317
m_bRecreateShield = true ;
318
318
m_bRecreateLaserBeam = true ;
@@ -329,13 +329,12 @@ void C_ObjectSentrygun::CreateShield( void )
329
329
{
330
330
DestroyShield ();
331
331
332
- model_t *pModel = (model_t *) engine->LoadModel ( " models/buildables/sentry_shield.mdl" );
333
- m_pTempShield = tempents->SpawnTempModel ( pModel, GetAbsOrigin (), GetAbsAngles (), Vector (0 , 0 , 0 ), 1 , FTENT_NEVERDIE );
334
- if ( m_pTempShield )
332
+ m_hShieldModel = C_SentrygunShield::Create ( " models/buildables/sentry_shield.mdl" );
333
+ if ( m_hShieldModel )
335
334
{
336
- m_pTempShield-> ChangeTeam ( GetTeamNumber () );
337
- m_pTempShield-> m_nSkin = ( GetTeamNumber () == TF_TEAM_RED ) ? 0 : 1 ;
338
- // m_pTempShield->m_nRenderFX = kRenderFxDistort ;
335
+ m_hShieldModel-> FollowEntity ( this , false );
336
+ m_hShieldModel-> ChangeTeam ( GetTeamNumber () ) ;
337
+ m_hShieldModel-> m_nSkin = ( GetTeamNumber () == TF_TEAM_RED ) ? 0 : 1 ;
339
338
}
340
339
341
340
m_hShieldEffect = ParticleProp ()->Create ( " turret_shield" , PATTACH_ABSORIGIN_FOLLOW, 0 , Vector ( 0 ,0 ,30 ) );
@@ -356,12 +355,10 @@ void C_ObjectSentrygun::CreateShield( void )
356
355
// -----------------------------------------------------------------------------
357
356
void C_ObjectSentrygun::DestroyShield ( void )
358
357
{
359
- if ( m_pTempShield )
358
+ if ( m_hShieldModel )
360
359
{
361
- m_pTempShield->flags = FTENT_FADEOUT;
362
- m_pTempShield->die = gpGlobals->curtime ;
363
- m_pTempShield->fadeSpeed = 1 .0f ;
364
- m_pTempShield = NULL ;
360
+ m_hShieldModel->StartFadeOut ( 1 .0f );
361
+ m_hShieldModel = NULL ;
365
362
}
366
363
367
364
if ( m_hShieldEffect )
@@ -758,4 +755,49 @@ const char* C_ObjectSentrygun::GetStatusName() const
758
755
return " #TF_Object_Sentry" ;
759
756
}
760
757
758
+ // -----------------------------------------------------------------------------
759
+ // Purpose:
760
+ // -----------------------------------------------------------------------------
761
+ C_SentrygunShield* C_SentrygunShield::Create ( const char * pszModelName )
762
+ {
763
+ C_SentrygunShield* pShield = new C_SentrygunShield ();
764
+ if ( !pShield )
765
+ return NULL ;
766
+
767
+ if ( !pShield->InitializeAsClientEntity ( pszModelName, RENDER_GROUP_TRANSLUCENT_ENTITY ) )
768
+ {
769
+ pShield->Release ();
770
+ return NULL ;
771
+ }
772
+
773
+ pShield->AddEffects ( EF_NORECEIVESHADOW | EF_NOSHADOW );
774
+ return pShield;
775
+ }
776
+
777
+ // -----------------------------------------------------------------------------
778
+ // Purpose:
779
+ // -----------------------------------------------------------------------------
780
+ void C_SentrygunShield::ClientThink ()
781
+ {
782
+ if ( m_flFadeOutEndTime <= gpGlobals->curtime )
783
+ {
784
+ Release ();
785
+ return ;
786
+ }
787
+
788
+ float flAlpha = RemapVal ( gpGlobals->curtime , m_flFadeOutStartTime, m_flFadeOutEndTime, 255 .0f , 0 .0f );
789
+ SetRenderColorA ( (byte)flAlpha );
790
+ SetNextClientThink ( CLIENT_THINK_ALWAYS );
791
+ }
792
+
793
+ // -----------------------------------------------------------------------------
794
+ // Purpose:
795
+ // -----------------------------------------------------------------------------
796
+ void C_SentrygunShield::StartFadeOut ( float flDuration )
797
+ {
798
+ SetRenderMode ( kRenderTransTexture );
761
799
800
+ m_flFadeOutStartTime = gpGlobals->curtime ;
801
+ m_flFadeOutEndTime = gpGlobals->curtime + flDuration;
802
+ SetNextClientThink ( gpGlobals->curtime );
803
+ }
0 commit comments