Ejemplo n.º 1
0
 private static void ErrorPatchingHandler(string logString, string stackTrace, LogType type)
 {
     if (type == LogType.Exception)
     {
         K45DialogControl.ShowModal(new K45DialogControl.BindProperties
         {
             title   = "AN ERROR HAS OCCURRED!",
             message = $"An error happened while trying to patch all code needed to make the <color yellow>{CommonProperties.ModName}</color> work properly. Check output_log.txt file to see details." +
                       (CommonProperties.GitHubRepoPath.IsNullOrWhiteSpace() ? "" : "\nPlease open a issue in GitHub with the output file attached on it to help to fix this problem. Thanks!") +
                       $"\n\n<color #FF00FF>{logString}</color>\n{stackTrace}",
             showButton1        = true,
             showButton2        = true,
             showButton3        = !CommonProperties.GitHubRepoPath.IsNullOrWhiteSpace(),
             textButton1        = "OK",
             textButton2        = "Go to output_log.txt file (WIN)",
             textButton3        = "GitHub: open an issue to fix this",
             useFullWindowWidth = true
         }, (x) =>
         {
             if (x == 2)
             {
                 ColossalFramework.Utils.OpenInFileBrowser("Cities_Data/output_log.txt");
                 return(false);
             }
             if (x == 3)
             {
                 FileSystemUtils.OpenURLInOverlayOrBrowser($"https://github.com/{CommonProperties.GitHubRepoPath}/issues/new");
                 return(false);
             }
             return(true);
         });
         LogUtils.DoErrorLog($"{logString}\n{stackTrace}");
     }
 }
Ejemplo n.º 2
0
        private void ShowChangeNameConfigModal(string lastError) => K45DialogControl.ShowModalPromptText(
            new K45DialogControl.BindProperties
        {
            title       = Locale.Get("K45_WTS_PROPEDIT_NAMECHANGE_TITLE"),
            message     = (lastError.IsNullOrWhiteSpace() ? "" : $"{ Locale.Get("K45_WTS_PROPEDIT_NAMECHANGE_ANERROROCURRED")} {lastError}\n\n") + Locale.Get("K45_WTS_PROPEDIT_NAMECHANGE_MESSAGE"),
            showButton1 = true,
            textButton1 = Locale.Get("EXCEPTION_OK"),
            showButton2 = true,
            textButton2 = Locale.Get("CANCEL")
        }, (x, text) =>
        {
            if (x == 1)
            {
                string error = ValidateConfigName(text);

                if (error.IsNullOrWhiteSpace())
                {
                    WTSPropLayoutEditor.Instance.SetCurrentSelectionNewName(text);
                }
                else
                {
                    ShowChangeNameConfigModal(error);
                }
            }
            else
            {
                m_name.text = EditingInstance.SaveName;
            }
            return(true);
        }
            );
 private void AddPalette(string errorMsg = null, string oldVal = null) => K45DialogControl.ShowModalPromptText(new K45DialogControl.BindProperties
 {
     title   = Locale.Get("K45_TLM_ADDPALETTE"),
     message = (errorMsg + "\n").TrimToNull() + Locale.Get("K45_TLM_ADDPALETTE_PROMPTNAME"),
     defaultTextFieldContent = oldVal,
     showButton1             = true,
     textButton1             = Locale.Get("EXCEPTION_OK"),
     textButton2             = Locale.Get("CANCEL"),
     showButton2             = true
 }, (x, val) =>
 {
     if (x == 1)
     {
         if (val == TLMAutoColorPaletteContainer.PALETTE_RANDOM || !(TLMAutoColorPaletteContainer.GetPalette(val) is null))
         {
             AddPalette(Locale.Get("K45_TLM_ADDPALETTE_ERROR_PALETTEALREADYEXISTS"), val);
         }
         else if (val.IsNullOrWhiteSpace())
         {
             AddPalette(Locale.Get("K45_TLM_ADDPALETTE_ERROR_INVALIDNAME"), val);
         }
         TLMAutoColorPaletteContainer.AddPalette(val);
         TLMAutoColorPaletteContainer.Save(val);
         ReloadData();
         m_paletteSelect.selectedValue = val;
     }
     return(true);
 });
Ejemplo n.º 4
0
        protected static LIB LoadInstance()
        {
            var newVal = new LIB();

            return(File.Exists(newVal.DefaultXmlFileBaseFullPath)
                ? XmlUtils.DefaultXmlDeserialize <LIB>(File.ReadAllText(newVal.DefaultXmlFileBaseFullPath), (x, y) =>
            {
                K45DialogControl.ShowModal(new K45DialogControl.BindProperties
                {
                    title = Locale.Get("K45_CMNS_LIB_ANERROROCURREDWHILELOADING_TITLE"),
                    message = string.Format(Locale.Get("K45_CMNS_LIB_ANERROROCURREDWHILELOADING_MESSAGE"), newVal.XmlName, y?.Message ?? "InvalidSyntax"),
                    showButton1 = true,
                    textButton1 = Locale.Get("K45_CMNS_LIB_ANERROROCURREDWHILELOADING_OPT_DELETEFILE"),
                    showButton2 = true,
                    textButton2 = Locale.Get("K45_CMNS_LIB_ANERROROCURREDWHILELOADING_OPT_GOTOFILE"),
                    showButton3 = true,
                    textButton3 = Locale.Get("EXCEPTION_OK"),
                }, (z) =>
                {
                    if (z == 1)
                    {
                        File.Delete(newVal.DefaultXmlFileBaseFullPath);
                    }
                    if (z == 2)
                    {
                        ColossalFramework.Utils.OpenInFileBrowser(newVal.DefaultXmlFileBaseFullPath);
                        return false;
                    }
                    return true;
                });
            })
                : newVal);
        }
