public bool UpdateRange(Object curObj, bool forceUpdate = false) { if (!curObj.IsActive || curObj.IsDisposed) { return(false); } if (curObj.X == 0 && curObj.Y == 0) { return(false); } float distance = curObj.Get2DDistanceToWorldPoint(curObj.LastRangeCheck); if (distance > 100 || forceUpdate) { curObj.LastRangeCheck.X = curObj.WorldPosition.X; curObj.LastRangeCheck.Y = curObj.WorldPosition.Y; } else { return(false); } curObj.OnRangeUpdate(); GetRangedObject(curObj, 1, distObj => { if (distObj == null) { return; } if (IsVisibleBForA(curObj, distObj) && !curObj.HasInRange(distObj)) { curObj.AddInRange(distObj); distObj.AddInRange(curObj); if (curObj.IsPlayer()) { distObj.SendMeTo(curObj.GetPlayer()); } if (distObj.IsPlayer()) { curObj.SendMeTo(distObj.GetPlayer()); } } }); Object dist; for (var i = 0; i < curObj.ObjectsInRange.Count; ++i) { if ((dist = curObj.ObjectsInRange[i]) == null) { continue; } if (dist.Get2DDistanceToObject(curObj) > MaxVisibilityRange || !IsVisibleBForA(curObj, dist)) { curObj.RemoveInRange(dist); dist.RemoveInRange(curObj); i--; } } return(true); }