예제 #1
0
        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);
        }