Update m249

This commit is contained in:
Roman Chistokhodov 2019-08-01 01:23:37 +03:00
parent 0565893283
commit ea13d88e37
5 changed files with 62 additions and 34 deletions

View File

@ -2018,7 +2018,7 @@ void EV_FireM249( event_args_t *args )
{
// Add muzzle flash to current weapon model
EV_MuzzleFlash();
gEngfuncs.pEventAPI->EV_WeaponAnimation( M249_SHOOT1 + gEngfuncs.pfnRandomLong( 0, 2 ), 1 );
gEngfuncs.pEventAPI->EV_WeaponAnimation( M249_SHOOT1 + gEngfuncs.pfnRandomLong( 0, 2 ), args->iparam2 );
V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
}

View File

@ -1005,6 +1005,16 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
if( pWeapon == &g_Python && bIsMultiplayer() )
body = 1;
if (pWeapon == &g_M249) {
if (g_M249.m_iClip == 0) {
body = 8;
} else if (g_M249.m_iClip > 0 && g_M249.m_iClip < 8) {
body = 9 - g_M249.m_iClip;
} else {
body = 0;
}
}
// Force a fixed anim down to viewmodel
HUD_SendWeaponAnim( to->client.weaponanim, body, 1 );
}

View File

@ -37,8 +37,7 @@ enum m249_e
};
LINK_ENTITY_TO_CLASS(weapon_m249, CM249);
LINK_ENTITY_TO_CLASS(weapon_m249, CM249)
//=========================================================
//=========================================================
@ -51,7 +50,7 @@ void CM249::Spawn()
m_iDefaultAmmo = M249_DEFAULT_GIVE;
m_iReloadState = RELOAD_STATE_NONE;
m_fInSpecialReload = 0;
FallInit();// get ready to fall down.
}
@ -111,9 +110,16 @@ int CM249::AddToPlayer(CBasePlayer *pPlayer)
BOOL CM249::Deploy()
{
m_fInSpecialReload = FALSE;
UpdateTape();
return DefaultDeploy("models/v_saw.mdl", "models/p_saw.mdl", M249_DEPLOY, "m249");
}
void CM249::Holster(int skiplocal)
{
m_fInSpecialReload = FALSE;
CBasePlayerWeapon::Holster();
}
void CM249::PrimaryAttack()
{
@ -139,8 +145,7 @@ void CM249::PrimaryAttack()
m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
m_iClip--;
UpdateTape();
m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH;
// player "shoot" animation
@ -172,7 +177,7 @@ void CM249::PrimaryAttack()
flags = 0;
#endif
PLAYBACK_EVENT_FULL(flags, m_pPlayer->edict(), m_usM249, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0);
PLAYBACK_EVENT_FULL(flags, m_pPlayer->edict(), m_usM249, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, pev->body, 0, 0);
#ifndef CLIENT_DLL
@ -193,7 +198,7 @@ void CM249::PrimaryAttack()
// HEV suit - indicate out of ammo condition
m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
m_flNextPrimaryAttack = GetNextAttackDelay(0.1);
m_flNextPrimaryAttack = GetNextAttackDelay(0.067);
if (m_flNextPrimaryAttack < UTIL_WeaponTimeBase())
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1;
@ -204,12 +209,31 @@ void CM249::PrimaryAttack()
void CM249::Reload(void)
{
if (m_pPlayer->ammo_556 <= 0)
if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == M249_MAX_CLIP)
return;
DefaultReload(M249_MAX_CLIP, M249_RELOAD1, 1.5);
if (DefaultReload(M249_MAX_CLIP, M249_LAUNCH, 1.33, pev->body)) {
m_fInSpecialReload = TRUE;
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 3.78;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3.78;
}
}
void CM249::WeaponTick()
{
if ( m_fInSpecialReload )
{
if (m_pPlayer->m_flNextAttack <= UTIL_WeaponTimeBase())
{
UpdateTape();
m_fInSpecialReload = FALSE;
SendWeaponAnim( M249_RELOAD1, UseDecrement(), pev->body );
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 2.4;
}
return;
}
}
void CM249::WeaponIdle(void)
{
@ -220,17 +244,14 @@ void CM249::WeaponIdle(void)
if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase())
return;
float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0.0f, 1.0f );
int iAnim;
switch (RANDOM_LONG(0, 1))
{
case 0:
if (flRand <= 0.8) {
iAnim = M249_SLOWIDLE;
break;
default:
case 1:
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5;
} else {
iAnim = M249_IDLE2;
break;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 155.0/25.0;
}
SendWeaponAnim(iAnim);
@ -238,15 +259,15 @@ void CM249::WeaponIdle(void)
m_flTimeWeaponIdle = UTIL_SharedRandomFloat(m_pPlayer->random_seed, 10, 15); // how long till we do this again.
}
void CM249::ReloadStart(void)
void CM249::UpdateTape()
{
SendWeaponAnim(M249_RELOAD1, UseDecrement());
}
void CM249::ReloadInsert(void)
{
SendWeaponAnim(M249_RELOAD1, UseDecrement());
if (m_iClip == 0) {
pev->body = 8;
} else if (m_iClip > 0 && m_iClip < 8) {
pev->body = 9 - m_iClip;
} else {
pev->body = 0;
}
}
class CM249AmmoClip : public CBasePlayerAmmo
@ -273,4 +294,4 @@ class CM249AmmoClip : public CBasePlayerAmmo
}
};
LINK_ENTITY_TO_CLASS(ammo_556, CM249AmmoClip);
LINK_ENTITY_TO_CLASS(ammo_556, CM249AmmoClip);

View File

@ -1697,7 +1697,7 @@ IMPLEMENT_SAVERESTORE( CBarnacleGrapple, CBasePlayerWeapon )
TYPEDESCRIPTION CM249::m_SaveData[] =
{
DEFINE_FIELD( CM249, m_iReloadState, FIELD_INTEGER ),
DEFINE_FIELD( CM249, m_fInSpecialReload, FIELD_INTEGER ),
};
IMPLEMENT_SAVERESTORE( CM249, CBasePlayerWeapon )

View File

@ -1247,7 +1247,9 @@ public:
void PrimaryAttack(void);
BOOL Deploy(void);
void Holster(int skiplocal = 0);
void Reload(void);
void WeaponTick();
void WeaponIdle(void);
virtual BOOL ShouldWeaponIdle(void) { return TRUE; }
float m_flNextAnimTime;
@ -1262,12 +1264,7 @@ public:
#endif
}
void ReloadStart( void );
void ReloadInsert( void );
enum M249_RELOAD_STATE { RELOAD_STATE_NONE = 0, RELOAD_STATE_OPEN, RELOAD_STATE_FILL };
int m_iReloadState;
void UpdateTape();
private:
unsigned short m_usM249;