ArrayList GetNearPoints(int map, Position pos, float distance) { Hashtable h = data.Get("MAP " + map.ToString()); if (h == null) { Log.WriteEvent("GetNearPoints no MAP " + map.ToString()); return(null); } ArrayList points = h["PP"] as ArrayList; MapPosition m = new MapPosition(pos, 0); int mh = m.GetHashCode(); int mhlow = mh - (int)Math.Abs((pos.x + distance) * distance); if (mhlow < 0) { mhlow = 0; } int mhhigh = mh + (int)Math.Abs((pos.y + distance) * distance); ArrayList ret = new ArrayList(); int center = FindHash(points, mh); for (int p = center; p >= 0; p--) { MapPosition t = points[p] as MapPosition; if (t.GetHashCode() < mhlow) { break; } if (t.Distance(m) > distance) { continue; } ret.Add(t); } for (int p = center; p < points.Count; p++) { MapPosition t = points[p] as MapPosition; if (t.GetHashCode() > mhhigh) { break; } if (t.Distance(m) > distance) { continue; } ret.Add(t); } return(ret); }