Skip to content

Commit 42ac33e

Browse files
gunslingermodXottab-DUTY
authored andcommitted
Implementing more accurate way for weapon hiding fix
See previous commit for details
1 parent d243af2 commit 42ac33e

32 files changed

+69
-67
lines changed

src/xrGame/Artefact.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,10 +410,9 @@ bool CArtefact::Action(u16 cmd, u32 flags)
410410
return inherited::Action(cmd, flags);
411411
}
412412

413-
void CArtefact::OnStateSwitch(u32 S)
413+
void CArtefact::OnStateSwitch(u32 S, u32 oldState)
414414
{
415-
u32 oldState = GetState();
416-
inherited::OnStateSwitch(S);
415+
inherited::OnStateSwitch(S, oldState);
417416
switch (S)
418417
{
419418
case eShowing: { PlayHUDMotion("anm_show", FALSE, this, S);

src/xrGame/Artefact.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class CArtefact : public CHudItemObject, public CPHUpdateObject
9696
virtual void Show();
9797
virtual void UpdateXForm();
9898
virtual bool Action(u16 cmd, u32 flags);
99-
virtual void OnStateSwitch(u32 S);
99+
virtual void OnStateSwitch(u32 S, u32 oldState);
100100
virtual void OnAnimationEnd(u32 state);
101101
virtual bool IsHidden() const { return GetState() == eHidden; }
102102
// optimization FAST/SLOW mode

src/xrGame/CustomDetector.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,9 @@ void CCustomDetector::ToggleDetector(bool bFastMode)
117117
SwitchState(eHiding);
118118
}
119119

120-
void CCustomDetector::OnStateSwitch(u32 S)
120+
void CCustomDetector::OnStateSwitch(u32 S, u32 oldState)
121121
{
122-
u32 oldState = GetState();
123-
inherited::OnStateSwitch(S);
122+
inherited::OnStateSwitch(S, oldState);
124123

125124
switch (S)
126125
{

src/xrGame/CustomDetector.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ class CCustomDetector : public CHudItemObject
144144

145145
virtual void OnActiveItem();
146146
virtual void OnHiddenItem();
147-
virtual void OnStateSwitch(u32 S);
147+
virtual void OnStateSwitch(u32 S, u32 oldState);
148148
virtual void OnAnimationEnd(u32 state);
149149
virtual void UpdateXForm();
150150

src/xrGame/Grenade.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,12 @@ bool CGrenade::DropGrenade()
136136

137137
void CGrenade::DiscardState()
138138
{
139-
if (IsGameTypeSingle() && (GetState() == eReady || GetState() == eThrow))
140-
OnStateSwitch(eIdle);
139+
if (IsGameTypeSingle())
140+
{
141+
u32 state = GetState();
142+
if (state == eReady || state == eThrow)
143+
OnStateSwitch(eIdle, state);
144+
}
141145
}
142146

143147
void CGrenade::SendHiddenItem()

src/xrGame/HudItem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,13 @@ void CHudItem::OnEvent(NET_Packet& P, u16 type)
9797
{
9898
u8 S;
9999
P.r_u8(S);
100-
OnStateSwitch(u32(S));
100+
OnStateSwitch(u32(S), GetState());
101101
}
102102
break;
103103
}
104104
}
105105

106-
void CHudItem::OnStateSwitch(u32 S)
106+
void CHudItem::OnStateSwitch(u32 S, u32 oldState)
107107
{
108108
SetState(S);
109109

src/xrGame/HudItem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class CHUDState
4848
IC u32 CurrStateTime() const { return Device.dwTimeGlobal - m_dw_curr_state_time; }
4949
IC void ResetSubStateTime() { m_dw_curr_substate_time = Device.dwTimeGlobal; }
5050
virtual void SwitchState(u32 S) = 0;
51-
virtual void OnStateSwitch(u32 S) = 0;
51+
virtual void OnStateSwitch(u32 S, u32 oldState) = 0;
5252
};
5353

5454
class CHudItem : public CHUDState
@@ -110,7 +110,7 @@ class CHudItem : public CHUDState
110110
bool IsHiding() const { return GetState() == eHiding; }
111111
bool IsShowing() const { return GetState() == eShowing; }
112112
virtual void SwitchState(u32 S);
113-
virtual void OnStateSwitch(u32 S);
113+
virtual void OnStateSwitch(u32 S, u32 oldState);
114114

115115
virtual void OnAnimationEnd(u32 state);
116116
virtual void OnMotionMark(u32 state, const motion_marks&){};

src/xrGame/Level_input.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ void CLevel::IR_OnKeyboardPress(int key)
385385
CHudItem* pHudItem = smart_cast<CHudItem*>(pActor->inventory().ActiveItem());
386386
if (pHudItem)
387387
{
388-
pHudItem->OnStateSwitch(pHudItem->GetState());
388+
pHudItem->OnStateSwitch(pHudItem->GetState(), pHudItem->GetState());
389389
}
390390
}
391391
}

