Exemplo n.º 1
0
    static public List <Vector2> FindPath(
        Vector2 start,
        Vector2 end,
        bool flying = false)
    {
        Vector2 startTile = map.getTileFromPosition(start.x, start.y);
        Vector2 endTile   = map.getTileFromPosition(end.x, end.y);

        if ((map.getTileTypeFromPosition(end.x, end.y) != MapGeneration.TileType.Ground ||
             map.getTileTypeFromPosition(start.x, start.y) != MapGeneration.TileType.Ground) &&
            !flying)
        {
            return(null);
        }
        openList.Clear();
        nodeCosts.Clear();
        nodeStatus.Clear();
        PathNode startNode;
        PathNode endNode;

        endNode   = new PathNode(null, null, endTile, 0);
        startNode = new PathNode(null, endNode, startTile, 0);
        addNodeToOpenList(startNode);
        while (openList.Count > 0)
        {
            PathNode currentNode = openList[openList.Count - 1];
            if (currentNode.IsEqualToNode(endNode))
            {
                List <Vector2> bestPath = new List <Vector2>();
                while (currentNode != null)
                {
                    bestPath.Insert(0, currentNode.GridLocation);
                    currentNode = currentNode.ParentNode;
                }
                return(bestPath);
            }
            openList.Remove(currentNode);
            nodeCosts.Remove(currentNode.GridLocation);
            foreach (PathNode possibleNode in findAdjacentNodes(currentNode, endNode, flying))
            {
                if (nodeStatus.ContainsKey(possibleNode.GridLocation))
                {
                    if (nodeStatus[possibleNode.GridLocation] ==
                        NodeStatus.Closed)
                    {
                        continue;
                    }
                    if (
                        nodeStatus[possibleNode.GridLocation] ==
                        NodeStatus.Open)
                    {
                        if (possibleNode.TotalCost >=
                            nodeCosts[possibleNode.GridLocation])
                        {
                            continue;
                        }
                    }
                }
                addNodeToOpenList(possibleNode);
            }
            nodeStatus[currentNode.GridLocation] = NodeStatus.Closed;
        }
        return(null);
    }
Exemplo n.º 2
0
    private void Update()
    {
        if (!cutScene && !dead)
        {
            if (inventory != null)
            {
                horizontalInput = Input.GetAxisRaw("Horizontal");
                verticalInput   = Input.GetAxisRaw("Vertical");
                if (Input.GetKey(KeyCode.LeftShift) || inventory.open)
                {
                    halfSpeed = 2;
                }
                else
                {
                    halfSpeed = 1;
                }

                if (!inventory.open)//rplace with menu is open later
                {
                    if (Input.GetKeyUp(KeyCode.Q))
                    {
                        if (inventory.totalTraps > 0)
                        {
                            inventory.trapOn = Mathf.Clamp(inventory.trapOn - 1, 0, inventory.totalTraps);
                        }
                    }
                    else if (Input.GetKeyUp(KeyCode.E))
                    {
                        if (inventory.totalTraps > 0)
                        {
                            inventory.trapOn = Mathf.Clamp(inventory.trapOn + 1, 0, inventory.totalTraps - 1);
                        }
                    }
                    else if (Input.GetKeyUp(KeyCode.Space) && playerStats.traps.Count != 0)
                    {
                        if (!usingItem)
                        {
                            Vector2 coord = map.getTileFromPosition(transform.position.x, transform.position.y);
                            if (map.getTileTypeFromTilePosition((int)coord.x, (int)coord.y) == MapGeneration.TileType.Ground)
                            {
                                usingItem = true;
                                useTimer  = new Timer(playerStats.traps[inventory.trapOn].useTime);
                                useTimer.StartTimer();
                                timeBar.gameObject.SetActive(true);
                            }
                        }
                        else
                        {
                            usingItem = false;
                            useTimer.StopTimer();
                            timeBar.gameObject.SetActive(false);
                        }
                    }
                    else if (Input.GetKeyUp(KeyCode.Escape))
                    {
                        menu.Settings();
                        cutScene = true;
                    }
                }
                if (Input.GetKeyUp(KeyCode.I))
                {
                    if (!inventory.open)
                    {
                        inventory.Show();
                    }
                    else
                    {
                        inventory.Hide();
                    }
                }
                if (Input.GetKeyUp(KeyCode.C))
                {
                    if (!inventory.open)
                    {
                        inventory.ShowCrafting();
                    }
                    else
                    {
                        if (inventory.crafting)
                        {
                            inventory.Hide();
                        }
                        else
                        {
                            inventory.ShowCrafting();
                        }
                    }
                }
            }
            else
            {
                Debug.LogError("Inventory not connected to Player. Where is Inventory?");
            }
        }
        else
        {
            horizontalInput = 0;
            verticalInput   = 0;
            if (dead)
            {
                if (fadeoutTime <= 0)
                {
                    Destroy(PlayerStats.getInstacne().gameObject);
                    gameObject.GetComponent <ChangeScene>().changeSceneTo("GameOver");
                }
                else
                {
                    fadeoutTime -= Time.deltaTime;
                }
            }
        }
    }