private void GenerateNodeConnections(MapQuadTree.Node parentNode, MapQuadTree.Node node) { if (node == null) { return; } if (node.hasNoChildren) { List <MapQuadTree.Node> neighbours = GetNeighbours(node); for (int i = 0; i < neighbours.Count; i++) { MapQuadTree.Node node2 = neighbours[i]; if (node.connectedNodes == null || !node.connectedNodes.Contains(node2)) { if (node.connectedNodes == null) { node.connectedNodes = new List <MapQuadTree.Node>(); } node.connectedNodes.Add(node2); } if (node2.connectedNodes == null || !node2.connectedNodes.Contains(node)) { if (node2.connectedNodes == null) { node2.connectedNodes = new List <MapQuadTree.Node>(); } node2.connectedNodes.Add(node); } } } GenerateNodeConnections(node, node.topLeft); GenerateNodeConnections(node, node.topRight); GenerateNodeConnections(node, node.bottomLeft); GenerateNodeConnections(node, node.bottomRight); }
public unsafe bool FindPath(MapData data, Vector3 startWorldPos, Vector3 endWorldPos, List <Vector3> path) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); val._002Ector(((IntPtr)(void *)startWorldPos).x, ((IntPtr)(void *)startWorldPos).z); Vector2 coords = default(Vector2); coords._002Ector((float)Mathf.RoundToInt(((IntPtr)(void *)endWorldPos).x), (float)Mathf.RoundToInt(((IntPtr)(void *)endWorldPos).z)); MapQuadTree.Node nodeAt = data.quadTree.GetNodeAt(val); if (nodeAt == null) { return(false); } MapQuadTree.Node node = data.quadTree.GetNodeAt(coords); if (node == null && !data.quadTree.TryGetClosestCell(new Vector2(((IntPtr)(void *)endWorldPos).x, ((IntPtr)(void *)endWorldPos).z), out node, out coords)) { return(false); } return(ComputeFullPath(nodeAt, node, val, coords, path)); }
private List <Vector2> GetAllCellAroudNode(MapQuadTree.Node node) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) List <Vector2> list = new List <Vector2>(); Vector2 val4 = node.size * 0.5f; Vector2 value = node.min - Vector2.get_one() * 0.5f; Vector2 value2 = node.max + Vector2.get_one() * 0.5f; Vector2Int val = value.RoundToInt(); Vector2Int val2 = value2.RoundToInt(); Vector2Int val3 = val2 + Vector2Int.get_one() - val; for (int i = val.get_x() + 1; i < val2.get_x(); i++) { list.Add(new Vector2((float)i, (float)val.get_y())); if (val3.get_y() > 1) { list.Add(new Vector2((float)i, (float)val2.get_y())); } } for (int j = val.get_y() + 1; j < val2.get_y(); j++) { list.Add(new Vector2((float)val.get_x(), (float)j)); if (val3.get_x() > 1) { list.Add(new Vector2((float)val2.get_x(), (float)j)); } } return(list); }
public void GenerateNodeQuadTree() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) int num = Mathf.NextPowerOfTwo(m_size.get_x()); int num2 = Mathf.NextPowerOfTwo(m_size.get_y()); int num3 = Mathf.Max(num, num2); MapQuadTree.Node node = GenerateNodes(m_cells, Vector2Int.get_zero(), new Vector2Int(num3 - 1, num3 - 1)); m_quadTree.SetNodes(node); GenerateNodeConnections(null, node); }
public Node(Vector2 coord, Vector2 fromCoord, float cost, float priority, MapQuadTree.Node node, MapQuadTree.Node fromNode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) coords = coord; fromCoords = fromCoord; this.cost = cost; this.priority = priority; quadTreeNode = node; fromQuadTreeNode = fromNode; }
private List <MapQuadTree.Node> GetNeighbours(MapQuadTree.Node node) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) List <MapQuadTree.Node> list = new List <MapQuadTree.Node>(); List <Vector2> allCellAroudNode = GetAllCellAroudNode(node); for (int i = 0; i < allCellAroudNode.Count; i++) { MapQuadTree.Node nodeAt = quadTree.GetNodeAt(allCellAroudNode[i]); if (nodeAt != null && !list.Contains(nodeAt)) { list.Add(nodeAt); } } return(list); }
private MapQuadTree.Node GenerateNodes(CellData[] cells, Vector2Int start, Vector2Int end) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) Vector2Int val = end + Vector2Int.get_one() - start; MapQuadTree.Node node = new MapQuadTree.Node(); node.min = Vector2Int.op_Implicit(m_origin + start) - Vector2.get_one() * 0.5f; node.max = Vector2Int.op_Implicit(m_origin + end) + Vector2.get_one() * 0.5f; int num = val.get_x() * val.get_y(); int num2 = 0; for (int i = start.get_x(); i < end.get_x() + 1; i++) { for (int j = start.get_y(); j < end.get_y() + 1; j++) { if (IsInsideLocal(i, j) && cells[GetCellIndexLocal(i, j)].state == CellState.Walkable) { num2++; } } } if (num2 == 0) { return(null); } if (num2 == num) { return(node); } if (start == end) { return(null); } node.height = height; Vector2Int val2 = (node.size * 0.5f).RoundToInt(); Vector2Int val3 = val2 - Vector2Int.get_one(); Vector2Int val4 = start + new Vector2Int(0, val2.get_y()); node.topLeft = GenerateNodes(cells, val4, val4 + val3); Vector2Int val5 = start + val2; node.topRight = GenerateNodes(cells, val5, val5 + val3); Vector2Int val6 = start; node.bottomLeft = GenerateNodes(cells, val6, val6 + val3); Vector2Int val7 = start + new Vector2Int(val2.get_x(), 0); node.bottomRight = GenerateNodes(cells, val7, val7 + val3); return(node); }
private bool ComputeFullPath(MapQuadTree.Node startQuadTreeNode, MapQuadTree.Node endQuadTreeNode, Vector2 start, Vector2 end, List <Vector3> path) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) NodePriorityQueue frontier = m_frontier; Dictionary <MapQuadTree.Node, Node> steps = m_steps; frontier.Clear(); steps.Clear(); start.RoundToInt(); Node node = new Node(start, start, 0f, 0f, startQuadTreeNode, null); frontier.Enqueue(node); steps[startQuadTreeNode] = node; while (frontier.Count() != 0) { Node node2 = frontier.Dequeue(); Vector2 coords = node2.coords; float cost = node2.cost; MapQuadTree.Node quadTreeNode = node2.quadTreeNode; MapQuadTree.Node fromQuadTreeNode = node2.fromQuadTreeNode; List <MapQuadTree.Node> connectedNodes = node2.quadTreeNode.connectedNodes; if (quadTreeNode == endQuadTreeNode) { ReconstructPath(end, node2, path); return(true); } if (connectedNodes == null) { continue; } int count = connectedNodes.Count; for (int i = 0; i < count; i++) { MapQuadTree.Node node3 = connectedNodes[i]; if (node3 != fromQuadTreeNode) { Vector2 val = Vector2Int.op_Implicit(node3.ClampPositionToCell(coords)); float num = cost + coords.DistanceTo(val); float num2 = val.DistanceTo(end); if (!steps.TryGetValue(node3, out Node value) || !(value.cost < num)) { value = new Node(val, coords, num, num + num2, node3, quadTreeNode); frontier.Enqueue(value); steps[node3] = value; } } } } return(false); }