Ejemplo n.º 5
0
        protected void CreateGroup9(UIHelperExtension helper)
        {
            UIHelperExtension group9 = helper.AddGroupExtended(Locale.Get("K45_BETAS_EXTRA_INFO"));

            Group9SettingsUI(group9);

            group9.AddCheckbox(Locale.Get("K45_DEBUG_MODE"), DebugMode.value, delegate(bool val)
                               { DebugMode.value = val; });
            group9.AddLabel(string.Format(Locale.Get("K45_VERSION_SHOW"), FullVersion));
            group9.AddButton(Locale.Get("K45_RELEASE_NOTES"), delegate()
            {
                ShowVersionInfoPopup(true);
            });
            group9.AddButton("Report-a-bug helper", () => K45DialogControl.ShowModal(new K45DialogControl.BindProperties()
            {
                icon    = IconName,
                title   = "Report-a-bug helper",
                message = "If you find any problem with this mod, please send me the output_log.txt (or player.log on Mac/Linux) in the mod Workshop page. If applies, a printscreen can help too to make a better guess about what is happening wrong here...\n\n" +
                          "There's a link for a Workshop guide by <color #008800>aubergine18</color> explaining how to find your log file, depending of OS you're using.\nFeel free to create a topic at Workshop or just leave a comment linking your files.",
                showButton1 = true,
                textButton1 = "Okay...",
                showButton2 = true,
                textButton2 = "Go to the guide",
                showButton3 = true,
                textButton3 = "Go to mod page"
            }, (x) =>
            {
                if (x == 2)
                {
                    ColossalFramework.Utils.OpenUrlThreaded("https://steamcommunity.com/sharedfiles/filedetails/?id=463645931");
                    return(false);
                }
                if (x == 3)
                {
                    ColossalFramework.Utils.OpenUrlThreaded("https://steamcommunity.com/sharedfiles/filedetails/?id=" + ModId);
                    return(false);
                }
                return(true);
            }));

            if (m_showLangDropDown)
            {
                UIDropDown dd = null;
                dd = group9.AddDropdownLocalized("K45_MOD_LANG", (new string[] { "K45_GAME_DEFAULT_LANGUAGE" }.Concat(KlyteLocaleManager.locales.Select(x => $"K45_LANG_{x}")).Select(x => Locale.Get(x))).ToArray(), KlyteLocaleManager.GetLoadedLanguage(), delegate(int idx)
                {
                    KlyteLocaleManager.SaveLoadedLanguage(idx);
                    KlyteLocaleManager.ReloadLanguage();
                    KlyteLocaleManager.RedrawUIComponents();
                });
            }
            else
            {
                group9.AddLabel(string.Format(Locale.Get("K45_LANG_CTRL_MOD_INFO"), Locale.Get("K45_MOD_CONTROLLING_LOCALE")));
            }
        }
Ejemplo n.º 6
0
        private void ExportTo(string output, bool isAsset)
        {
            if (EditingInstance?.PropName != null)
            {
                ListWrapper <BoardDescriptorGeneralXml> currentFile;
                if (File.Exists(output))
                {
                    currentFile = DefaultXmlDeserialize <ListWrapper <BoardDescriptorGeneralXml> >(File.ReadAllText(output), (x, y) => currentFile = new ListWrapper <BoardDescriptorGeneralXml>());
                }
                else
                {
                    currentFile = new ListWrapper <BoardDescriptorGeneralXml>();
                }

                var targetLayoutName = EditingInstance.SaveName;
                var assetId          = EditingInstance.PropName.Split('.')[0];
                if (isAsset && targetLayoutName.StartsWith($"{assetId}/"))
                {
                    targetLayoutName = targetLayoutName.Split("/".ToCharArray(), 2)[1];
                }
                assetId += ".";
                var exportableLayouts = new ListWrapper <BoardDescriptorGeneralXml>
                {
                    listVal = currentFile.listVal
                              .Where(x => x.SaveName != targetLayoutName)
                              .Concat(new BoardDescriptorGeneralXml[] { CloneViaXml(EditingInstance) }.Select(x => { x.SaveName = targetLayoutName; return(x); }))
                              .ToList()
                };
                File.WriteAllText(output, DefaultXmlSerialize(exportableLayouts));

                WTSPropLayoutData.Instance.ReloadAllPropsConfigurations();

                K45DialogControl.ShowModal(
                    new K45DialogControl.BindProperties
                {
                    title       = WriteTheSignsMod.Instance.SimpleName,
                    message     = string.Format(Locale.Get("K45_WTS_SAVESUCCESSFULLAT"), output),
                    showButton1 = true,
                    textButton1 = Locale.Get("K45_CMNS_GOTO_FILELOC"),
                    showButton2 = true,
                    textButton2 = Locale.Get("EXCEPTION_OK"),
                }
                    , (x) =>
                {
                    if (x == 1)
                    {
                        ColossalFramework.Utils.OpenInFileBrowser(output);
                        return(false);
                    }
                    return(true);
                });;
            }
        }
Ejemplo n.º 7
0
        private void OnPasteFromClipboard()
        {
            var temp = XmlUtils.DefaultXmlDeserialize <LayoutDescriptorVehicleXml>(m_clipboard);

            if (!temp.IsValid())
            {
                K45DialogControl.ShowModalError("The current clipboard layout failed to be copied! See data below.", m_clipboard);
                return;
            }
            temp.VehicleAssetName = CurrentVehicleInfo.name;
            EditingInstance       = temp;
        }