src/xrGame/Missile.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ void CMissile::shedule_Update(u32 dt)
239239
}
240240
}
241241

242-
void CMissile::State(u32 state, u32 old_state)
242+
void CMissile::State(u32 state, u32 oldState)
243243
{
244244
switch (state)
245245
{
@@ -259,7 +259,7 @@ void CMissile::State(u32 state, u32 old_state)
259259
{
260260
if (H_Parent())
261261
{
262-
if (old_state != eHiding)
262+
if (oldState != eHiding)
263263
{
264264
SetPending(TRUE);
265265
PlayHUDMotion("anm_hide", TRUE, this, GetState());
@@ -311,11 +311,10 @@ void CMissile::State(u32 state, u32 old_state)
311311
}
312312
}
313313

314-
void CMissile::OnStateSwitch(u32 S)
314+
void CMissile::OnStateSwitch(u32 S, u32 oldState)
315315
{
316316
m_dwStateTime = 0;
317-
u32 oldState = GetState();
318-
inherited::OnStateSwitch(S);
317+
inherited::OnStateSwitch(S, oldState);
319318
State(S, oldState);
320319
}
321320

src/xrGame/Missile.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class CMissile : public CHudItemObject
4545

4646
virtual bool Action(u16 cmd, u32 flags);
4747

48-
virtual void State(u32 state, u32 old_state);
49-
virtual void OnStateSwitch(u32 S);
48+
virtual void State(u32 state, u32 oldState);
49+
virtual void OnStateSwitch(u32 S, u32 oldState);
5050
virtual bool GetBriefInfo(II_BriefInfo& info);
5151

5252
protected:

src/xrGame/Spectator.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,11 @@ void CSpectator::FirstEye_ToPlayer(IGameObject* pObject)
364364
{
365365
pActor->inventory().Items_SetCurrentEntityHud(true);
366366

367-
/* CHudItem* pHudItem = smart_cast<CHudItem*>(pActor->inventory().ActiveItem());
368-
if (pHudItem)
369-
{
370-
pHudItem->OnStateSwitch(pHudItem->GetState());
371-
}*/
367+
/*CHudItem* pHudItem = smart_cast<CHudItem*>(pActor->inventory().ActiveItem());
368+
if (pHudItem)
369+
{
370+
pHudItem->OnStateSwitch(pHudItem->GetState(), pHudItem->GetState());
371+
}*/
372372
}
373373
};
374374
if (Device.Paused() && pOldActor)

src/xrGame/Weapon.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ void CWeapon::OnEvent(NET_Packet& P, u16 type)
683683

684684
if (OnClient())
685685
SetAmmoElapsed(int(AmmoElapsed));
686-
OnStateSwitch(u32(state));
686+
OnStateSwitch(u32(state), GetState());
687687
}
688688
break;
689689
default: { inherited::OnEvent(P, type);
@@ -1817,9 +1817,9 @@ const float& CWeapon::hit_probability() const
18171817
return (m_hit_probability[egdNovice]);
18181818
}
18191819

1820-
void CWeapon::OnStateSwitch(u32 S)
1820+
void CWeapon::OnStateSwitch(u32 S, u32 oldState)
18211821
{
1822-
inherited::OnStateSwitch(S);
1822+
inherited::OnStateSwitch(S, oldState);
18231823
m_BriefInfo_CalcFrame = 0;
18241824

18251825
// if(GetState()==eReload)

src/xrGame/Weapon.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ class CWeapon : public CHudItemObject, public CShootingObject
312312
virtual void SetDefaults();
313313

314314
virtual bool MovingAnimAllowedNow();
315-
virtual void OnStateSwitch(u32 S);
315+
virtual void OnStateSwitch(u32 S, u32 oldState);
316316
virtual void OnAnimationEnd(u32 state);
317317

318318
//трассирование полета пули

src/xrGame/WeaponAutomaticShotgun.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,15 @@ void CWeaponAutomaticShotgun::TriStateReload()
9999
SwitchState(eReload);
100100
}
101101

102-
void CWeaponAutomaticShotgun::OnStateSwitch(u32 S)
102+
void CWeaponAutomaticShotgun::OnStateSwitch(u32 S, u32 oldState)
103103
{
104104
if (!m_bTriStateReload || S != eReload)
105105
{
106-
inherited::OnStateSwitch(S);
106+
inherited::OnStateSwitch(S, oldState);
107107
return;
108108
}
109109

110-
CWeapon::OnStateSwitch(S);
110+
CWeapon::OnStateSwitch(S, oldState);
111111

112112
if (m_magazine.size() == (u32)iMagazineSize || !HaveCartridgeInInventory(1))
113113
{

src/xrGame/WeaponAutomaticShotgun.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class CWeaponAutomaticShotgun : public CWeaponMagazined
2929
protected:
3030
virtual void OnAnimationEnd(u32 state);
3131
void TriStateReload();
32-
virtual void OnStateSwitch(u32 S);
32+
virtual void OnStateSwitch(u32 S, u32 oldState);
3333

3434
bool HaveCartridgeInInventory(u8 cnt);
3535
virtual u8 AddCartridge(u8 cnt);

src/xrGame/WeaponKnife.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,16 @@ void CWeaponKnife::Load(LPCSTR section)
6868
knife_material_idx = GMLib.GetMaterialIdx(KNIFE_MATERIAL_NAME);
6969
}
7070

71-
void CWeaponKnife::OnStateSwitch(u32 S)
71+
void CWeaponKnife::OnStateSwitch(u32 S, u32 oldState)
7272
{
73-
u32 old_state = GetState();
74-
inherited::OnStateSwitch(S);
73+
inherited::OnStateSwitch(S, oldState);
7574
switch (S)
7675
{
7776
case eIdle: switch2_Idle(); break;
7877
case eShowing: switch2_Showing(); break;
7978
case eHiding:
8079
{
81-
if (old_state != eHiding)
80+
if (oldState != eHiding)
8281
switch2_Hiding();
8382
break;
8483
}

src/xrGame/WeaponKnife.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CWeaponKnife : public CWeapon
1717

1818
virtual void OnAnimationEnd(u32 state);
1919
virtual void OnMotionMark(u32 state, const motion_marks&);
20-
virtual void OnStateSwitch(u32 S);
20+
virtual void OnStateSwitch(u32 S, u32 oldState);
2121

2222
void state_Attacking(float dt);
2323

src/xrGame/WeaponMagazined.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -380,10 +380,9 @@ void CWeaponMagazined::ReloadMagazine()
380380
VERIFY((u32)iAmmoElapsed == m_magazine.size());
381381
}
382382

383-
void CWeaponMagazined::OnStateSwitch(u32 S)
383+
void CWeaponMagazined::OnStateSwitch(u32 S, u32 oldState)
384384
{
385-
u32 old_state = GetState();
386-
inherited::OnStateSwitch(S);
385+
inherited::OnStateSwitch(S, oldState);
387386
CInventoryOwner* owner = smart_cast<CInventoryOwner*>(this->H_Parent());
388387
switch (S)
389388
{
@@ -407,7 +406,7 @@ void CWeaponMagazined::OnStateSwitch(u32 S)
407406
case eHiding:
408407
if (owner)
409408
m_sounds_enabled = owner->CanPlayShHdRldSounds();
410-
if (old_state != eHiding)
409+
if (oldState != eHiding)
411410
switch2_Hiding();
412411
break;
413412
case eHidden: switch2_Hidden(); break;

src/xrGame/WeaponMagazined.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class CWeaponMagazined : public CWeapon
4949
virtual void OnEmptyClick();
5050

5151
virtual void OnAnimationEnd(u32 state);
52-
virtual void OnStateSwitch(u32 S);
52+
virtual void OnStateSwitch(u32 S, u32 oldState);
5353

5454
virtual void UpdateSounds();
5555

src/xrGame/WeaponMagazinedWGrenade.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ void CWeaponMagazinedWGrenade::ReloadMagazine()
405405
}
406406
}
407407

408-
void CWeaponMagazinedWGrenade::OnStateSwitch(u32 S)
408+
void CWeaponMagazinedWGrenade::OnStateSwitch(u32 S, u32 oldState)
409409
{
410410
switch (S)
411411
{
@@ -420,7 +420,7 @@ void CWeaponMagazinedWGrenade::OnStateSwitch(u32 S)
420420
break;
421421
}
422422

423-
inherited::OnStateSwitch(S);
423+
inherited::OnStateSwitch(S, oldState);
424424
UpdateGrenadeVisibility(!!iAmmoElapsed || S == eReload);
425425
}
426426

src/xrGame/WeaponMagazinedWGrenade.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class CWeaponMagazinedWGrenade : public CWeaponMagazined, public CRocketLauncher
3535
virtual void FireEnd();
3636
void LaunchGrenade();
3737

38-
virtual void OnStateSwitch(u32 S);
38+
virtual void OnStateSwitch(u32 S, u32 oldState);
3939

4040
virtual void switch2_Reload();
4141
virtual void state_Fire(float dt);

src/xrGame/WeaponRPG7.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ BOOL CWeaponRPG7::net_Spawn(CSE_Abstract* DC)
5959
return l_res;
6060
}
6161

62-
void CWeaponRPG7::OnStateSwitch(u32 S)
62+
void CWeaponRPG7::OnStateSwitch(u32 S, u32 oldState)
6363
{
64-
inherited::OnStateSwitch(S);
64+
inherited::OnStateSwitch(S, oldState);
6565
UpdateMissileVisibility();
6666
}
6767

src/xrGame/WeaponRPG7.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class CWeaponRPG7 : public CWeaponCustomPistol, public CRocketLauncher
1313
virtual ~CWeaponRPG7();
1414

1515
virtual BOOL net_Spawn(CSE_Abstract* DC);
16-
virtual void OnStateSwitch(u32 S);
16+
virtual void OnStateSwitch(u32 S, u32 oldState);
1717
virtual void OnEvent(NET_Packet& P, u16 type);
1818
virtual void ReloadMagazine();
1919
virtual void Load(LPCSTR section);

src/xrGame/WeaponShotgun.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ void CWeaponShotgun::TriStateReload()
106106
SwitchState(eReload);
107107
}
108108

109-
void CWeaponShotgun::OnStateSwitch(u32 S)
109+
void CWeaponShotgun::OnStateSwitch(u32 S, u32 oldState)
110110
{
111111
if (!m_bTriStateReload || S != eReload)
112112
{
113-
inherited::OnStateSwitch(S);
113+
inherited::OnStateSwitch(S, oldState);
114114
return;
115115
}
116116

117-
CWeapon::OnStateSwitch(S);
117+
CWeapon::OnStateSwitch(S, oldState);
118118

119119
if (m_magazine.size() == (u32)iMagazineSize || !HaveCartridgeInInventory(1))
120120
{

src/xrGame/WeaponShotgun.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class CWeaponShotgun : public CWeaponCustomPistol
3131
protected:
3232
virtual void OnAnimationEnd(u32 state);
3333
void TriStateReload();
34-
virtual void OnStateSwitch(u32 S);
34+
virtual void OnStateSwitch(u32 S, u32 oldState);
3535

3636
bool HaveCartridgeInInventory(u8 cnt);
3737
virtual u8 AddCartridge(u8 cnt);

src/xrGame/ai/stalker/ai_stalker_debug.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ void restore_actor()
133133
CHudItem* pHudItem = smart_cast<CHudItem*>(g_debug_actor->inventory().ActiveItem());
134134
if (pHudItem)
135135
{
136-
pHudItem->OnStateSwitch(pHudItem->GetState());
136+
pHudItem->OnStateSwitch(pHudItem->GetState(), pHudItem->GetState());
137137
}
138138
}
139139

src/xrGame/cta_game_artefact.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ bool CtaGameArtefact::Action(s32 cmd, u32 flags)
5757
return inherited::Action((u16)cmd, flags);
5858
}
5959

60-
void CtaGameArtefact::OnStateSwitch(u32 S)
60+
void CtaGameArtefact::OnStateSwitch(u32 S, u32 oldState)
6161
{
62-
inherited::OnStateSwitch(S);
62+
inherited::OnStateSwitch(S, oldState);
6363
/*// just temporary (before we get huds for artefact activation)
6464
if (S == eActivating)
6565
{
@@ -68,7 +68,7 @@ void CtaGameArtefact::OnStateSwitch(u32 S)
6868
return;
6969
} else
7070
{
71-
//inherited::OnStateSwitch(S);
71+
//inherited::OnStateSwitch(S, oldState);
7272
}*/
7373
}
7474

src/xrGame/cta_game_artefact.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class CtaGameArtefact : public CArtefact
2020
virtual ~CtaGameArtefact();
2121

2222
virtual bool Action(s32 cmd, u32 flags);
23-
virtual void OnStateSwitch(u32 S);
23+
virtual void OnStateSwitch(u32 S, u32 oldState);
2424
virtual void OnAnimationEnd(u32 state);
2525
virtual void UpdateCLChild();
2626
virtual bool CanTake() const;

0 commit comments

Comments
 (0)