Skip to content

Commit 5dfa251

Browse files
committed
server: entities: refactored trigger_inout to use ehandle instead of raw pointers
1 parent 3dc4c00 commit 5dfa251

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

server/entities/trigger_inout.cpp

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ LINK_ENTITY_TO_CLASS( trigger_inout, CTriggerInOut );
2020
BEGIN_DATADESC( CTriggerInOut )
2121
DEFINE_KEYFIELD( m_iszAltTarget, FIELD_STRING, "m_iszAltTarget" ),
2222
DEFINE_KEYFIELD( m_iszBothTarget, FIELD_STRING, "m_iszBothTarget" ),
23-
DEFINE_FIELD( m_pRegister, FIELD_CLASSPTR ),
23+
DEFINE_FIELD( m_hRegister, FIELD_EHANDLE ),
2424
END_DATADESC()
2525

2626
void CTriggerInOut::KeyValue( KeyValueData *pkvd )
@@ -41,13 +41,13 @@ void CTriggerInOut::KeyValue( KeyValueData *pkvd )
4141

4242
int CTriggerInOut :: Restore( CRestore &restore )
4343
{
44-
CInOutRegister *pRegister;
44+
EHANDLE pRegister;
4545

4646
if( restore.IsGlobalMode() )
4747
{
4848
// we already have the valid chain.
4949
// Don't break it with bad pointers from previous level
50-
pRegister = m_pRegister;
50+
pRegister = m_hRegister;
5151
}
5252

5353
int status = BaseClass::Restore(restore);
@@ -57,7 +57,7 @@ int CTriggerInOut :: Restore( CRestore &restore )
5757
if( restore.IsGlobalMode() )
5858
{
5959
// restore our chian here
60-
m_pRegister = pRegister;
60+
m_hRegister = pRegister;
6161
}
6262

6363
return status;
@@ -67,30 +67,33 @@ void CTriggerInOut :: Spawn( void )
6767
{
6868
InitTrigger();
6969
// create a null-terminator for the registry
70-
m_pRegister = GetClassPtr( (CInOutRegister*)NULL );
71-
m_pRegister->m_hValue = NULL;
72-
m_pRegister->m_pNext = NULL;
73-
m_pRegister->m_pField = this;
74-
m_pRegister->pev->classname = MAKE_STRING("inout_register");
70+
m_hRegister = GetClassPtr( (CInOutRegister*)NULL );
71+
CInOutRegister *pRegister = dynamic_cast<CInOutRegister*>(m_hRegister.GetPointer());
72+
pRegister->m_hValue = NULL;
73+
pRegister->m_pNext = NULL;
74+
pRegister->m_pField = this;
75+
pRegister->pev->classname = MAKE_STRING("inout_register");
7576
}
7677

7778
void CTriggerInOut :: Touch( CBaseEntity *pOther )
7879
{
7980
if( !CanTouch( pOther ))
8081
return;
8182

82-
m_pRegister = m_pRegister->Add( pOther );
83+
CInOutRegister *pRegister = dynamic_cast<CInOutRegister*>(m_hRegister.GetPointer());
84+
pRegister = pRegister->Add( pOther );
8385

84-
if( pev->nextthink <= 0.0f && !m_pRegister->IsEmpty( ))
86+
if( pev->nextthink <= 0.0f && !pRegister->IsEmpty( ))
8587
SetNextThink( 0.05 );
8688
}
8789

8890
void CTriggerInOut :: Think( void )
8991
{
9092
// Prune handles all Intersects tests and fires targets as appropriate
91-
m_pRegister = m_pRegister->Prune();
93+
CInOutRegister *pRegister = dynamic_cast<CInOutRegister*>(m_hRegister.GetPointer());
94+
m_hRegister = pRegister->Prune();
9295

93-
if (m_pRegister->IsEmpty())
96+
if (pRegister->IsEmpty())
9497
DontThink();
9598
else
9699
SetNextThink( 0.05 );
@@ -118,8 +121,16 @@ void CTriggerInOut :: FireOnLeaving( CBaseEntity *pOther )
118121

119122
void CTriggerInOut :: OnRemove( void )
120123
{
121-
if( !m_pRegister ) return; // e.g. moved from another level
124+
if( !m_hRegister )
125+
return; // e.g. moved from another level
122126

123127
// Prune handles all Intersects tests and fires targets as appropriate
124-
m_pRegister = m_pRegister->Prune();
128+
CInOutRegister *pRegister = dynamic_cast<CInOutRegister*>(m_hRegister.GetPointer());
129+
m_hRegister = pRegister->Prune();
130+
}
131+
132+
STATE CTriggerInOut :: GetState()
133+
{
134+
CInOutRegister *pRegister = dynamic_cast<CInOutRegister*>(m_hRegister.GetPointer());
135+
return pRegister->IsEmpty() ? STATE_OFF : STATE_ON;
125136
}

server/entities/trigger_inout.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#pragma once
1717
#include "triggers.h"
18+
#include "ehandle.h"
1819
#include "inout_register.h"
1920

2021
class CTriggerInOut : public CBaseTrigger
@@ -29,12 +30,11 @@ class CTriggerInOut : public CBaseTrigger
2930
virtual void FireOnLeaving( CBaseEntity *pOther );
3031
virtual void OnRemove( void );
3132
void KeyValue( KeyValueData *pkvd );
33+
STATE GetState();
3234

3335
DECLARE_DATADESC();
3436

35-
STATE GetState() { return m_pRegister->IsEmpty() ? STATE_OFF : STATE_ON; }
36-
3737
string_t m_iszAltTarget;
3838
string_t m_iszBothTarget;
39-
CInOutRegister *m_pRegister;
39+
EHANDLE m_hRegister;
4040
};

0 commit comments

Comments
 (0)