Ejemplo n.º 8
0
        private void OnCopyToCity()
        {
            var data = XmlUtils.DefaultXmlDeserialize <LayoutDescriptorVehicleXml>(XmlUtils.DefaultXmlSerialize(EditingInstance));

            if (!data.IsValid())
            {
                K45DialogControl.ShowModalError("The vehicle layout failed to be loaded; it wasn't copied!", null);
                return;
            }
            WTSVehicleData.Instance.CityDescriptors[CurrentVehicleInfo.name] = data;
            ReloadVehicle();
        }
        private void ShowModalReport(ACEController.CacheOrder target, int[] cachedStarts = null, int currentPage = 0)
        {
            FormattedReportLine[] reference = Controller.LoadedConfiguration.GetLoadedReport(target);
            if (cachedStarts == null)
            {
                var itemStarts        = reference.Select((x, y) => Tuple.New(y, x)).Where(x => x.Second.Level == 0).Select(x => x.First).ToList();
                var startCacheBuilder = new List <int> {
                    0
                };
                for (int i = 0; i < itemStarts.Count - 1; i++)
                {
                    if (itemStarts[i + 1] - startCacheBuilder.Last() > m_itemsPerReportPage)
                    {
                        startCacheBuilder.Add(itemStarts[i]);
                    }
                }
                if (reference.Length - startCacheBuilder.Last() > m_itemsPerReportPage)
                {
                    startCacheBuilder.Add(itemStarts.Last());
                }
                cachedStarts = startCacheBuilder.ToArray();
            }

            int firstItem = cachedStarts[currentPage];
            int lastItem  = currentPage + 1 >= cachedStarts.Length ? reference.Length - 1 : cachedStarts[currentPage + 1] - 1;

            K45DialogControl.ShowModal(new K45DialogControl.BindProperties
            {
                title       = string.Format(Locale.Get("K45_ACE_REPORTTITLEFORMAT", target.ToString()), currentPage + 1, cachedStarts.Length),
                message     = lastItem < 0 ? Locale.Get("K45_ACE_NOITEMSLOADED") : string.Join("\n", reference.Where((x, y) => y >= firstItem && y <= lastItem).Select(x => x.ToString()).ToArray()),
                showClose   = true,
                showButton1 = currentPage > 0,
                textButton1 = "<<<\n" + Locale.Get("K45_CMNS_PREV"),
                showButton2 = true,
                textButton2 = Locale.Get("K45_CMNS_OK"),
                showButton3 = currentPage < cachedStarts.Length - 1,
                textButton3 = ">>>\n" + Locale.Get("K45_CMNS_NEXT")
            }, (x) =>
            {
                if (x == 1)
                {
                    ShowModalReport(target, cachedStarts, currentPage - 1);
                }
                if (x == 3)
                {
                    ShowModalReport(target, cachedStarts, currentPage + 1);
                }
                return(true);
            });
        }
        private void LoadIntoCurrentConfig(string loadedItem)
        {
            var data = XmlUtils.DefaultXmlDeserialize <LayoutDescriptorVehicleXml>(loadedItem);

            if (!data.IsValid())
            {
                if (CommonProperties.DebugMode)
                {
                    K45DialogControl.ShowModalError("The vehicle layout failed to be loaded! See data below.", loadedItem);
                }
                return;
            }
            WTSVehicleData.Instance.CityDescriptors[WTSVehicleLayoutEditor.Instance.CurrentVehicleInfo.name] = data;
            WTSVehicleLayoutEditor.Instance.ReloadVehicle();
        }
Ejemplo n.º 11
0
        private void OnDeleteFromCity() => K45DialogControl.ShowModal(new K45DialogControl.BindProperties
        {
            message     = Locale.Get("K45_WTS_PROMPTDELETEBUILDINGLAYOUT"),
            showButton1 = true,
            showButton2 = true,
            textButton1 = Locale.Get("YES"),
            textButton2 = Locale.Get("NO"),
        }, (x) =>
        {
            if (x == 1)
            {
                WTSVehicleData.Instance.CityDescriptors.Remove(CurrentVehicleInfo.name);
                ReloadVehicle();
            }

            return(true);
        });
Ejemplo n.º 12
0
        private void OnDeleteFromCity() => K45DialogControl.ShowModal(new K45DialogControl.BindProperties
        {
            message     = Locale.Get("K45_WTS_PROMPTDELETEHWSHIELDLAYOUT"),
            showButton1 = true,
            showButton2 = true,
            textButton1 = Locale.Get("YES"),
            textButton2 = Locale.Get("NO"),
        }, (x) =>
        {
            if (x == 1)
            {
                WTSHighwayShieldsData.Instance.CityDescriptors.Remove(CurrentSelection);
                ReloadShield();
            }

            return(true);
        });
Ejemplo n.º 13
0
        public override void LoadDefaults()
        {
            if (File.Exists(ElectricRoadsController.DEFAULT_CONFIG_FILE))
            {
                try
                {
                    if (Deserialize(typeof(ClassesData), File.ReadAllBytes(ElectricRoadsController.DEFAULT_CONFIG_FILE)) is ClassesData defaultData)
                    {
                        m_cachedDictDataSaved = defaultData.m_cachedDictDataSaved;
                        eventAllChanged?.Invoke();
                    }
                }
                catch (Exception e)
                {
                    LogUtils.DoErrorLog($"EXCEPTION WHILE LOADING: {e.GetType()} - {e.Message}\n {e.StackTrace}");

                    K45DialogControl.ShowModal(new K45DialogControl.BindProperties()
                    {
                        icon               = ElectricRoadsMod.Instance.IconName,
                        title              = Locale.Get("K45_ER_ERROR_LOADING_DEFAULTS_TITLE"),
                        message            = string.Format(Locale.Get("K45_ER_ERROR_LOADING_DEFAULTS_MESSAGE"), ElectricRoadsController.DEFAULT_CONFIG_FILE, e.GetType(), e.Message, e.StackTrace),
                        showButton1        = true,
                        textButton1        = Locale.Get("K45_ER_OK_BUTTON"),
                        showButton2        = true,
                        textButton2        = Locale.Get("K45_ER_OPEN_FOLDER_ON_EXPLORER_BUTTON"),
                        showButton3        = true,
                        textButton3        = Locale.Get("K45_ER_GO_TO_MOD_PAGE_BUTTON"),
                        useFullWindowWidth = true
                    }, (x) =>
                    {
                        if (x == 2)
                        {
                            ColossalFramework.Utils.OpenInFileBrowser(ElectricRoadsController.FOLDER_PATH);
                            return(false);
                        }
                        else if (x == 3)
                        {
                            ColossalFramework.Utils.OpenUrlThreaded("https://steamcommunity.com/sharedfiles/filedetails/?id=1689984220");
                            return(false);
                        }
                        return(true);
                    });
                }
            }
        }
