Ejemplo n.º 1
0
    void TryInteract()
    {
        // Get tile under player
        Tile tileUnderMe = areaController.active_area.GetTile(transform.position);

        if (tileUnderMe == null)
        {
            return;
        }
        GameObject tileGobj = areaController.GetTileGObj(tileUnderMe);

        if (tileGobj == null)
        {
            return;
        }
        Interactable interactable = null;

        while (interactable == null)
        {
            interactable = tileGobj.GetComponentInChildren <Interactable>();

            if (interactable == null)
            {
                // try its neighbors
                Tile[] neighbors = tileUnderMe.GetNeighbors();
                for (int i = 0; i < neighbors.Length; i++)
                {
                    if (neighbors[i] == null)
                    {
                        continue;
                    }
                    if (neighbors[i].hasTerminal)
                    {
                        interactable = TerminalController.instance.terminal_Interactable;
                        break;
                    }
                    tileGobj = areaController.GetTileGObj(neighbors[i]);
                    if (tileGobj == null)
                    {
                        continue;
                    }

                    interactable = tileGobj.GetComponentInChildren <Interactable>();

                    if (interactable != null)
                    {
                        break;                         // FOUND ONE
                    }
                }

                // if nothing was found, break!
                break;
            }
        }

        if (interactable != null)
        {
            interactable.TryInteract(this.gameObject);
            return;
        }

        Debug.Log("No interactable found!");
    }