private void PopulateCheckboxes()
        {
            foreach (string i in m_checkboxes.Keys)
            {
                UnityEngine.Object.Destroy(m_checkboxes[i].gameObject);
            }
            ServiceSystemDefinition ssd = SingletonLite <T> .instance.GetSSD();

            m_defaultAssets = ssd.GetBuildingExtension().GetAllBasicAssets();
            m_checkboxes    = new Dictionary <string, UICheckBox>();

            LogUtils.DoLog("m_defaultAssets Size = {0} ({1})", m_defaultAssets?.Count, string.Join(",", m_defaultAssets.Keys?.ToArray() ?? new string[0]));
            foreach (string i in m_defaultAssets.Keys)
            {
                var checkbox = (UICheckBox)m_uiHelper.AddCheckbox(m_defaultAssets[i], false, (x) =>
                {
                    IVMCBuildingExtension ext = SingletonLite <T> .instance.GetSSD().GetBuildingExtension();

                    ushort buildingId = m_buildingInfo.buildingIdSel.Building;
                    if (m_isLoading)
                    {
                        return;
                    }

                    if (x)
                    {
                        if (ext.GetIgnoreDistrict(buildingId))
                        {
                            ext.AddAsset(buildingId, i);
                        }
                        else
                        {
                            SingletonLite <T> .instance.GetSSD().GetDistrictExtension().AddAsset(BuildingUtils.GetBuildingDistrict(buildingId), i);
                        }
                    }
                    else
                    {
                        if (ext.GetIgnoreDistrict(buildingId))
                        {
                            ext.RemoveAsset(buildingId, i);
                        }
                        else
                        {
                            SingletonLite <T> .instance.GetSSD().GetDistrictExtension().RemoveAsset(BuildingUtils.GetBuildingDistrict(buildingId), i);
                        }
                    }
                });
                CreateModelCheckBox(i, checkbox);
                checkbox.label.tooltip              = checkbox.label.text;
                checkbox.label.textScale            = 0.9f;
                checkbox.label.transform.localScale = new Vector3(Math.Min((m_mainPanel.width - 50) / checkbox.label.width, 1), 1);
                m_checkboxes[i] = checkbox;
            }
        }
        private void onChangeColor(UIComponent component, Color value)
        {
            if (m_isLoading)
            {
                return;
            }

            LogUtils.DoLog("onChangeColor");
            ServiceSystemDefinition ssd = SingletonLite <T> .instance.GetSSD();

            IVMCBuildingExtension ext = ssd.GetBuildingExtension();
            ushort buildingId         = m_buildingInfo.buildingIdSel.Building;

            if (ext.GetIgnoreDistrict(buildingId))
            {
                ext.SetColor(buildingId, value);
            }
            else
            {
                ssd.GetDistrictExtension().SetColor(BuildingUtils.GetBuildingDistrict(buildingId), value);
            }
        }
        private void OnBuildingChange(ushort buildingId)
        {
            LogUtils.DoLog("EventOnBuildingSelChanged");
            m_isLoading = true;
            IEnumerable <ServiceSystemDefinition> ssds = ServiceSystemDefinition.from(Singleton <BuildingManager> .instance.m_buildings.m_buffer[buildingId].Info);

            if (!ssds.Contains(SingletonLite <T> .instance.GetSSD()))
            {
                m_mainPanel.isVisible = false;
                return;
            }
            m_mainPanel.isVisible = true;
            ServiceSystemDefinition ssd = SingletonLite <T> .instance.GetSSD();

            IVMCBuildingExtension ext = ssd.GetBuildingExtension();
            bool isCustomConfig       = ext.GetIgnoreDistrict(buildingId);

            LogUtils.DoLog("ssd = {0}", ssd);

            List <string> selectedAssets;
            Color         selectedColor;

            if (isCustomConfig)
            {
                selectedAssets = ext.GetAssetList(buildingId);
                selectedColor  = ext.GetColor(buildingId);
            }
            else
            {
                ushort districtId             = BuildingUtils.GetBuildingDistrict(buildingId);
                IVMCDistrictExtension distExt = ssd.GetDistrictExtension();
                selectedAssets = distExt.GetAssetList(districtId);
                selectedColor  = distExt.GetColor(districtId);
            }
            foreach (string i in m_checkboxes.Keys)
            {
                m_checkboxes[i].isChecked = selectedAssets?.Contains(i) ?? false;
            }
            if (m_color != null)
            {
                m_color.selectedColor = selectedColor;
            }

            if (isCustomConfig)
            {
                m_title.text = string.Format(Locale.Get("K45_VMC_ASSET_SELECT_WINDOW_TITLE"), Singleton <BuildingManager> .instance.GetBuildingName(buildingId, default), ssd.NameForServiceSystem);
            }
            else
            {
                ushort districtId = BuildingUtils.GetBuildingDistrict(buildingId);
                if (districtId > 0)
                {
                    m_title.text = string.Format(Locale.Get("K45_VMC_ASSET_SELECT_WINDOW_TITLE_DISTRICT"), Singleton <DistrictManager> .instance.GetDistrictName(districtId), ssd.NameForServiceSystem);
                }
                else
                {
                    m_title.text = string.Format(Locale.Get("K45_VMC_ASSET_SELECT_WINDOW_TITLE_CITY"), ssd.NameForServiceSystem);
                }
            }

            m_isLoading = false;
            m_previewPanel.isVisible = false;
        }