private void HandleTileTap(PlayerMapTile tile)
        {
            if (tile.discoverable)
            {
                if (resourcesService.EnoughResources(ResourceType.STEAM, currentMap.discoverySteamCost))
                {
                    mapService.DiscoverTile(currentMap.mapId, tile);
                }
                else
                {
                    var error = popupCanvasController.OpenPopup(errorPopupPrefab);
                    error.SetError("Insufficient resources", "Not enough steam to discover map tile");
                }

                return;
            }

            if (tile.discovered)
            {
                if (tile.fightId != null && (tile.victoriousFight == false || tile.fightRepeatable == true))
                {
                    var mission = missionService.GetMission(currentMap.mapId, tile.posX, tile.posY);
                    if (mission != null)
                    {
                        var missionPopup = popupCanvasController.OpenPopup(missionDetailPrefab);
                        missionPopup.SetMission(mission);
                    }
                    else
                    {
                        var fightPopup = popupCanvasController.OpenPopup(startFightPrefab);
                        fightPopup.SetMapTile(currentMap, tile);
                    }
                }
                else if (tile.structure != null)
                {
                    if (tile.portalToMapId != null)
                    {
                        mapService.ChangeMapTo((long)tile.portalToMapId);
                    }
                    else if (tile.buildingType != null)
                    {
                        var building = buildingService.Building((BuildingType)tile.buildingType);
                        if (building != null)
                        {
                            metagameManager.OpenBuilding(building.type);
                        }
                        else
                        {
                            Debug.Log($"discover new building: {tile.buildingType}");
                        }
                    }
                    else if (!tile.chestOpened)
                    {
                        mapService.OpenChest(currentMap.mapId, tile, data =>
                        {
                            if (data.looted != null)
                            {
                                var lootedPopup = popupCanvasController.OpenPopup(lootedPrefab);
                                lootedPopup.SetLooted(data.looted);
                            }
                        });
                    }
                }
            }
        }