@@ -20,7 +20,7 @@ LINK_ENTITY_TO_CLASS( trigger_inout, CTriggerInOut );
2020BEGIN_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 ),
2424END_DATADESC()
2525
2626void CTriggerInOut::KeyValue( KeyValueData *pkvd )
@@ -41,13 +41,13 @@ void CTriggerInOut::KeyValue( KeyValueData *pkvd )
4141
4242int 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
7778void 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
8890void 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
119122void 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}
0 commit comments