示例#1
0
        internal static bool canReachTarget(ref int range, Point target, Point attacker)
        {
            MapReach mr = MapCacheGet(attacker, target, gbl.mapToBackGroundTile.ignoreWalls);

            if (mr.range > (range * 2) + 1)
            {
                return(false);
            }
            else
            {
                range = mr.range;
                return(mr.reach);
            }
        }
示例#2
0
        //internal static void buildMapCache()
        //{
        //    for (int y1 = 0; y1 < Point.MapMaxY; y1++)
        //    {
        //        for (int x1 = 0; x1 < Point.MapMaxX; x1++)
        //        {
        //            var p1 = new Point(x1,y1);
        //            for (int y2 = 0; y2 < Point.MapMaxY; y2++)
        //            {
        //                for (int x2 = 0; x2 < Point.MapMaxX; x2++)
        //                {
        //                    gbl.mapToBackGroundTile.field_6 = false;
        //                    Point p2 = new Point(x2, y2);
        //                    int range = -1;
        //                    bool reach = canReachTargetCalc(gbl.mapToBackGroundTile, ref range, ref p2, p1);
        //
        //                    mapReachCache[(y1 * Point.MapMaxX) + x1, (y2 * Point.MapMaxX) + x2, 0] = new MapReach(reach, range, p2);
        //
        //                    gbl.mapToBackGroundTile.field_6 = true;
        //                    p2 = new Point(x2, y2);
        //                    range = -1;
        //                    reach = canReachTargetCalc(gbl.mapToBackGroundTile, ref range, ref p2, p1);
        //
        //                    mapReachCache[(y1 * Point.MapMaxX) + x1, (y2 * Point.MapMaxX) + x2, 1] = new MapReach(reach, range, p2);
        //                }
        //            }
        //        }
        //    }
        //}

        static MapReach MapCacheGet(Point p1, Point p2, bool ignoreWalls)
        {
            int      nIgnoreWalls = ignoreWalls ? 1 : 0;
            MapReach mr           = mapReachCache[(p2.y * Point.MapMaxX) + p2.x, (p1.y * Point.MapMaxX) + p1.x, nIgnoreWalls];

            if (mr != null)
            {
                return(mr);
            }

            bool bkup_val = gbl.mapToBackGroundTile.ignoreWalls;

            gbl.mapToBackGroundTile.ignoreWalls = ignoreWalls;

            mr = canReachTargetCalc(gbl.mapToBackGroundTile, p2, p1);

            gbl.mapToBackGroundTile.ignoreWalls = bkup_val;

            mapReachCache[(p2.y * Point.MapMaxX) + p2.x, (p1.y * Point.MapMaxX) + p1.x, nIgnoreWalls] = mr;
            return(mr);
        }
示例#3
0
        internal static void canReachTarget(ref Point target, Point attacker)
        {
            MapReach mr = MapCacheGet(attacker, target, gbl.mapToBackGroundTile.ignoreWalls);

            target = new Point(mr.target);
        }