Exemple #1
0
 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);
 }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 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;
 }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }