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!"); }