2using System.Collections.Generic;
10 public static Action<Point, bool>
onVisit;
12 public static int MAX(
int a,
int b)
21 public static int ABS(
int a)
30 public static int ZSGN(
int a)
43 private static bool IsBlocked(
int x,
int z,
int sx,
int sz)
54 if ((sz == -1 && weights[0] == 0) || (sz == 1 && weights[2] == 0) || (sx == 1 && weights[1] == 0) || (sx == -1 && weights[3] == 0))
58 if (!flag && sx != 0 && sz != 0)
67 if ((sz < 0 && weights2[2] == 0) || (sx > 0 && weights2[3] == 0))
71 if ((sz > 0 && weights2[0] == 0) || (sx < 0 && weights2[1] == 0))
90 public static List<Point>
ListVisible(
Point p1,
Point p2,
int radius, Action<Point, bool> _onVisit =
null,
bool returnOnBlocked =
true)
92 List<Point> list =
new List<Point>();
93 List<Point> vecs =
new List<Point>();
97 Point point3 =
new Point(point4.
x - lastPoint.
x, point4.
z - lastPoint.
z);
98 if (point3.
x != 0 || point3.
z != 0)
102 lastPoint.
Set(point4);
103 }, returnOnBlock:
false);
109 for (
int num = 0; num < radius; num++)
111 Point point2 = vecs[num % vecs.Count];
117 if (!blocked || !returnOnBlocked)
119 list.Add(point3.
Copy());
121 if (_onVisit !=
null)
123 _onVisit(point3, blocked);
136 dest = new Point(point);
144 Point rushPos =
null;
150 if (blocked || point.HasChara || point.IsBlocked)
156 rushPos = point.Copy();
169 return IsVisible(p1.
x, p2.
x, p1.
z, p2.
z, _onVisit);
177 public static bool IsVisible(
int x1,
int x2,
int z1,
int z2, Action<Point, bool> _onVisit =
null,
bool returnOnBlock =
true)
181 originalP.
Set(x1, z1);
184 int num = ABS(a) << 1;
185 int num2 = ABS(a2) << 1;
192 int num7 = num2 - (num >> 1);
200 onVisit(p, arg2:
false);
204 if (IsBlocked(num5, num6, num3, (num7 >= 0) ? num4 : 0) && returnOnBlock)
220 int num8 = num - (num2 >> 1);
228 onVisit(p, arg2:
false);
232 if (IsBlocked(num5, num6, (num8 >= 0) ? num3 : 0, num4) && returnOnBlock)
static int MAX(int a, int b)
static bool IsVisible(int x1, int x2, int z1, int z2, Action< Point, bool > _onVisit=null, bool returnOnBlock=true)
static List< Point > ListVisible(Point p1, Point p2, int radius, Action< Point, bool > _onVisit=null, bool returnOnBlocked=true)
static bool IsVisible(Card c1, Card c2)
static Point GetNearestNeighbor(Point p1, Point p2)
static bool IsBlocked(int x, int z, int sx, int sz)
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
static Point GetRushPoint(Point p1, Point dest)
static Action< Point, bool > onVisit
Point Set(int _x, int _z)
bool Equals(int _x, int _z)