Skip to content

Commit c5717bd

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 c5717bd

2 files changed

Lines changed: 20 additions & 47 deletions

File tree

src/game/shared/swarm/asw_weapon_welder_shared.cpp

Lines changed: 19 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();
221209
}
222210
else
223211
{
@@ -232,6 +220,21 @@ void CASW_Weapon_Welder::WeldDoor(bool bSeal)
232220
}
233221
}
234222

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

237240
void CASW_Weapon_Welder::ItemPostFrame()
@@ -242,19 +245,7 @@ void CASW_Weapon_Welder::ItemPostFrame()
242245
{
243246
if ( m_bPlayingWelderSound )
244247
{
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-
}
248+
FinishWeld();
258249
//Msg( "Clearing weld door as no marine\n" );
259250
}
260251
return BaseItemPostFrame();
@@ -319,33 +310,14 @@ void CASW_Weapon_Welder::ItemPostFrame()
319310
if ( ( m_iAutomaticWeldDirection > 0 && m_pWeldDoor->GetSealAmount() >= 1.0f ) ||
320311
( m_iAutomaticWeldDirection < 0 && m_pWeldDoor->GetSealAmount() <= 0.0f ) )
321312
{
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;
313+
FinishWeld();
333314
}
334315
}
335316
else
336317
{
337318
if ( !FindDoor() )
338319
{
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;
320+
FinishWeld();
349321
}
350322
}
351323
}

src/game/shared/swarm/asw_weapon_welder_shared.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class CASW_Weapon_Welder : public CASW_Weapon
2929
virtual void PrimaryAttack();
3030
virtual void SecondaryAttack();
3131
virtual void WeldDoor(bool bSeal);
32+
virtual void FinishWeld();
3233

3334
#ifndef CLIENT_DLL
3435
DECLARE_DATADESC();

0 commit comments

Comments
 (0)