Skip to content

Commit bc71a7f

Browse files
committed
refactor(welder): extract FinishWeld routine
1 parent 9007016 commit bc71a7f

2 files changed

Lines changed: 31 additions & 47 deletions

File tree

src/game/shared/swarm/asw_weapon_welder_shared.cpp

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

215215
if ( !bWelding )
216216
{
217-
m_iAutomaticWeldDirection = 0;
218-
m_bShotDelayed = false;
219-
#ifdef GAME_DLL
220-
if ( pMarine->GetMarineResource() )
221-
{
222-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
223-
}
224-
225-
m_pWeldDoor = NULL;
226-
227-
pMarine->OnWeldFinished();
228-
#endif
229-
m_bIsFiring = false;
217+
FinishWeld( pMarine, false );
230218
}
231219
else
232220
{
@@ -241,29 +229,41 @@ void CASW_Weapon_Welder::WeldDoor(bool bSeal)
241229
}
242230
}
243231

232+
void CASW_Weapon_Welder::FinishWeld( CASW_Marine* pMarine, bool bKeepWeldDirection )
233+
{
234+
m_bShotDelayed = false;
235+
#ifdef GAME_DLL
236+
if ( pMarine )
237+
{
238+
if ( pMarine->GetMarineResource() )
239+
{
240+
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
241+
}
242+
pMarine->OnWeldFinished();
243+
}
244+
#endif // GAME_DLL
245+
#ifndef CLIENT_DLL
246+
m_pWeldDoor = NULL;
247+
#endif // CLIENT_DLL
248+
if ( !bKeepWeldDirection )
249+
{
250+
m_iAutomaticWeldDirection = 0;
251+
}
252+
m_bIsFiring = false;
253+
}
254+
244255
// make the weapon weld if needed
245256

246257
void CASW_Weapon_Welder::ItemPostFrame()
247258
{
259+
CASW_Marine *pMarine = NULL;
248260
#ifndef CLIENT_DLL
249-
CASW_Marine *pMarine = GetMarine();
261+
pMarine = GetMarine();
250262
if ( !pMarine || !pMarine->GetCommander() )
251263
{
252264
if ( m_bPlayingWelderSound )
253265
{
254-
m_bIsFiring = false;
255-
256-
m_pWeldDoor = NULL;
257-
258-
if (pMarine)
259-
{
260-
if (pMarine->GetMarineResource())
261-
{
262-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
263-
}
264-
265-
pMarine->OnWeldFinished();
266-
}
266+
FinishWeld( pMarine, true );
267267
//Msg( "Clearing weld door as no marine\n" );
268268
}
269269
return BaseItemPostFrame();
@@ -328,32 +328,14 @@ void CASW_Weapon_Welder::ItemPostFrame()
328328
if ( ( m_iAutomaticWeldDirection > 0 && m_pWeldDoor->GetSealAmount() >= 1.0f ) ||
329329
( m_iAutomaticWeldDirection < 0 && m_pWeldDoor->GetSealAmount() <= 0.0f ) )
330330
{
331-
m_bShotDelayed = false;
332-
#ifdef GAME_DLL
333-
if ( pMarine->GetMarineResource() )
334-
{
335-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
336-
}
337-
m_pWeldDoor = NULL;
338-
pMarine->OnWeldFinished();
339-
#endif
340-
m_bIsFiring = false;
331+
FinishWeld( pMarine, false );
341332
}
342333
}
343334
else
344335
{
345336
if ( !FindDoor() )
346337
{
347-
m_bShotDelayed = false;
348-
#ifdef GAME_DLL
349-
if ( pMarine->GetMarineResource() )
350-
{
351-
pMarine->GetMarineResource()->m_hWeldingDoor = NULL;
352-
}
353-
m_pWeldDoor = NULL;
354-
pMarine->OnWeldFinished();
355-
#endif
356-
m_bIsFiring = false;
338+
FinishWeld( pMarine, true );
357339
}
358340
}
359341
}

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)