コード例 #1
0
    //will add any potential neighbouring nodes to the potential path list if they haven't already, will check to see if the path has reached the goal
    void CalculateNeighbours()
    {
        List <STR_ID> neighbours = currentNode.ReturnNeighbours();

        for (int i = 0; i < neighbours.Count; i++)
        {
            SCR_NodeClass neighbourNode      = nodeManager.ReturnNode(neighbours[i]);
            STR_ID        currentNeighbourID = neighbourNode.returnID();
            STR_ID        currentNodeID      = currentNode.returnID();
            if (currentNodeID.Compare(currentNeighbourID) == false)
            {
                if (listOfNodes.Contains(neighbourNode))
                {
                    if (neighbourNode.ReturnRoomType() != RoomType.BlockedRoute)
                    {
                        var current = new CalculatePath(neighbourNode, currentNode);

                        if (neighbourNode.ReturnRoomType() == RoomType.InitialFightRoom || neighbourNode.ReturnRoomType() == RoomType.ChallangeRoom)
                        {
                            if (!finalPathPoints.Contains(neighbourNode))
                            {
                                closed.Add(current);
                            }
                        }



                        if ((!open.Contains(current)) && (!closed.Contains(current)))
                        {
                            if (CheckOpenList(currentNodeID, currentNeighbourID) == false && CheckClosedList(currentNodeID, currentNeighbourID) == false)
                            {
                                open.Add(current);
                            }
                        }
                    }
                }
            }
        }

        closed.Add(open[currentPos]);

        Vector3 endPos          = goal.returnID().body.transform.position;
        STR_ID  currentID       = currentNode.returnID();
        Vector3 currentPosition = currentNode.returnID().body.transform.position;

        if (currentNode == goal)
        {
            pathfound = true;
            pathEnd   = closed.Count - 1;
        }
        open.Remove(open[currentPos]);
    }
コード例 #2
0
    private void OnSceneGUI()
    {
        for (int i = 0; i < nodes.ReturnListSize(); i++)
        {
            SCR_NodeClass currentNode = nodes.ReturnNodeAtIndex(i);

            List <STR_ID> currentNeighbours = currentNode.ReturnNeighbours();
            Transform     nodePos           = currentNode.returnID().body.transform;
            GUIStyle      style             = new GUIStyle();
            style.normal.textColor = Color.white;
            Handles.Label(nodePos.position, nodePos.gameObject.name, style);
            Color    currentColour   = Color.blue;
            RoomType currentRoomType = currentNode.ReturnRoomType();
            if (currentRoomType == RoomType.PrimaryRoom || currentRoomType == RoomType.InitialFightRoom || currentRoomType == RoomType.KeyRoom)
            {
                currentColour = new Color(1.0f, 0.64f, 0.0f, 1.0f);
            }
            else if (currentRoomType == RoomType.SecondaryPathway)
            {
                currentColour = Color.gray;
            }
            else if (currentRoomType == RoomType.StartRoom || currentRoomType == RoomType.EndRoom)
            {
                currentColour = Color.black;
            }
            else if (currentRoomType == RoomType.LootRoom)
            {
                currentColour = Color.blue;
            }
            else if (currentRoomType == RoomType.BlockedRoute)
            {
                currentColour = Color.red;
            }
            else if (currentRoomType == RoomType.UpgradeRoom)
            {
                currentColour = Color.yellow;
            }
            else if (currentRoomType == RoomType.ChallangeRoom)
            {
                currentColour = Color.magenta;
            }
            else if (currentRoomType == RoomType.smoothingPath)
            {
                currentColour = Color.white;
            }

            Handles.color = currentColour;
            Handles.DrawSolidDisc(nodePos.position, Vector3.up, nodes.nodeRadius);


            Handles.color = Color.blue;
            for (int j = 0; j < currentNeighbours.Count; j++)
            {
                Transform neighbourPos = currentNeighbours[j].body.transform;
                Handles.DrawLine(nodePos.position, neighbourPos.position);
            }
        }
    }