Ejemplo n.º 14
0
        public void LoadAllShieldsConfigurations()
        {
            LogUtils.DoLog("LOADING HW SHIELDS CONFIG START -----------------------------");
            var errorList = new List <string>();

            Data.GlobalDescriptors.Clear();
            LogUtils.DoLog($"DefaultHwShieldsConfigurationFolder = {WTSController.DefaultHwShieldsConfigurationFolder}");
            foreach (string filename in Directory.GetFiles(WTSController.DefaultHwShieldsConfigurationFolder, "*.xml"))
            {
                try
                {
                    if (CommonProperties.DebugMode)
                    {
                        LogUtils.DoLog($"Trying deserialize {filename}:\n{File.ReadAllText(filename)}");
                    }
                    using (FileStream stream = File.OpenRead(filename))
                    {
                        LoadDescriptorsFromXmlCommon(stream);
                    }
                }
                catch (Exception e)
                {
                    LogUtils.DoWarnLog($"Error Loading file \"{filename}\" ({e.GetType()}): {e.Message}\n{e}");
                    errorList.Add($"Error Loading file \"{filename}\" ({e.GetType()}): {e.Message}");
                }
            }

            if (errorList.Count > 0)
            {
                K45DialogControl.ShowModal(new K45DialogControl.BindProperties
                {
                    title              = "WTS - Errors loading vehicle Files",
                    message            = string.Join("\r\n", errorList.ToArray()),
                    useFullWindowWidth = true,
                    showButton1        = true,
                    textButton1        = "Okay...",
                    showClose          = true
                }, (x) => true);
            }
            WriteTheSignsMod.Controller.HighwayShieldsAtlasLibrary.PurgeShields();
            LogUtils.DoLog("LOADING HW SHIELDS CONFIG END -----------------------------");
        }
        public static void PreInit(UIView view, UIDynamicPanels __instance)
        {
            int?ct = __instance.m_DynamicPanels?.Where(x =>
            {
                try
                {
                    return(x?.name == K45DialogControl.PANEL_ID && x.panelRoot?.gameObject != null && string.Compare(x.panelRoot?.stringUserData, K45DialogControl.VERSION) >= 0);
                }
                catch
                {
                    return(false);
                }
            }).Count();

            if (ct == 0)
            {
                var listDynPanel = __instance.m_DynamicPanels.Where(x => x?.name != K45DialogControl.PANEL_ID).ToList();
                listDynPanel.Insert(0, K45DialogControl.CreatePanelInfo(view));
                __instance.m_DynamicPanels = listDynPanel.ToArray();
            }
        }
        private void ShowNewConfigModal(string lastError) => K45DialogControl.ShowModalPromptText(
            new K45DialogControl.BindProperties
        {
            title       = Locale.Get("K45_ADR_EDITOR_CONFIGNEW_TITLE"),
            message     = (lastError.IsNullOrWhiteSpace() ? "" : $"{ Locale.Get("K45_ADR_EDITOR_CONFIGNEW_ANERROROCURRED")} {lastError}\n\n") + Locale.Get("K45_ADR_EDITOR_CONFIGNEW_MESSAGE"),
            showButton1 = true,
            textButton1 = Locale.Get("EXCEPTION_OK"),
            showButton2 = true,
            textButton2 = Locale.Get("CANCEL")
        }, (x, text) =>
        {
            if (x == 1)
            {
                string error = null;
                if (text.IsNullOrWhiteSpace())
                {
                    error = $"{ Locale.Get("K45_ADR_EDITOR_CONFIGNEW_INVALIDNAME")}";
                }
                else if (AdrHighwayParentLibDataXml.Instance.List().Contains(text))
                {
                    error = $"{ Locale.Get("K45_ADR_EDITOR_CONFIGNEW_ALREADY_EXISTS")}";
                }

                if (error.IsNullOrWhiteSpace())
                {
                    var newModel = new AdrHighwayParentXml
                    {
                        m_configurationSource = ConfigurationSource.CITY
                    };
                    AdrHighwayParentLibDataXml.Instance.Add(text, ref newModel);
                    m_configList.text = ExecuteItemChange(text, true);
                }
                else
                {
                    ShowNewConfigModal(error);
                }
            }
            return(true);
        }
            );
 private void OnDeleteConfig()
 {
     K45DialogControl.ShowModal(
         new K45DialogControl.BindProperties
     {
         title       = Locale.Get("K45_ADR_EDITOR_CONFIGDELETE_TITLE"),
         message     = string.Format(Locale.Get("K45_ADR_EDITOR_CONFIGDELETE_MESSAGE"), m_configList.text),
         showButton1 = true,
         textButton1 = Locale.Get("YES"),
         showButton2 = true,
         textButton2 = Locale.Get("NO"),
     }
         , (x) =>
     {
         if (x == 1)
         {
             AdrHighwayParentLibDataXml.Instance.Remove(m_configList.text);
             OnRefresh();
         }
         return(true);
     });;
 }
Ejemplo n.º 18
0
        public void LoadImagesFromLocalFolders()
        {
            LocalAtlases.Clear();
            var errors = new List <string>();
            var folders = new string[] { WTSController.ExtraSpritesFolder }.Concat(Directory.GetDirectories(WTSController.ExtraSpritesFolder));

            foreach (var dir in folders)
            {
                bool isRoot       = dir == WTSController.ExtraSpritesFolder;
                var  spritesToAdd = new List <SpriteInfo>();
                WTSAtlasLoadingUtils.LoadAllImagesFromFolderRef(dir, ref spritesToAdd, ref errors, isRoot);
                if (isRoot || spritesToAdd.Count > 0)
                {
                    var atlasName = isRoot ? string.Empty : Path.GetFileNameWithoutExtension(dir);
                    LocalAtlases[atlasName] = new UITextureAtlas
                    {
                        material = new Material(UIView.GetAView().defaultAtlas.material.shader)
                    };
                    if (isRoot)
                    {
                        spritesToAdd.AddRange(UIView.GetAView().defaultAtlas.sprites.Select(x => CloneSpriteInfo(x)).ToList());
                        TextureAtlasUtils.LoadImagesFromResources("commons.UI.Images", ref spritesToAdd);
                        TextureAtlasUtils.LoadImagesFromResources("UI.Images", ref spritesToAdd);
                    }
                    TextureAtlasUtils.RegenerateTextureAtlas(LocalAtlases[atlasName], spritesToAdd);
                }
            }
            LocalAtlasesCache.Clear();
            LocalRenderMaterial.Clear();
            if (errors.Count > 0)
            {
                K45DialogControl.ShowModal(new K45DialogControl.BindProperties
                {
                    message = $"{Locale.Get("K45_WTS_CUSTOMSPRITE_ERRORHEADER")}:\n\t{string.Join("\n\t", errors.ToArray())}"
                }, (x) => true);
            }
        }
