diff --git a/dlls/gearbox/ropes.cpp b/dlls/gearbox/ropes.cpp index 237b8989..7e45431e 100644 --- a/dlls/gearbox/ropes.cpp +++ b/dlls/gearbox/ropes.cpp @@ -168,6 +168,7 @@ TYPEDESCRIPTION CRope::m_SaveData[] = DEFINE_FIELD( CRope, mEndingModel, FIELD_STRING ), DEFINE_FIELD( CRope, mAttachedObjectsOffset, FIELD_FLOAT ), DEFINE_FIELD( CRope, m_bMakeSound, FIELD_CHARACTER ), + DEFINE_FIELD( CRope, m_activated, FIELD_CHARACTER ), }; IMPLEMENT_SAVERESTORE( CRope, CBaseDelay ) @@ -242,11 +243,19 @@ void CRope::Spawn() m_NumSamples = m_iSegments + 1; - SetThink(&CRope::StartThink); - pev->nextthink = gpGlobals->time + 0.01; + m_activated = false; +} + +void CRope::Activate() +{ + if (!m_activated) + { + InitRope(); + m_activated = true; + } } -void CRope::StartThink() +void CRope::InitRope() { AddFlags( FL_ALWAYSTHINK ); @@ -1345,7 +1354,7 @@ class CElectrifiedWire : public CRope { public: CElectrifiedWire(); - void EXPORT StartElectrifiedThink(); + void InitElectrifiedRope(); virtual int Save( CSave &save ); virtual int Restore( CRestore &restore ); static TYPEDESCRIPTION m_SaveData[]; @@ -1355,6 +1364,7 @@ public: void Precache(); void Spawn(); + void Activate(); void EXPORT ElectrifiedRopeThink(); @@ -1490,13 +1500,20 @@ void CElectrifiedWire::Spawn() { CRope::Spawn(); pev->classname = MAKE_STRING( "env_electrified_wire" ); +} - SetThink(&CElectrifiedWire::StartElectrifiedThink); +void CElectrifiedWire::Activate() +{ + if (!m_activated) + { + InitElectrifiedRope(); + m_activated = true; + } } -void CElectrifiedWire::StartElectrifiedThink() +void CElectrifiedWire::InitElectrifiedRope() { - StartThink(); + InitRope(); m_uiNumUninsulatedSegments = 0; m_bIsActive = true; diff --git a/dlls/gearbox/ropes.h b/dlls/gearbox/ropes.h index 11680d20..3942a721 100644 --- a/dlls/gearbox/ropes.h +++ b/dlls/gearbox/ropes.h @@ -36,8 +36,9 @@ public: virtual void Precache(); virtual void Spawn(); + void Activate(); - void EXPORT StartThink(); + void InitRope(); void EXPORT RopeThink(); virtual int Save( CSave &save ); @@ -288,6 +289,9 @@ private: int mDisallowPlayerAttachment; bool m_bMakeSound; + +protected: + bool m_activated; }; #endif //ROPES_H