public int Compare(object x, object y) { MapPosition a = (MapPosition)x; MapPosition b = (MapPosition)y; return(a.Distance(Position.Null).CompareTo(b.Distance(Position.Null))); }
public float Distance(MapPosition t) { float cx = pos.x - t.pos.x; float cy = pos.y - t.pos.y; float cz = pos.z - t.pos.z; return((float)Math.Sqrt(cx * cx + cy * cy + cz * cz)); }
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); }
public void Add(MapPosition t) { data.Add(t); }