コード例 #3
0
    //Will select the next point to review within the map
    void CalculatePoint()
    {
        float   Fcost    = 10000000.0f;
        Vector3 startPos = start.returnID().body.transform.position;
        Vector3 endPos   = goal.returnID().body.transform.position;

        for (int i = 0; i < open.Count; i++)
        {
            STR_ID currentID = open[i].ReturningMainNode().returnID();

            var CurrentFCost = CalculateCost(currentID.body.transform.position, startPos) + CalculateCost(currentID.body.transform.position, endPos);
            if (CurrentFCost < Fcost)
            {
                Fcost       = CurrentFCost;
                currentNode = open[i].ReturningMainNode();
                currentPos  = i;
            }
        }
    }
コード例 #4
0
    //remove a node from the list, requires a node ID
    public void RemoveNode(STR_ID nodeID)
    {
        for (int i = 0; i < nodes.Count; i++)
        {
            SCR_NodeClass currentNode       = nodes[i];
            List <STR_ID> currentNeighbours = currentNode.ReturnNeighbours();

            if (nodeID.Compare(currentNode.returnID()))
            {
                nodes.RemoveAt(i);
            }

            for (int j = 0; j < currentNeighbours.Count; j++)
            {
                if (nodeID.Compare(currentNeighbours[j]))
                {
                    nodes[i].RemoveNeighbour(j);
                }
            }
        }
    }
コード例 #5
0
    //draws handles within the map
    private void OnSceneGUI()
    {
        for (int i = 0; i < nodeManager.ReturnListSize(); i++)
        {
            finalPathSelection = nodeManager.ReturnCameraNodes();
            SCR_NodeClass currentNode = nodeManager.ReturnNodeAtIndex(i);

            List <STR_ID> currentNeighbours = currentNode.ReturnNeighbours();
            Transform     nodePos           = currentNode.returnID().body.transform;
            Handles.Label(nodePos.position, nodePos.gameObject.name);
            Color currentColour = Color.blue;

            RoomType currentRoomType = currentNode.ReturnRoomType();
            if (currentRoomType == RoomType.PrimaryRoom || currentRoomType == RoomType.InitialFightRoom || currentRoomType == RoomType.KeyRoom)
            {
                if (finalPathSelection.Contains(currentNode))
                {
                    currentColour = Color.green;
                }
                else
                {
                    currentColour = Color.black;
                }
            }
            else if (currentRoomType == RoomType.SecondaryPathway)
            {
                currentColour = Color.gray;
            }
            else if (currentRoomType == RoomType.StartRoom || currentRoomType == RoomType.EndRoom)
            {
                currentColour = Color.black;
            }
            else if (currentRoomType == RoomType.LootRoom)
            {
                currentColour = Color.blue;
            }
            else if (currentRoomType == RoomType.BlockedRoute)
            {
                currentColour = Color.red;
            }
            else if (currentRoomType == RoomType.UpgradeRoom)
            {
                currentColour = Color.yellow;
            }
            else if (currentRoomType == RoomType.ChallangeRoom)
            {
                currentColour = Color.magenta;
            }
            else if (currentRoomType == RoomType.smoothingPath)
            {
                currentColour = Color.white;
            }
            Handles.color = currentColour;
            Handles.DrawSolidDisc(nodePos.position, Vector3.up, nodeManager.nodeRadius);



            for (int j = 0; j < currentNeighbours.Count; j++)
            {
                Transform neighbourPos = currentNeighbours[j].body.transform;
                currentColour = Color.blue;
                SCR_NodeClass NeighbourNode = nodeManager.ReturnNode(currentNeighbours[j]);
                if (finalPathSelection.Contains(NeighbourNode) && finalPathSelection.Contains(currentNode))
                {
                    currentColour = Color.green;
                }
                Handles.color = currentColour;
                Handles.DrawLine(nodePos.position, neighbourPos.position);
            }
        }
    }