Skip to content

Commit b75b0f5

Browse files
committed
fix(welder): extract FinishWeld routine and always reset weld direction on finish
BaseItemPostFrame would always call WeldDoor otherwise
1 parent cc1ce58 commit b75b0f5

2 files changed

Lines changed: 24 additions & 47 deletions

File tree

src/game/shared/swarm/asw_weapon_welder_shared.cpp

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -205,19 +205,7 @@ void CASW_Weapon_Welder::WeldDoor(bool bSeal)
205205

206206
if ( !bWelding )
207207
{
208-
m_iAutomaticWeldDirection = 0;
209-
m_bShotDelayed = false;
210-
#ifdef GAME_DLL
211-
if ( pMarine->GetMarineResource() )
212-
{
213-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
214-
}
215-
216-
m_pWeldDoor = NULL;
217-
218-
pMarine->OnWeldFinished();
219-
#endif
220-
m_bIsFiring = false;
208+
FinishWeld( pMarine );
221209
}
222210
else
223211
{
@@ -232,6 +220,24 @@ void CASW_Weapon_Welder::WeldDoor(bool bSeal)
232220
}
233221
}
234222

223+
void CASW_Weapon_Welder::FinishWeld( CASW_Marine* pMarine )
224+
{
225+
m_iAutomaticWeldDirection = 0;
226+
m_bShotDelayed = false;
227+
#ifdef GAME_DLL
228+
if ( pMarine )
229+
{
230+
if ( pMarine->GetMarineResource() )
231+
{
232+
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
233+
}
234+
pMarine->OnWeldFinished();
235+
}
236+
m_pWeldDoor = NULL;
237+
#endif
238+
m_bIsFiring = false;
239+
}
240+
235241
// make the weapon weld if needed
236242

237243
void CASW_Weapon_Welder::ItemPostFrame()
@@ -242,19 +248,7 @@ void CASW_Weapon_Welder::ItemPostFrame()
242248
{
243249
if ( m_bPlayingWelderSound )
244250
{
245-
m_bIsFiring = false;
246-
247-
m_pWeldDoor = NULL;
248-
249-
if (pMarine)
250-
{
251-
if (pMarine->GetMarineResource())
252-
{
253-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
254-
}
255-
256-
pMarine->OnWeldFinished();
257-
}
251+
FinishWeld( pMarine );
258252
//Msg( "Clearing weld door as no marine\n" );
259253
}
260254
return BaseItemPostFrame();
@@ -319,33 +313,14 @@ void CASW_Weapon_Welder::ItemPostFrame()
319313
if ( ( m_iAutomaticWeldDirection > 0 && m_pWeldDoor->GetSealAmount() >= 1.0f ) ||
320314
( m_iAutomaticWeldDirection < 0 && m_pWeldDoor->GetSealAmount() <= 0.0f ) )
321315
{
322-
m_iAutomaticWeldDirection = 0;
323-
m_bShotDelayed = false;
324-
#ifdef GAME_DLL
325-
if ( pMarine->GetMarineResource() )
326-
{
327-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
328-
}
329-
m_pWeldDoor = NULL;
330-
pMarine->OnWeldFinished();
331-
#endif
332-
m_bIsFiring = false;
316+
FinishWeld( pMarine );
333317
}
334318
}
335319
else
336320
{
337321
if ( !FindDoor() )
338322
{
339-
m_bShotDelayed = false;
340-
#ifdef GAME_DLL
341-
if ( pMarine->GetMarineResource() )
342-
{
343-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
344-
}
345-
m_pWeldDoor = NULL;
346-
pMarine->OnWeldFinished();
347-
#endif
348-
m_bIsFiring = false;
323+
FinishWeld( pMarine );
349324
}
350325
}
351326
}

src/game/shared/swarm/asw_weapon_welder_shared.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#ifdef CLIENT_DLL
66
#define CASW_Weapon_Welder C_ASW_Weapon_Welder
77
#define CASW_Weapon C_ASW_Weapon
8+
#define CASW_Marine C_ASW_Marine
89
#include "c_asw_weapon.h"
910
#else
1011
#include "asw_weapon.h"
@@ -29,6 +30,7 @@ class CASW_Weapon_Welder : public CASW_Weapon
2930
virtual void PrimaryAttack();
3031
virtual void SecondaryAttack();
3132
virtual void WeldDoor(bool bSeal);
33+
virtual void FinishWeld( CASW_Marine* pMarine );
3234

3335
#ifndef CLIENT_DLL
3436
DECLARE_DATADESC();

0 commit comments

Comments
 (0)