Ejemplo n.º 19
0
 private void Help_VehicleModel() => K45DialogControl.ShowModalHelp("VehicleLayouts.General", Locale.Get("K45_WTS_VEHICLEEDITOR_HELPTITLE"), 0);
 private void Help_RuleFilter() => K45DialogControl.ShowModalHelp("Vehicle.TypeOfRule", Locale.Get("K45_ACE_VEHICLERULES_RULEFILTER"), 0);
 private void Help_ColorMode() => K45DialogControl.ShowModalHelp("Vehicle.ColoringMode", Locale.Get("K45_ACE_VEHICLERULES_COLORMODE"), 0);
Ejemplo n.º 22
0
 private void Help_RuleFilter() => K45DialogControl.ShowModalHelp("Building.TypeOfRule", Locale.Get("K45_ACE_BUILDINGRULES_RULEFILTER"), 0);
Ejemplo n.º 23
0
 private void Help_ColorMode() => K45DialogControl.ShowModalHelp("Building.ColoringMode", Locale.Get("K45_ACE_BUILDINGRULES_COLORMODE"), 0);
Ejemplo n.º 24
0
        protected override void AwakeActions()
        {
            CreateTopButton(MainPanel, "ExportAsDefault", "K45_ER_EXPORT_DEFAULT_BTN", CommonsSpriteNames.K45_Save.ToString(), new Vector2(10, 50), (x, y) => ClassesData.Instance.SaveAsDefault());
            CreateTopButton(MainPanel, "ImportDefault", "K45_ER_IMPORT_DEFAULT_BTN", CommonsSpriteNames.K45_Load.ToString(), new Vector2(95, 50), (x, y) => ClassesData.Instance.LoadDefaults());
            CreateTopButton(MainPanel, "SelectAll", "K45_ER_SELECT_ALL_BTN", "check-checked", new Vector2(180, 50), (x, y) => ClassesData.Instance.SelectAll());
            CreateTopButton(MainPanel, "SelectNone", "K45_ER_SELECT_NONE_BTN", "check-unchecked", new Vector2(265, 50), (x, y) => ClassesData.Instance.UnselectAll());
            CreateTopButton(MainPanel, "Reset", "K45_ER_RESET_BTN", CommonsSpriteNames.K45_Reload.ToString(), new Vector2(350, 50), (x, y) => ClassesData.Instance.SafeCleanAll(m_allClasses.Keys));

            KlyteMonoUtils.CreateScrollPanel(MainPanel, out UIScrollablePanel scrollPanel, out _, MainPanel.width - 25, MainPanel.height - 105, new Vector3(5, 100));
            scrollPanel.autoLayout          = true;
            scrollPanel.autoLayoutDirection = LayoutDirection.Vertical;
            scrollPanel.autoLayoutPadding   = new RectOffset(0, 0, 5, 5);
            scrollPanel.backgroundSprite    = "ScrollbarTrack";
            scrollPanel.scrollPadding       = new RectOffset(5, 5, 5, 5);

            m_allClasses = ((FastList <PrefabCollection <NetInfo> .PrefabData>) typeof(PrefabCollection <NetInfo>).GetField("m_scenePrefabs", RedirectorUtils.allFlags).GetValue(null))
                           .m_buffer
                           .Select(x => x.m_prefab)
                           .Where(x => x?.m_class != null && (x.m_class.m_layer == ItemClass.Layer.Default || x.m_class.m_layer == ItemClass.Layer.MetroTunnels || x.m_class.m_layer == ItemClass.Layer.WaterPipes || x.m_class.m_layer == ItemClass.Layer.WaterStructures))
                           .GroupBy(x => x.m_class.name)
                           .ToDictionary(x => x.First().m_class, x => x.ToList());

            foreach (KeyValuePair <ItemClass, List <NetInfo> > clazz in m_allClasses)
            {
                List <NetInfo> itemList  = clazz.Value;
                ItemClass      clazzKey  = clazz.Key;
                string         className = clazzKey.name;

                KlyteMonoUtils.CreateUIElement(out UIPanel row, scrollPanel.transform, $"{clazz.Key.name}", new Vector4(0, 0, scrollPanel.width, 20));
                row.autoLayout     = true;
                row.padding        = new RectOffset(5, 5, 0, 0);
                row.stringUserData = className;

                UICheckBox uiCheckbox = UIHelperExtension.AddCheckbox(row, $"{clazz.Key.name}", ClassesData.Instance.GetConductibility(clazzKey));
                uiCheckbox.name   = "ClassCheckbox";
                uiCheckbox.height = 20f;
                uiCheckbox.width  = 335f;
                uiCheckbox.label.processMarkup = true;
                uiCheckbox.label.textScale     = 0.8f;
                uiCheckbox.objectUserData      = clazzKey;
                uiCheckbox.eventCheckChanged  += SetItemClassValue;
                KlyteMonoUtils.LimitWidthAndBox(uiCheckbox.label, 325);
                ClassesData.Instance.eventOnValueChanged += (x, y) =>
                {
                    if (x == className && y is bool b)
                    {
                        SetNewValue(uiCheckbox, b);
                    }
                };
                ClassesData.Instance.eventAllChanged += () => SetNewValue(uiCheckbox, ClassesData.Instance.GetConductibility(clazzKey));

                KlyteMonoUtils.CreateUIElement(out UIButton help, row.transform, "?", new Vector4(0, 0, 20, 20));
                help.text             = "?";
                help.hoveredTextColor = Color.blue;
                KlyteMonoUtils.InitButtonFull(help, false, "OptionBase");

                help.eventClicked += (x, y) =>
                {
                    K45DialogControl.ShowModal(new K45DialogControl.BindProperties()
                    {
                        icon         = ElectricRoadsMod.Instance.IconName,
                        messageAlign = UIHorizontalAlignment.Left,
                        showButton1  = true,
                        showButton2  = true,
                        showButton3  = true,
                        showClose    = true,
                        textButton1  = Locale.Get("K45_ER_ACTIVATE_CLASS_BTN"),
                        textButton2  = Locale.Get("K45_ER_DEACTIVATE_CLASS_BTN"),
                        textButton3  = Locale.Get("K45_ER_RETURN_BTN"),
                        title        = string.Format(Locale.Get("K45_ER_TITLE_NET_LIST_WINDOW"), className),
                        message      = string.Format(Locale.Get(itemList.Count <= 20 ? "K45_ER_PATTERN_NET_LIST_FEW" : "K45_ER_PATTERN_NET_LIST_FULL"), string.Join("\n", itemList.Take(20).Select(x => $"\t- {x.GetLocalizedTitle()}").ToArray()), itemList.Count - 20)
                    }, (x) =>
                    {
                        if (x == 1)
                        {
                            uiCheckbox.isChecked = true;
                        }
                        else if (x == 2)
                        {
                            uiCheckbox.isChecked = false;
                        }
                        return(true);
                    });
                };
            }
            Quicksort(scrollPanel.components, new Comparison <UIComponent>(CompareNames), false);
        }
