Skip to content

Commit aafbb7e

Browse files
authored
Merge pull request #1038 from anf3is/fix/anim-fast-reload
Adjust animation lenght for successful and failed fast reloads
2 parents 0467be2 + 9a93af6 commit aafbb7e

4 files changed

Lines changed: 38 additions & 8 deletions

File tree

src/game/server/swarm/asw_marine.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,8 @@ void CASW_Marine::DoAnimationEvent( PlayerAnimEvent_t event )
504504
{
505505
if (gpGlobals->maxClients > 1 &&
506506
(event == PLAYERANIMEVENT_RELOAD || event == PLAYERANIMEVENT_JUMP || event == PLAYERANIMEVENT_WEAPON_SWITCH
507+
|| event == PLAYERANIMEVENT_RELOAD_SUCCEED
508+
|| event == PLAYERANIMEVENT_RELOAD_FAIL
507509
|| event == PLAYERANIMEVENT_HEAL || event == PLAYERANIMEVENT_KICK || event == PLAYERANIMEVENT_THROW_GRENADE
508510
|| event == PLAYERANIMEVENT_BAYONET || event == PLAYERANIMEVENT_PICKUP
509511
|| ( event >= PLAYERANIMEVENT_MELEE && event <= PLAYERANIMEVENT_MELEE_LAST )

src/game/shared/swarm/asw_playeranimstate.cpp

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ class CASWPlayerAnimState : public CBasePlayerAnimState, public IASWPlayerAnimSt
191191
int m_iReloadSequence;
192192
float m_flReloadBlendOut, m_flReloadBlendIn;
193193
float m_fReloadPlaybackRate;
194+
float m_fReloadAnimTime;
194195

195196
bool m_bWeaponSwitching;
196197
float m_flWeaponSwitchCycle;
@@ -340,20 +341,48 @@ void CASWPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event )
340341
fReloadTime *= MarineSkills()->GetSkillBasedValueByMarine( pMarine, ASW_MARINE_SKILL_RELOADING, ASW_MARINE_SUBSKILL_RELOADING_SPEED_SCALE );
341342
}
342343

343-
// calc playback rate needed to play the whole anim in this time
344+
// calc playback time needed to play the whole anim
344345
// normal weapon reload anim is 48fps and 105 frames = 2.1875 seconds
345346
// normal weapon reload time in script is 2.2 seconds
346347
// pistol weapon reload anim is 38fps and 38 frames = 1 second
347348
// pistol weapon reload time in script is 1.0 seconds
348349
if (bShortReloadAnim)
349-
m_fReloadPlaybackRate = 1.0f / fReloadTime; //38.0f / (fReloadTime * 38.0f);
350+
m_fReloadAnimTime = 1.0f; // 38.0f / 38.0f;
350351
else
351-
m_fReloadPlaybackRate = 105.6f / (fReloadTime * 48.0f);
352+
m_fReloadAnimTime = 105.6f / 48.0f;
353+
354+
m_fReloadPlaybackRate = m_fReloadAnimTime / fReloadTime;
352355

353356
m_bReloading = true;
354357
m_flReloadCycle = 0;
355358
}
356359
}
360+
else if ( event == PLAYERANIMEVENT_RELOAD_SUCCEED )
361+
{
362+
if ( m_bReloading == true && m_flReloadCycle < 1.0f )
363+
{
364+
// readjust animation speed to match new attack delay
365+
const float fFastReloadTime = 0.5f;
366+
367+
const float fRemainingCycle = 1.0f - m_flReloadCycle;
368+
m_fReloadPlaybackRate = m_fReloadAnimTime * fRemainingCycle / fFastReloadTime;
369+
}
370+
}
371+
else if ( event == PLAYERANIMEVENT_RELOAD_FAIL )
372+
{
373+
if ( m_bReloading == true && m_flReloadCycle < 1.0f )
374+
{
375+
// readjust animation speed to match new attack delay
376+
const float fFailReloadMinDelay = 2.0f;
377+
378+
CASW_Marine *pOuter = CASW_Marine::AsMarine( GetOuter() );
379+
CASW_Weapon *pWeapon = pOuter ? pOuter->GetActiveASWWeapon() : NULL;
380+
const float fFailReloadTime = pWeapon ? pWeapon->GetReloadFailTime() : fFailReloadMinDelay;
381+
382+
const float fRemainingCycle = 1.0f - m_flReloadCycle;
383+
m_fReloadPlaybackRate = m_fReloadAnimTime * fRemainingCycle / fFailReloadTime;
384+
}
385+
}
357386
else if ( event == PLAYERANIMEVENT_DROP_MAGAZINE_GIB )
358387
{
359388
#ifdef CLIENT_DLL

src/game/shared/swarm/asw_playeranimstate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ enum PlayerAnimEvent_t
3636
PLAYERANIMEVENT_THROW_GRENADE,
3737
PLAYERANIMEVENT_JUMP,
3838
PLAYERANIMEVENT_RELOAD,
39+
PLAYERANIMEVENT_RELOAD_SUCCEED,
40+
PLAYERANIMEVENT_RELOAD_FAIL,
3941
PLAYERANIMEVENT_WEAPON_SWITCH,
4042
PLAYERANIMEVENT_FLINCH,
4143
PLAYERANIMEVENT_GO,

src/game/shared/swarm/asw_weapon_shared.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,9 @@ void CASW_Weapon::ItemBusyFrame( void )
178178
pOwner->SetNextAttack( flSucceedDelay );
179179
m_flNextPrimaryAttack = m_flNextSecondaryAttack = flSucceedDelay;
180180

181-
// TODO: hook up anim
182-
//pMarine->DoAnimationEvent( PLAYERANIMEVENT_RELOAD_SUCCEED );
181+
pMarine->DoAnimationEvent( PLAYERANIMEVENT_RELOAD_SUCCEED );
183182

184183
DispatchParticleEffect( "fast_reload", PATTACH_POINT_FOLLOW, this, "muzzle" );
185-
pMarine->m_flPreventLaserSightTime = gpGlobals->curtime + 2.5f;
186184

187185
#ifdef GAME_DLL
188186
pMarine->m_nFastReloadsInARow++;
@@ -267,8 +265,7 @@ void CASW_Weapon::ItemBusyFrame( void )
267265
m_flReloadFailTime = m_flNextPrimaryAttack - gpGlobals->curtime;
268266
}
269267

270-
// TODO: hook up anim
271-
//pMarine->DoAnimationEvent( PLAYERANIMEVENT_RELOAD_FAIL );
268+
pMarine->DoAnimationEvent( PLAYERANIMEVENT_RELOAD_FAIL );
272269

273270
#ifdef GAME_DLL
274271
IGameEvent *event = gameeventmanager->CreateEvent( "fast_reload_fail" );

0 commit comments

Comments
 (0)