//------------------------------------------------------------------------------ // Purpose: //------------------------------------------------------------------------------ void CPointPlayerMoveConstraint::InputTurnOn( inputdata_t &inputdata ) { // Find all players within our radius and constraint them float flRadius = m_flRadius; // If we're in singleplayer, blow the radius a bunch if ( gpGlobals->maxClients == 1 ) { flRadius = MAX_COORD_RANGE; } CBaseEntity *pEntity = NULL; while ( (pEntity = gEntList.FindEntityByClassnameWithin( pEntity, "player", GetLocalOrigin(), flRadius)) != NULL ) { CBasePlayer *pPlayer = ToBasePlayer( pEntity ); Assert( pPlayer ); // Only add him if he's not already constrained if ( m_hConstrainedPlayers.Find( pPlayer ) == m_hConstrainedPlayers.InvalidIndex() ) { m_hConstrainedPlayers.AddToTail( pPlayer ); pPlayer->ActivateMovementConstraint( this, GetAbsOrigin(), m_flRadius, m_flConstraintWidth, m_flSpeedFactor ); } } // Only think if we found any if ( m_hConstrainedPlayers.Count() ) { SetThink( &CPointPlayerMoveConstraint::ConstraintThink ); SetNextThink( gpGlobals->curtime + 0.1f ); } }