Ejemplo n.º 25
0
 private void Help_ColorMode() => K45DialogControl.ShowModalHelp("Prop.ColoringMode", Locale.Get("K45_ACE_PROPRULES_COLORMODE"), 0);
Ejemplo n.º 26
0
 private void Help_RuleFilter() => K45DialogControl.ShowModalHelp("Prop.TypeOfRule", Locale.Get("K45_ACE_PROPRULES_RULEFILTER"), 0);
 protected override void Help_RulesList() => K45DialogControl.ShowModalHelp("General.RuleList", Locale.Get("K45_ACE_VEHICLERULES_RULELISTTITLE"), 0, ACEBuildingRulesetLib.Instance.DefaultXmlFileBaseFullPath);
Ejemplo n.º 28
0
 private void Help_DistrictFilter() => K45DialogControl.ShowModalHelp("General.DistrictFilter", Locale.Get("K45_ACE_BASICTAB_DISTRICTFILTER"), 0);
Ejemplo n.º 29
0
        public void Awake()
        {
            MainContainer = GetComponent <UIPanel>();

            MainContainer.autoLayout          = true;
            MainContainer.autoLayoutDirection = LayoutDirection.Vertical;
            MainContainer.autoLayoutPadding   = new RectOffset(0, 0, 2, 2);
            m_uiHelperGlobal = new UIHelperExtension(MainContainer);

            CreateGroupFileSelect("K45_ADR_DISTRICT_GEN_PREFIX_FILE", OnChangeSelectedDistrictPrefix, ReloadDistrictPrefixesFiles, out m_districtPrefixGenFile);
            CreateGroupFileSelect("K45_ADR_DISTRICT_GEN_NAME_FILE", OnChangeSelectedDistrictName, ReloadDistrictNamesFiles, out m_districtNameGenFile);
            isLoading = true;

            AddIntField(Locale.Get("K45_ADR_DISTRICT_POSTAL_CODE"), out m_prefixPostalCodeCity, m_uiHelperGlobal, OnChangePostalCodePrefixCity, false);
            m_prefixPostalCodeCity.maxLength = 3;

            AddTextField(Locale.Get("K45_ADR_POSTAL_CODE_FORMAT_2"), out m_postalCodeFormat, m_uiHelperGlobal, OnChangePostalCodeFormat, AdrController.CurrentConfig.GlobalConfig.AddressingConfig.PostalCodeFormat);
            AddButtonInEditorRow(m_postalCodeFormat, CommonsSpriteNames.K45_QuestionMark, () => K45DialogControl.ShowModal(new K45DialogControl.BindProperties
            {
                showButton1 = true,
                textButton1 = Locale.Get("EXCEPTION_OK"),
                title       = Locale.Get("K45_ADR_POSTAL_CODE_FORMAT_LEGEND_TITLE"),
                message     = GetPostalCodeLegendText()
            }, (x) => true), null, true, 30);


            AddLabel(Locale.Get("K45_ADR_ADDRESS_LINES"), m_uiHelperGlobal, out _, out _);
            AddTextField(Locale.Get("K45_ADR_ADDRESS_LINE1"), out m_addressLine1Format, m_uiHelperGlobal, OnChangeAddressLine1, AdrController.CurrentConfig.GlobalConfig.AddressingConfig.AddressLine1);
            AddTextField(Locale.Get("K45_ADR_ADDRESS_LINE2"), out m_addressLine2Format, m_uiHelperGlobal, OnChangeAddressLine2, AdrController.CurrentConfig.GlobalConfig.AddressingConfig.AddressLine2);
            AddTextField(Locale.Get("K45_ADR_ADDRESS_LINE3"), out m_addressLine3Format, m_uiHelperGlobal, OnChangeAddressLine3, AdrController.CurrentConfig.GlobalConfig.AddressingConfig.AddressLine3);
            var commonPopupConfigHelpAddress = new K45DialogControl.BindProperties
            {
                showButton1 = true,
                textButton1 = Locale.Get("EXCEPTION_OK"),
                title       = Locale.Get("K45_ADR_ADDRESS_LINES_FORMAT_LEGEND_TITLE"),
                message     = GetAddressLegendText()
            };

            AddButtonInEditorRow(m_addressLine1Format, CommonsSpriteNames.K45_QuestionMark, () => K45DialogControl.ShowModal(commonPopupConfigHelpAddress, (x) => true), null, true, 30);
            AddButtonInEditorRow(m_addressLine2Format, CommonsSpriteNames.K45_QuestionMark, () => K45DialogControl.ShowModal(commonPopupConfigHelpAddress, (x) => true), null, true, 30);
            AddButtonInEditorRow(m_addressLine3Format, CommonsSpriteNames.K45_QuestionMark, () => K45DialogControl.ShowModal(commonPopupConfigHelpAddress, (x) => true), null, true, 30);

            m_uiHelperGlobal.AddSpace(15);

            var nameGenConfig = AdrController.CurrentConfig.GlobalConfig.BuildingConfig.StationsNameGenerationConfig;

            AdrStationNamesGenerationConfig getGenConfig() => AdrController.CurrentConfig.GlobalConfig.BuildingConfig.StationsNameGenerationConfig;
            AdrRicoNamesGenerationConfig getRicoGenConfig() => AdrController.CurrentConfig.GlobalConfig.BuildingConfig.RicoNamesGenerationConfig;

            KlyteMonoUtils.CreateUIElement(out UIPanel buildingTogglePanel, m_uiHelperGlobal.Self.transform);
            buildingTogglePanel.width                     = MainContainer.width;
            buildingTogglePanel.autoLayout                = true;
            buildingTogglePanel.autoLayoutPadding         = new RectOffset(2, 2, 2, 2);
            buildingTogglePanel.autoLayoutDirection       = LayoutDirection.Horizontal;
            buildingTogglePanel.autoFitChildrenVertically = true;
            buildingTogglePanel.wrapLayout                = true;

            var buildingTogglePanelHelper = new UIHelperExtension(buildingTogglePanel);

            void AddBuildingCheckbox(string icon, string locale, Action <bool> onChange, Func <bool> getCurrentVal) => AddIconCheckbox(icon, locale, out _, buildingTogglePanelHelper, (x) => { onChange(x); AdrFacade.TriggerBuildingNameStrategyChanged(); }, new Vector2(45, 30), getCurrentVal());

            AddLabel(Locale.Get("K45_ADR_BUILDING_PASSENGERS"), buildingTogglePanelHelper, out UILabel lbl, out _);
            lbl.padding.top    = 5;
            lbl.padding.bottom = 5;
            KlyteMonoUtils.LimitWidthAndBox(lbl, 200, out UIPanel panel);
            panel.maximumSize = new Vector2(210, 0);
            panel.minimumSize = new Vector2(210, 0);
            AddBuildingCheckbox("SubBarPublicTransportBus", "K45_ADR_AUTONAME_BUS_STATIONS", x => getGenConfig().Bus = x, () => getGenConfig().Bus);
            AddBuildingCheckbox("IconPolicyFreePublicTransport", "K45_ADR_AUTONAME_INTERCITYBUS_STATIONS", x => getGenConfig().IntercityBus = x, () => getGenConfig().IntercityBus);
            AddBuildingCheckbox("SubBarPublicTransportTrolleybus", "K45_ADR_AUTONAME_TROLLEYBUS_STATIONS", x => getGenConfig().Trolleybus   = x, () => getGenConfig().Trolleybus);
            AddBuildingCheckbox("SubBarPublicTransportTram", "K45_ADR_AUTONAME_TRAM_STATIONS", x => getGenConfig().Tram = x, () => getGenConfig().Tram);
            AddBuildingCheckbox("SubBarPublicTransportTrain", "K45_ADR_AUTONAME_TRAIN_STATIONS", x => getGenConfig().TrainsPassenger = x, () => getGenConfig().TrainsPassenger);
            AddBuildingCheckbox("SubBarPublicTransportMonorail", "K45_ADR_AUTONAME_MONORAIL_STATIONS", x => getGenConfig().Monorail  = x, () => getGenConfig().Monorail);
            AddBuildingCheckbox("SubBarPublicTransportMetro", "K45_ADR_AUTONAME_METRO_STATIONS", x => getGenConfig().Metro           = x, () => getGenConfig().Metro);
            AddBuildingCheckbox("SubBarPublicTransportCableCar", "K45_ADR_AUTONAME_CABLE_CAR_STATIONS", x => getGenConfig().CableCar = x, () => getGenConfig().CableCar);
            AddBuildingCheckbox("FeatureFerry", "K45_ADR_AUTONAME_FERRY_STATIONS", x => getGenConfig().Ferry = x, () => getGenConfig().Ferry);
            AddBuildingCheckbox("SubBarPublicTransportShip", "K45_ADR_AUTONAME_SHIP_STATIONS", x => getGenConfig().ShipPassenger       = x, () => getGenConfig().ShipPassenger);
            AddBuildingCheckbox("IconPolicyHelicopterPriority", "K45_ADR_AUTONAME_HELICOPTER_STATIONS", x => getGenConfig().Helicopter = x, () => getGenConfig().Helicopter);
            AddBuildingCheckbox("FeatureBlimp", "K45_ADR_AUTONAME_BLIMP_STATIONS", x => getGenConfig().Blimp = x, () => getGenConfig().Blimp);
            AddBuildingCheckbox("SubBarPublicTransportPlane", "K45_ADR_AUTONAME_AIRPLANE_STATIONS", x => getGenConfig().AirplanePassenger = x, () => getGenConfig().AirplanePassenger);

            buildingTogglePanelHelper.AddSpace(5);
            AddLabel(Locale.Get("K45_ADR_BUILDING_CARGO"), buildingTogglePanelHelper, out lbl, out _);
            lbl.padding.top    = 5;
            lbl.padding.bottom = 5;
            KlyteMonoUtils.LimitWidthAndBox(lbl, 260, out panel);
            panel.maximumSize = new Vector2(270, 0);
            panel.minimumSize = new Vector2(270, 0);
            AddBuildingCheckbox("SubBarPublicTransportShip", "K45_ADR_ENABLE_CUSTOM_NAMING_CARGO_SHIP", x => getGenConfig().ShipCargo          = x, () => getGenConfig().ShipCargo);
            AddBuildingCheckbox("SubBarPublicTransportTrain", "K45_ADR_ENABLE_CUSTOM_NAMING_CARGO_TRAIN", x => getGenConfig().TrainsCargo      = x, () => getGenConfig().TrainsCargo);
            AddBuildingCheckbox("SubBarPublicTransportPlane", "K45_ADR_ENABLE_CUSTOM_NAMING_CARGO_AIRPLANE", x => getGenConfig().AirplaneCargo = x, () => getGenConfig().AirplaneCargo);

            buildingTogglePanelHelper.AddSpace(5);
            AddLabel(Locale.Get("K45_ADR_BUILDING_USE_ADDRESS"), buildingTogglePanelHelper, out lbl, out _);
            lbl.padding.top    = 5;
            lbl.padding.bottom = 5;
            KlyteMonoUtils.LimitWidthAndBox(lbl, 260, out panel);
            panel.maximumSize = new Vector2(270, 0);
            panel.minimumSize = new Vector2(270, 0);
            AddBuildingCheckbox("SubBarDistrictSpecializationResidential", "K45_ADR_ENABLE_ADDRESS_NAMING_RES", x => getRicoGenConfig().Residence = x ? GenerationMethod.ADDRESS : GenerationMethod.NONE, () => getRicoGenConfig().Residence == GenerationMethod.ADDRESS);
            AddBuildingCheckbox("SubBarDistrictSpecializationIndustrial", "K45_ADR_ENABLE_ADDRESS_NAMING_IND", x => getRicoGenConfig().Industry   = x ? GenerationMethod.ADDRESS : GenerationMethod.NONE, () => getRicoGenConfig().Industry == GenerationMethod.ADDRESS);
            AddBuildingCheckbox("SubBarDistrictSpecializationCommercial", "K45_ADR_ENABLE_ADDRESS_NAMING_COM", x => getRicoGenConfig().Commerce   = x ? GenerationMethod.ADDRESS : GenerationMethod.NONE, () => getRicoGenConfig().Commerce == GenerationMethod.ADDRESS);
            AddBuildingCheckbox("SubBarDistrictSpecializationOffice", "K45_ADR_ENABLE_ADDRESS_NAMING_OFF", x => getRicoGenConfig().Office         = x ? GenerationMethod.ADDRESS : GenerationMethod.NONE, () => getRicoGenConfig().Office == GenerationMethod.ADDRESS);
            isLoading = false;
            ReloadDistrictPrefixesFiles();
            ReloadDistrictNamesFiles();
        }
