Skip to content

Commit ffa7f11

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

2 files changed

Lines changed: 27 additions & 48 deletions

File tree

src/game/shared/swarm/asw_weapon_welder_shared.cpp

Lines changed: 25 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -203,19 +203,7 @@ void CASW_Weapon_Welder::WeldDoor(bool bSeal)
203203

204204
if ( !bWelding )
205205
{
206-
m_iAutomaticWeldDirection = 0;
207-
m_bShotDelayed = false;
208-
#ifdef GAME_DLL
209-
if ( pMarine->GetMarineResource() )
210-
{
211-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
212-
}
213-
214-
m_pWeldDoor = NULL;
215-
216-
pMarine->OnWeldFinished();
217-
#endif
218-
m_bIsFiring = false;
206+
FinishWeld( pMarine, false );
219207
}
220208
else
221209
{
@@ -230,29 +218,37 @@ void CASW_Weapon_Welder::WeldDoor(bool bSeal)
230218
}
231219
}
232220

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

235242
void CASW_Weapon_Welder::ItemPostFrame()
236243
{
244+
CASW_Marine *pMarine = NULL;
237245
#ifndef CLIENT_DLL
238-
CASW_Marine *pMarine = GetMarine();
246+
pMarine = GetMarine();
239247
if ( !pMarine || !pMarine->GetCommander() )
240248
{
241249
if ( m_bPlayingWelderSound )
242250
{
243-
m_bIsFiring = false;
244-
245-
m_pWeldDoor = NULL;
246-
247-
if (pMarine)
248-
{
249-
if (pMarine->GetMarineResource())
250-
{
251-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
252-
}
253-
254-
pMarine->OnWeldFinished();
255-
}
251+
FinishWeld( pMarine, true );
256252
//Msg( "Clearing weld door as no marine\n" );
257253
}
258254
return BaseItemPostFrame();
@@ -317,33 +313,14 @@ void CASW_Weapon_Welder::ItemPostFrame()
317313
if ( ( m_iAutomaticWeldDirection > 0 && m_pWeldDoor->GetSealAmount() >= 1.0f ) ||
318314
( m_iAutomaticWeldDirection < 0 && m_pWeldDoor->GetSealAmount() <= 0.0f ) )
319315
{
320-
m_iAutomaticWeldDirection = 0;
321-
m_bShotDelayed = false;
322-
#ifdef GAME_DLL
323-
if ( pMarine->GetMarineResource() )
324-
{
325-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
326-
}
327-
m_pWeldDoor = NULL;
328-
pMarine->OnWeldFinished();
329-
#endif
330-
m_bIsFiring = false;
316+
FinishWeld( pMarine, false );
331317
}
332318
}
333319
else
334320
{
335321
if ( !FindDoor() )
336322
{
337-
m_bShotDelayed = false;
338-
#ifdef GAME_DLL
339-
if ( pMarine->GetMarineResource() )
340-
{
341-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
342-
}
343-
m_pWeldDoor = NULL;
344-
pMarine->OnWeldFinished();
345-
#endif
346-
m_bIsFiring = false;
323+
FinishWeld( pMarine, true );
347324
}
348325
}
349326
}

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, bool bKeepWeldDirection = false );
3234

3335
#ifndef CLIENT_DLL
3436
DECLARE_DATADESC();

0 commit comments

Comments
 (0)