Skip to content

Commit 57a8b64

Browse files
ficool2EricS-Valve
authored andcommitted
Fix Wrangler shield not moving with sentrygun
1 parent 39f6dde commit 57a8b64

File tree

2 files changed

+75
-14
lines changed

2 files changed

+75
-14
lines changed

src/game/client/tf/c_obj_sentrygun.cpp

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ C_ObjectSentrygun::C_ObjectSentrygun()
6060
m_nShieldLevel = SHIELD_NONE;
6161
m_nOldShieldLevel = SHIELD_NONE;
6262
m_hLaserBeamEffect = NULL;
63-
m_pTempShield = NULL;
63+
m_hShieldModel = NULL;
6464
m_bNearMiss = false;
6565
m_flNextNearMissCheck = 0.f;
6666

@@ -312,7 +312,7 @@ void C_ObjectSentrygun::SetDormant( bool bDormant )
312312
if ( IsDormant() && !bDormant )
313313
{
314314
// Make sure our shield is where we are. We may have moved since last seen.
315-
if ( m_pTempShield )
315+
if ( m_hShieldModel )
316316
{
317317
m_bRecreateShield = true;
318318
m_bRecreateLaserBeam = true;
@@ -329,13 +329,12 @@ void C_ObjectSentrygun::CreateShield( void )
329329
{
330330
DestroyShield();
331331

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 )
335334
{
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;
339338
}
340339

341340
m_hShieldEffect = ParticleProp()->Create( "turret_shield", PATTACH_ABSORIGIN_FOLLOW, 0, Vector( 0,0,30) );
@@ -356,12 +355,10 @@ void C_ObjectSentrygun::CreateShield( void )
356355
//-----------------------------------------------------------------------------
357356
void C_ObjectSentrygun::DestroyShield( void )
358357
{
359-
if ( m_pTempShield )
358+
if ( m_hShieldModel )
360359
{
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;
365362
}
366363

367364
if ( m_hShieldEffect )
@@ -758,4 +755,49 @@ const char* C_ObjectSentrygun::GetStatusName() const
758755
return "#TF_Object_Sentry";
759756
}
760757

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 );
761799

800+
m_flFadeOutStartTime = gpGlobals->curtime;
801+
m_flFadeOutEndTime = gpGlobals->curtime + flDuration;
802+
SetNextClientThink( gpGlobals->curtime );
803+
}

src/game/client/tf/c_obj_sentrygun.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,25 @@ enum
2727
SHIELD_MAX, // 10% damage taken, no inactive period
2828
};
2929

30+
//-----------------------------------------------------------------------------
31+
// Purpose: Wrangler shield
32+
//-----------------------------------------------------------------------------
33+
class C_SentrygunShield : public C_BaseAnimating
34+
{
35+
DECLARE_CLASS( C_SentrygunShield, C_BaseAnimating );
36+
37+
public:
38+
static C_SentrygunShield* Create( const char* pszModelName );
39+
40+
virtual void ClientThink();
41+
42+
void StartFadeOut( float flDuration );
43+
44+
private:
45+
float m_flFadeOutStartTime;
46+
float m_flFadeOutEndTime;
47+
};
48+
3049
//-----------------------------------------------------------------------------
3150
// Purpose: Sentry object
3251
//-----------------------------------------------------------------------------
@@ -124,7 +143,7 @@ class C_ObjectSentrygun : public C_BaseObject
124143
bool m_bRecreateLaserBeam;
125144
float m_flNextNearMissCheck;
126145

127-
C_LocalTempEntity *m_pTempShield;
146+
CHandle<C_SentrygunShield> m_hShieldModel;
128147

129148
HPARTICLEFFECT m_hSirenEffect;
130149
HPARTICLEFFECT m_hShieldEffect;

0 commit comments

Comments
 (0)