Example #1
0
    private void OnDestroy()
    {
        // Detach from events
        map.OnMapUpdate -= OnMapUpdate;
        dataLayers.OnLayerVisibilityChange -= OnLayerVisibilityChange;

        // Stop coroutines
        if (drawingArea != null)
        {
            StopCoroutine(drawingArea);
        }

        if (planningOutputPanel != null)
        {
            outputPanel.DestroyPanel(planningOutputPanel.gameObject);
            planningOutputPanel = null;
        }

        // Clear icons
        foreach (var cell in planningCells)
        {
            cell.ClearIcon();
        }

        // Destroy pulsating cell
        if (pulsatingCell != null)
        {
            Destroy(pulsatingCell.gameObject);
            pulsatingCell = null;
        }

        // Destroy containers
        if (iconContainer != null)
        {
            Destroy(iconContainer.gameObject);
            iconContainer = null;
        }

        if (flagger != null)
        {
            Destroy(flagger.gameObject);
            flagger = null;
        }

        // Destroy materials
        foreach (var mat in materialsMap)
        {
            Destroy(mat.Value);
        }

        // Clear list and maps
        typologiesMap.Clear();
        materialsMap.Clear();
        planningCells.Clear();
        planningCellsMap.Clear();
        planningGroups.Clear();
    }
    //
    // Event Methods
    //

    protected override void OnToggleTool(bool isOn)
    {
        if (isOn)
        {
            // Create budget layer
            budgetLayer    = toolLayers.CreateGridMapLayer(budgetLayerPrefab, "WeightedLayer");
            highlightLayer = toolLayers.CreateGridMapLayer(highlightLayerPrefab, "HighlightLayer");
            highlightLayer.Show(false);

            // Store number of childs on start
            initChildsCount = transform.childCount + 1;

            // Add slider
            foreach (var panel in dataLayers.activeLayerPanels)
            {
                UpdateSlider(panel.DataLayer, true);
            }

            // Create output panel for tool
            municipalBudgetOutput      = Instantiate(outputPrefab);
            municipalBudgetOutput.name = "MunicipalBudget_OutputPanel";
            outputPanel.SetPanel(municipalBudgetOutput.transform);
            municipalBudgetOutput.OnItemHovering += OnItemHover;

            // Add event listeners
            siteBrowser.OnBeforeActiveSiteChange += OnBeforeActiveSiteChange;
            siteBrowser.OnAfterActiveSiteChange  += OnAfterActiveSiteChange;

            // Listen to any data layers being added/removed
            dataLayers.OnLayerAvailabilityChange += OnLayerAvailabilityChange;

            // Listen to any grids being added/removed
            var gridController = map.GetLayerController <GridLayerController>();
            gridController.OnShowGrid += OnShowGrid;

            // Initialize grids list with already visible grid layers
            foreach (var layer in gridController.mapLayers)
            {
                grids.Add(layer.Grid);
            }

            ShowBudgetLayer(false);

            // Add filter toggle event
            filterToggle.onValueChanged.AddListener(OnFilterToggleChange);
            noDataToggle.onValueChanged.AddListener(OnNoDataToggleChange);
            budgetLayer.useFilters = filterToggle.isOn;

            loadDataCR = StartCoroutine(LoadData());
        }
        else
        {
            if (loadDataCR != null)
            {
                StopCoroutine(loadDataCR);
            }

            // Remove listeners
            siteBrowser.OnBeforeActiveSiteChange -= OnBeforeActiveSiteChange;
            siteBrowser.OnAfterActiveSiteChange  -= OnAfterActiveSiteChange;
            dataLayers.OnLayerAvailabilityChange -= OnLayerAvailabilityChange;
            if (map != null)
            {
                var gridController = map.GetLayerController <GridLayerController>();
                if (gridController)
                {
                    gridController.OnShowGrid -= OnShowGrid;
                }
            }

            // Remove Output panel
            outputPanel.DestroyPanel(municipalBudgetOutput.gameObject);
            municipalBudgetOutput = null;

            // Remove map layer
            DeleteAllLayers();

            // Remove sliders
            foreach (var pair in sliders)
            {
                Destroy(pair.Value.gameObject);
            }
            sliders.Clear();

            grids.Clear();

            dataLayers.ResetToolOpacity();
        }
    }