Ejemplo n.º 30
0
        protected override void StartActions()
        {
            if (m_ghostMode)
            {
                for (ushort a = 1; a < BuildingManager.instance.m_buildings.m_buffer.Length; a++)
                {
                    if (BuildingManager.instance.m_buildings.m_buffer[a].Info.m_buildingAI is PrivateBuildingAI)
                    {
                        Vector3            position     = BuildingManager.instance.m_buildings.m_buffer[a].m_position;
                        int                num          = Mathf.Max((int)((position.x - 35f) / 64f + 135f), 0);
                        int                num2         = Mathf.Max((int)((position.z - 35f) / 64f + 135f), 0);
                        int                num3         = Mathf.Min((int)((position.x + 35f) / 64f + 135f), 269);
                        int                num4         = Mathf.Min((int)((position.z + 35f) / 64f + 135f), 269);
                        Array16 <Building> buildings    = Singleton <BuildingManager> .instance.m_buildings;
                        ushort[]           buildingGrid = Singleton <BuildingManager> .instance.m_buildingGrid;
                        for (int i = num2; i <= num4; i++)
                        {
                            for (int j = num; j <= num3; j++)
                            {
                                ushort num5 = buildingGrid[i * 270 + j];
                                int    num6 = 0;
                                while (num5 != 0)
                                {
                                    ushort         nextGridBuilding = buildings.m_buffer[num5].m_nextGridBuilding;
                                    Building.Flags flags            = buildings.m_buffer[num5].m_flags;
                                    if ((flags & (Building.Flags.Created | Building.Flags.Deleted | Building.Flags.Demolishing | Building.Flags.Collapsed)) == Building.Flags.Created)
                                    {
                                        BuildingInfo info = buildings.m_buffer[num5].Info;
                                        if (info != null && info.m_placementStyle == ItemClass.Placement.Automatic)
                                        {
                                            ItemClass.Zone zone          = info.m_class.GetZone();
                                            ItemClass.Zone secondaryZone = info.m_class.GetSecondaryZone();
                                            if (zone != ItemClass.Zone.None && VectorUtils.LengthSqrXZ(buildings.m_buffer[num5].m_position - position) <= 1225f)
                                            {
                                                buildings.m_buffer[num5].CheckZoning(zone, secondaryZone, true);
                                            }
                                        }
                                    }
                                    num5 = nextGridBuilding;
                                    if (++num6 >= 49152)
                                    {
                                        CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);

                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                for (ushort i = 1; i < ZoneManager.instance.m_blocks.m_buffer.Length; i++)
                {
                    bool changed = false;
                    for (int x = 0; x < 4; x++)
                    {
                        for (int z = 0; z < 8; z++)
                        {
                            changed = ZoneMixerOverrides.GetBlockZoneSanitize(ref ZoneManager.instance.m_blocks.m_buffer[i], x, z) | changed;
                        }
                    }
                    if (changed)
                    {
                        ZoneManager.instance.m_blocks.m_buffer[i].RefreshZoning(i);
                    }
                }

                K45DialogControl.ShowModal(new K45DialogControl.BindProperties()
                {
                    icon        = ZoneMixerMod.Instance.IconName,
                    title       = Locale.Get("K45_ZM_GHOST_MODE_MODAL_TITLE"),
                    message     = Locale.Get("K45_ZM_GHOST_MODE_MODAL_MESSAGE"),
                    showButton1 = true,
                    textButton1 = Locale.Get("K45_ZM_OK_BUTTON")
                }, (x) => true);
            }
        }