mirror of
https://github.com/ValveSoftware/source-sdk-2013.git
synced 2025-07-25 22:51:35 +03:00
Fix Wrangler shield not moving with sentrygun
This commit is contained in:
parent
39f6dde8fb
commit
57a8b644af
@ -60,7 +60,7 @@ C_ObjectSentrygun::C_ObjectSentrygun()
|
||||
m_nShieldLevel = SHIELD_NONE;
|
||||
m_nOldShieldLevel = SHIELD_NONE;
|
||||
m_hLaserBeamEffect = NULL;
|
||||
m_pTempShield = NULL;
|
||||
m_hShieldModel = NULL;
|
||||
m_bNearMiss = false;
|
||||
m_flNextNearMissCheck = 0.f;
|
||||
|
||||
@ -312,7 +312,7 @@ void C_ObjectSentrygun::SetDormant( bool bDormant )
|
||||
if ( IsDormant() && !bDormant )
|
||||
{
|
||||
// Make sure our shield is where we are. We may have moved since last seen.
|
||||
if ( m_pTempShield )
|
||||
if ( m_hShieldModel )
|
||||
{
|
||||
m_bRecreateShield = true;
|
||||
m_bRecreateLaserBeam = true;
|
||||
@ -329,13 +329,12 @@ void C_ObjectSentrygun::CreateShield( void )
|
||||
{
|
||||
DestroyShield();
|
||||
|
||||
model_t *pModel = (model_t *) engine->LoadModel( "models/buildables/sentry_shield.mdl" );
|
||||
m_pTempShield = tempents->SpawnTempModel( pModel, GetAbsOrigin(), GetAbsAngles(), Vector(0, 0, 0), 1, FTENT_NEVERDIE );
|
||||
if ( m_pTempShield )
|
||||
m_hShieldModel = C_SentrygunShield::Create( "models/buildables/sentry_shield.mdl" );
|
||||
if ( m_hShieldModel )
|
||||
{
|
||||
m_pTempShield->ChangeTeam( GetTeamNumber() );
|
||||
m_pTempShield->m_nSkin = ( GetTeamNumber() == TF_TEAM_RED ) ? 0 : 1;
|
||||
//m_pTempShield->m_nRenderFX = kRenderFxDistort;
|
||||
m_hShieldModel->FollowEntity( this, false );
|
||||
m_hShieldModel->ChangeTeam( GetTeamNumber() );
|
||||
m_hShieldModel->m_nSkin = ( GetTeamNumber() == TF_TEAM_RED ) ? 0 : 1;
|
||||
}
|
||||
|
||||
m_hShieldEffect = ParticleProp()->Create( "turret_shield", PATTACH_ABSORIGIN_FOLLOW, 0, Vector( 0,0,30) );
|
||||
@ -356,12 +355,10 @@ void C_ObjectSentrygun::CreateShield( void )
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_ObjectSentrygun::DestroyShield( void )
|
||||
{
|
||||
if ( m_pTempShield )
|
||||
if ( m_hShieldModel )
|
||||
{
|
||||
m_pTempShield->flags = FTENT_FADEOUT;
|
||||
m_pTempShield->die = gpGlobals->curtime;
|
||||
m_pTempShield->fadeSpeed = 1.0f;
|
||||
m_pTempShield = NULL;
|
||||
m_hShieldModel->StartFadeOut( 1.0f );
|
||||
m_hShieldModel = NULL;
|
||||
}
|
||||
|
||||
if ( m_hShieldEffect )
|
||||
@ -758,4 +755,49 @@ const char* C_ObjectSentrygun::GetStatusName() const
|
||||
return "#TF_Object_Sentry";
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
C_SentrygunShield* C_SentrygunShield::Create( const char* pszModelName )
|
||||
{
|
||||
C_SentrygunShield* pShield = new C_SentrygunShield();
|
||||
if ( !pShield )
|
||||
return NULL;
|
||||
|
||||
if ( !pShield->InitializeAsClientEntity( pszModelName, RENDER_GROUP_TRANSLUCENT_ENTITY ) )
|
||||
{
|
||||
pShield->Release();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pShield->AddEffects( EF_NORECEIVESHADOW | EF_NOSHADOW );
|
||||
return pShield;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_SentrygunShield::ClientThink()
|
||||
{
|
||||
if ( m_flFadeOutEndTime <= gpGlobals->curtime )
|
||||
{
|
||||
Release();
|
||||
return;
|
||||
}
|
||||
|
||||
float flAlpha = RemapVal( gpGlobals->curtime, m_flFadeOutStartTime, m_flFadeOutEndTime, 255.0f, 0.0f );
|
||||
SetRenderColorA( (byte)flAlpha );
|
||||
SetNextClientThink( CLIENT_THINK_ALWAYS );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void C_SentrygunShield::StartFadeOut( float flDuration )
|
||||
{
|
||||
SetRenderMode( kRenderTransTexture );
|
||||
|
||||
m_flFadeOutStartTime = gpGlobals->curtime;
|
||||
m_flFadeOutEndTime = gpGlobals->curtime + flDuration;
|
||||
SetNextClientThink( gpGlobals->curtime );
|
||||
}
|
@ -27,6 +27,25 @@ enum
|
||||
SHIELD_MAX, // 10% damage taken, no inactive period
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Wrangler shield
|
||||
//-----------------------------------------------------------------------------
|
||||
class C_SentrygunShield : public C_BaseAnimating
|
||||
{
|
||||
DECLARE_CLASS( C_SentrygunShield, C_BaseAnimating );
|
||||
|
||||
public:
|
||||
static C_SentrygunShield* Create( const char* pszModelName );
|
||||
|
||||
virtual void ClientThink();
|
||||
|
||||
void StartFadeOut( float flDuration );
|
||||
|
||||
private:
|
||||
float m_flFadeOutStartTime;
|
||||
float m_flFadeOutEndTime;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Sentry object
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -124,7 +143,7 @@ private:
|
||||
bool m_bRecreateLaserBeam;
|
||||
float m_flNextNearMissCheck;
|
||||
|
||||
C_LocalTempEntity *m_pTempShield;
|
||||
CHandle<C_SentrygunShield> m_hShieldModel;
|
||||
|
||||
HPARTICLEFFECT m_hSirenEffect;
|
||||
HPARTICLEFFECT m_hShieldEffect;
|
||||
|
Loading…
x
Reference in New Issue
Block a user