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); } }
//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); }
internal static void canReachTarget(ref Point target, Point attacker) { MapReach mr = MapCacheGet(attacker, target, gbl.mapToBackGroundTile.ignoreWalls); target = new Point(mr.target); }