From 5eff30509852c16cd811496801b8e5dedf28cdc0 Mon Sep 17 00:00:00 2001 From: Dmytro Lytovchenko Date: Thu, 30 Apr 2020 17:55:26 +0200 Subject: [PATCH 1/2] Dragging/sizing main menu pushes it back into screen rect (#849) * Dragging main menu pushes the draghandle back into screen rect * Remove obsolete and commented code pieces * Overlay, GUI opacity and GUI scale sliders now update their tooltips on drag * DLS slider updateTooltip() --- TLM/TLM/State/ConfigData/Main.cs | 2 +- TLM/TLM/State/GlobalConfig.cs | 2 - .../State/OptionsTabs/OptionsGameplayTab.cs | 1 + .../State/OptionsTabs/OptionsGeneralTab.cs | 75 ++++++++++--------- TLM/TLM/U/UIUtil.cs | 40 ++++++++++ TLM/TLM/UI/MainMenu/MainMenuWindow.cs | 36 ++++----- TLM/TLM/UI/MainMenu/StatsLabel.cs | 6 -- .../UI/SubTools/LaneArrows/LaneArrowTool.cs | 2 - .../LaneArrows/LaneArrowToolWindow.cs | 1 - 9 files changed, 95 insertions(+), 70 deletions(-) diff --git a/TLM/TLM/State/ConfigData/Main.cs b/TLM/TLM/State/ConfigData/Main.cs index ea846d447..25227f0e7 100644 --- a/TLM/TLM/State/ConfigData/Main.cs +++ b/TLM/TLM/State/ConfigData/Main.cs @@ -32,7 +32,7 @@ public class Main { public bool EnableTutorial = true; /// Determines if the main menu shall be displayed in a tiny format. - [Obsolete("Do not use. Main Menu now scales based on screen size")] + [Obsolete("Do not use. TM:PE now has UI scale slider")] public bool TinyMainMenu = true; /// User interface transparency, unit: percents, range: 0..100. diff --git a/TLM/TLM/State/GlobalConfig.cs b/TLM/TLM/State/GlobalConfig.cs index fe2fbe404..4a104d9ed 100644 --- a/TLM/TLM/State/GlobalConfig.cs +++ b/TLM/TLM/State/GlobalConfig.cs @@ -98,8 +98,6 @@ private static GlobalConfig WriteDefaultConfig(GlobalConfig oldConfig, bool rese conf.Main.GuiOpacity = oldConfig.Main.GuiOpacity; conf.Main.OverlayTransparency = oldConfig.Main.OverlayTransparency; - // conf.Main.TinyMainMenu = oldConfig.Main.TinyMainMenu; - conf.Main.EnableTutorial = oldConfig.Main.EnableTutorial; conf.Main.DisplayedTutorialMessages = oldConfig.Main.DisplayedTutorialMessages; } diff --git a/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs b/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs index cfe61af5b..feb388076 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs @@ -167,6 +167,7 @@ private static void OnAltLaneSelectionRatioChanged(float newVal) { _altLaneSelectionRatioSlider.tooltip = Translation.Options.Get("Gameplay.Tooltip:DLS_percentage") + ": " + Options.altLaneSelectionRatio + " %"; + _altLaneSelectionRatioSlider.RefreshTooltip(); Log._Debug($"altLaneSelectionRatio changed to {Options.altLaneSelectionRatio}"); } diff --git a/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs b/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs index 8378017a7..52b08a76f 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs @@ -47,14 +47,14 @@ private static string T(string key) { internal static void MakeSettings_General(ExtUITabstrip tabStrip) { UIHelper panelHelper = tabStrip.AddTabPage(T("Tab:General")); - UIHelperBase generalGroup = panelHelper.AddGroup( - T("Tab:General")); + UIHelperBase generalGroup = panelHelper.AddGroup(T("Tab:General")); string[] languageLabels = new string[Translation.AvailableLanguageCodes.Count + 1]; languageLabels[0] = T("General.Dropdown.Option:Game language"); for (int i = 0; i < Translation.AvailableLanguageCodes.Count; ++i) { languageLabels[i + 1] = Translation.Options.Get( - Translation.AvailableLanguageCodes[i], "General.Dropdown.Option:Language Name"); + lang: Translation.AvailableLanguageCodes[i], + key: "General.Dropdown.Option:Language Name"); } int languageIndex = 0; @@ -70,18 +70,18 @@ internal static void MakeSettings_General(ExtUITabstrip tabStrip) { } _languageDropdown = generalGroup.AddDropdown( - T("General.Dropdown:Select language") + ":", - languageLabels, - languageIndex, - OnLanguageChanged) as UIDropDown; + text: T("General.Dropdown:Select language") + ":", + options: languageLabels, + defaultSelection: languageIndex, + eventCallback: OnLanguageChanged) as UIDropDown; _lockButtonToggle = generalGroup.AddCheckbox( - T("General.Checkbox:Lock main menu button position"), - GlobalConfig.Instance.Main.MainMenuButtonPosLocked, - OnLockButtonChanged) as UICheckBox; + text: T("General.Checkbox:Lock main menu button position"), + defaultValue: GlobalConfig.Instance.Main.MainMenuButtonPosLocked, + eventCallback: OnLockButtonChanged) as UICheckBox; _lockMenuToggle = generalGroup.AddCheckbox( - T("General.Checkbox:Lock main menu window position"), - GlobalConfig.Instance.Main.MainMenuPosLocked, - OnLockMenuChanged) as UICheckBox; + text: T("General.Checkbox:Lock main menu window position"), + defaultValue: GlobalConfig.Instance.Main.MainMenuPosLocked, + eventCallback: OnLockMenuChanged) as UICheckBox; _guiScaleSlider = generalGroup.AddSlider( text: T("General.Slider:GUI scale") + ":", @@ -124,9 +124,9 @@ internal static void MakeSettings_General(ExtUITabstrip tabStrip) { GlobalConfig.Instance.Main.ScanForKnownIncompatibleModsAtStartup, OnScanForKnownIncompatibleModsChanged) as UICheckBox; _ignoreDisabledModsToggle = generalGroup.AddCheckbox( - Translation.ModConflicts.Get("Checkbox:Ignore disabled mods"), - GlobalConfig.Instance.Main.IgnoreDisabledMods, - OnIgnoreDisabledModsChanged) as UICheckBox; + text: Translation.ModConflicts.Get("Checkbox:Ignore disabled mods"), + defaultValue: GlobalConfig.Instance.Main.IgnoreDisabledMods, + eventCallback: OnIgnoreDisabledModsChanged) as UICheckBox; Options.Indent(_ignoreDisabledModsToggle); // General: Speed Limits @@ -135,28 +135,28 @@ internal static void MakeSettings_General(ExtUITabstrip tabStrip) { // General: Simulation UIHelperBase simGroup = panelHelper.AddGroup(T("General.Group:Simulation")); _simulationAccuracyDropdown = simGroup.AddDropdown( - T("General.Dropdown:Simulation accuracy") + ":", - new[] { - T("General.Dropdown.Option:Very low"), - T("General.Dropdown.Option:Low"), - T("General.Dropdown.Option:Medium"), - T("General.Dropdown.Option:High"), - T("General.Dropdown.Option:Very high") - }, - (int)Options.simulationAccuracy, - OnSimulationAccuracyChanged) as UIDropDown; + text: T("General.Dropdown:Simulation accuracy") + ":", + options: new[] { + T("General.Dropdown.Option:Very low"), + T("General.Dropdown.Option:Low"), + T("General.Dropdown.Option:Medium"), + T("General.Dropdown.Option:High"), + T("General.Dropdown.Option:Very high"), + }, + defaultSelection: (int)Options.simulationAccuracy, + eventCallback: OnSimulationAccuracyChanged) as UIDropDown; _instantEffectsToggle = simGroup.AddCheckbox( - T("General.Checkbox:Apply AI changes right away"), - Options.instantEffects, - OnInstantEffectsChanged) as UICheckBox; + text: T("General.Checkbox:Apply AI changes right away"), + defaultValue: Options.instantEffects, + eventCallback: OnInstantEffectsChanged) as UICheckBox; } private static void SetupSpeedLimitsPanel(UIHelperBase generalGroup) { _displayMphToggle = generalGroup.AddCheckbox( - Translation.SpeedLimits.Get("Checkbox:Display speed limits mph"), - GlobalConfig.Instance.Main.DisplaySpeedLimitsMph, - OnDisplayMphChanged) as UICheckBox; + text: Translation.SpeedLimits.Get("Checkbox:Display speed limits mph"), + defaultValue: GlobalConfig.Instance.Main.DisplaySpeedLimitsMph, + eventCallback: OnDisplayMphChanged) as UICheckBox; string[] mphThemeOptions = { Translation.SpeedLimits.Get("General.Theme.Option:Square US"), Translation.SpeedLimits.Get("General.Theme.Option:Round UK"), @@ -165,10 +165,10 @@ private static void SetupSpeedLimitsPanel(UIHelperBase generalGroup) { _roadSignMphStyleInt = (int)GlobalConfig.Instance.Main.MphRoadSignStyle; _roadSignsMphThemeDropdown = generalGroup.AddDropdown( - Translation.SpeedLimits.Get("General.Dropdown:Road signs theme mph") + ":", - mphThemeOptions, - _roadSignMphStyleInt, - OnRoadSignsMphThemeChanged) as UIDropDown; + text: Translation.SpeedLimits.Get("General.Dropdown:Road signs theme mph") + ":", + options: mphThemeOptions, + defaultSelection: _roadSignMphStyleInt, + eventCallback: OnRoadSignsMphThemeChanged) as UIDropDown; _roadSignsMphThemeDropdown.width = 400; } @@ -245,6 +245,7 @@ private static void OnGuiOpacityChanged(float newVal) { = string.Format( T("General.Tooltip.Format:Window transparency: {0}%"), GlobalConfig.Instance.Main.GuiOpacity); + _guiOpacitySlider.RefreshTooltip(); GlobalConfig.WriteConfig(); Log._Debug($"GuiTransparency changed to {GlobalConfig.Instance.Main.GuiOpacity}"); @@ -256,6 +257,7 @@ private static void OnGuiScaleChanged(float newVal) { = string.Format( T("General.Tooltip.Format:GUI scale: {0}%"), GlobalConfig.Instance.Main.GuiScale); + _guiScaleSlider.RefreshTooltip(); GlobalConfig.WriteConfig(); Log._Debug($"GuiScale changed to {GlobalConfig.Instance.Main.GuiScale}"); @@ -271,6 +273,7 @@ private static void OnOverlayTransparencyChanged(float newVal) { T("General.Tooltip.Format:Overlay transparency: {0}%"), GlobalConfig.Instance.Main.OverlayTransparency); GlobalConfig.WriteConfig(); + _overlayTransparencySlider.RefreshTooltip(); Log._Debug($"Overlay transparency changed to {GlobalConfig.Instance.Main.OverlayTransparency}"); } diff --git a/TLM/TLM/U/UIUtil.cs b/TLM/TLM/U/UIUtil.cs index 42acb0fc1..52d21c294 100644 --- a/TLM/TLM/U/UIUtil.cs +++ b/TLM/TLM/U/UIUtil.cs @@ -1,6 +1,8 @@ namespace TrafficManager.U { using System.Collections.Generic; using System.Linq; + using ColossalFramework.UI; + using CSUtil.Commons; using UnityEngine; /// @@ -26,5 +28,43 @@ IEnumerable objects toMakeUnique.name = name; } + + /// + /// Checks and if it is anywhere outside the screen, brings + /// it back into the screen, the is moved by that delta instead. + /// This is to be called after the resize, and also after the move. + /// + /// Parent to be moved. + /// Object to be clamped to screen. + /// True if the position changed. + public static bool ClampToScreen(UIComponent window, UIComponent alwaysVisible) { + Rect origRect = new Rect( + position: alwaysVisible.absolutePosition, + size: alwaysVisible.size); + + Rect clampedRect = new Rect(origRect); + + VectorUtil.ClampRectToScreen( + rect: ref clampedRect, + resolution: new Vector2(UIScaler.GUI_WIDTH, UIScaler.GUI_HEIGHT)); + + float xMotion = clampedRect.x - origRect.x; + float yMotion = clampedRect.y - origRect.y; + + // Nothing to do, return here + if (Mathf.Approximately(xMotion, 0f) && Mathf.Approximately(yMotion, 0f)) { + return false; + } + + // Move the parent window by the difference + Vector3 pos = window.absolutePosition; + pos += new Vector3(xMotion, yMotion, 0f); + window.absolutePosition = pos; + + Log._Debug( + $"Clamping origRect={origRect} to new={clampedRect} " + + $"moving by {xMotion};{yMotion} newpos={pos}"); + return true; + } } } \ No newline at end of file diff --git a/TLM/TLM/UI/MainMenu/MainMenuWindow.cs b/TLM/TLM/UI/MainMenu/MainMenuWindow.cs index a42df82e3..642783cb8 100644 --- a/TLM/TLM/UI/MainMenu/MainMenuWindow.cs +++ b/TLM/TLM/UI/MainMenu/MainMenuWindow.cs @@ -22,6 +22,7 @@ public class MainMenuWindow { public const int DEFAULT_MENU_X = 85; public const int DEFAULT_MENU_Y = 60; + public const string WINDOW_CONTROL_NAME = "TMPE_MainMenu_Window"; /// /// Panel floating below the main menu and shows keybinds and mouse shortcuts. @@ -130,7 +131,9 @@ private static readonly MenuButtonDef[] EXTRA_BUTTON_DEFS public override void Start() { base.Start(); - U.UIUtil.MakeUniqueAndSetName(this.gameObject, "TMPE_MainMenuWindow"); + U.UIUtil.MakeUniqueAndSetName( + toMakeUnique: this.gameObject, + name: WINDOW_CONTROL_NAME); GlobalConfig conf = GlobalConfig.Instance; @@ -166,7 +169,7 @@ internal static MainMenuWindow CreateMainMenuWindow() { /// Called from constructor to setup own properties and events. private void SetupWindow() { - this.name = "TMPE_MainMenu_Window"; + this.name = WINDOW_CONTROL_NAME; this.isVisible = false; this.backgroundSprite = "GenericPanel"; this.color = new Color32(64, 64, 64, 240); @@ -341,9 +344,6 @@ private void OnToggleOsdButtonClicked(U.Button.UButton button) { // Refer to the TrafficManager tool asking it to request help from the current tool ModUI.GetTrafficManagerTool().RequestOnscreenDisplayUpdate(); - - // The task is delayed till next GUI update frame. - // ModUI.GetTrafficManagerTool().InvalidateOnscreenDisplayFlag = true; } private void SetupControls_DebugLabels(UiBuilder builder, @@ -456,11 +456,11 @@ public override void OnBeforeResizerUpdate() { /// Called by UResizer for every control to be 'resized'. public override void OnAfterResizerUpdate() { if (this.DragHandle != null) { - // Resize to the window width but remember there's padding on the left - // this.DragHandle.size = new Vector2(x: this.width - (UConst.UIPADDING * 2f), - // y: this.VersionLabel.height); - this.DragHandle.size = this.VersionLabel.size; + + // Push the window back into screen if the label/draghandle are partially offscreen + U.UIUtil.ClampToScreen(window: this, + alwaysVisible: this.VersionLabel); } } @@ -574,24 +574,16 @@ public void OnUpdate(GlobalConfig config) { UpdatePosition(new Vector2(config.Main.MainMenuX, config.Main.MainMenuY)); lastUpdatePositionFrame_ = nowFrame; } - - // if (isStarted_) { - // this.Invalidate(); - // } } /// Always invalidates the main menu, do not call too often! /// Config main menu position. public void UpdatePosition(Vector2 pos) { - Rect rect = new Rect( - pos.x, - pos.y, - ModUI.Instance.MainMenu.width, - this.height); - Vector2 resolution = UIView.GetAView().GetScreenResolution(); - VectorUtil.ClampRectToScreen(ref rect, resolution); - Log.Info($"Setting main menu position to [{pos.x},{pos.y}]"); - absolutePosition = rect.position; + this.absolutePosition = new Vector2(pos.x, pos.y); + if (U.UIUtil.ClampToScreen(window: this, alwaysVisible: this.VersionLabel)) { + Log.Info($"Moving main menu pos={this.absolutePosition}"); + } + Invalidate(); } diff --git a/TLM/TLM/UI/MainMenu/StatsLabel.cs b/TLM/TLM/UI/MainMenu/StatsLabel.cs index 97bcc0adc..d27828594 100644 --- a/TLM/TLM/UI/MainMenu/StatsLabel.cs +++ b/TLM/TLM/UI/MainMenu/StatsLabel.cs @@ -7,15 +7,9 @@ public class StatsLabel : U.Label.ULabel { public override void Start() { base.Start(); - // size = new Vector2( - // ModUI.Instance.MainMenu.width / 2f, - // MainMenuWindow.ScaledSize.GetTitlebarHeight()); this.text = "0"; this.suffix = " pathfinds"; this.textColor = Color.green; - // relativePosition = new Vector3(5f, -20f); - // textAlignment = UIHorizontalAlignment.Left; - // anchor = UIAnchorStyle.Top | UIAnchorStyle.Left; } #if QUEUEDSTATS diff --git a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs index ac14ec367..bf392572b 100644 --- a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs +++ b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs @@ -194,7 +194,6 @@ private void CreateLaneArrowsWindow(int numLanes) { ToolWindow.SetupControls(builder, numLanes); // Resize everything correctly - // builder.Control.SetTransparency(GlobalConfig.Instance.Main.GuiTransparency); builder.Done(); RepositionWindowToNode(); // reposition again 2nd time now that size is known } @@ -324,7 +323,6 @@ public override void OnToolLeftClick() { case State.EditLaneArrows: if (HoveredSegmentId != 0) { // Allow selecting other segments while doing lane editing - // fsm_.SendTrigger(Trigger.ReenterSameState); OnToolLeftClick_Select(); } break; diff --git a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowToolWindow.cs b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowToolWindow.cs index bf56186b5..43a4d93d9 100644 --- a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowToolWindow.cs +++ b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowToolWindow.cs @@ -90,7 +90,6 @@ public void SetupControls(UiBuilder builder, int numLanes) using (var buttonRowBuilder = builder.ChildPanel( setupFn: p => { p.name = "TMPE_ButtonRow"; })) { - // buttonRowBuilder.SetPadding(Constants.U_UI_PADDING); buttonRowBuilder.ResizeFunction( r => { r.Stack(mode: UStackMode.Below, From 27d8aea85c05118d2f2aad08e9506d458b8a533e Mon Sep 17 00:00:00 2001 From: Dmytro Lytovchenko Date: Thu, 7 May 2020 04:53:51 +0200 Subject: [PATCH 2/2] Onscreen Hints for more tools (#868) * Hint for Junction Restrictions; for Manual Traffic Lights * Onscreen hints for JR, ManualTL, PrioritySigns, ToggleTL, Parking and VehicleRestrictions * Click actions for priority signs tool * Priority signs click onscreen hints * Review notes + New strings * Despawning button active state inverted: On when easy mode; Minor fixes; Translations * LaneConn right click tooltip changes between select source and select target * New translated strings --- TLM/TLM/Resources/Translations/Guide.csv | 4 +- .../Translations/JunctionRestrictions.csv | 9 ++ .../Resources/Translations/LaneRouting.csv | 25 +++-- TLM/TLM/Resources/Translations/Menu.csv | 28 ++--- TLM/TLM/Resources/Translations/Options.csv | 39 ++++--- .../Translations/ParkingRestrictions.csv | 6 + .../Resources/Translations/PrioritySigns.csv | 15 +++ .../Resources/Translations/SpeedLimits.csv | 4 +- .../Resources/Translations/TrafficLights.csv | 12 ++ .../Translations/VehicleRestrictions.csv | 9 ++ TLM/TLM/State/Keybinds/KeybindSettingsBase.cs | 6 +- TLM/TLM/State/Keybinds/KeybindSettingsPage.cs | 2 +- .../State/OptionsTabs/OptionsGameplayTab.cs | 6 +- .../State/OptionsTabs/OptionsGeneralTab.cs | 4 +- TLM/TLM/U/Button/BaseUButton.cs | 12 +- TLM/TLM/U/UIUtil.cs | 5 +- TLM/TLM/UI/LegacySubTool.cs | 3 +- TLM/TLM/UI/Localization/LookupTable.cs | 2 - TLM/TLM/UI/MainMenu/BaseMenuButton.cs | 6 +- TLM/TLM/UI/MainMenu/BaseMenuToolModeButton.cs | 3 +- TLM/TLM/UI/MainMenu/ClearTrafficButton.cs | 3 +- TLM/TLM/UI/MainMenu/DespawnButton.cs | 15 ++- TLM/TLM/UI/MainMenu/MainMenuWindow.cs | 7 +- TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs | 16 ++- .../UI/MainMenu/ParkingRestrictionsButton.cs | 4 +- TLM/TLM/UI/MainMenu/PrioritySignsButton.cs | 4 +- .../UI/MainMenu/TimedTrafficLightsButton.cs | 4 +- .../UI/SubTools/JunctionRestrictionsTool.cs | 64 ++++++++--- .../UI/SubTools/LaneArrows/LaneArrowTool.cs | 8 +- TLM/TLM/UI/SubTools/LaneConnectorTool.cs | 44 ++++---- .../UI/SubTools/ManualTrafficLightsTool.cs | 105 +++++++++++------- .../UI/SubTools/ParkingRestrictionsTool.cs | 28 ++++- .../PrioritySigns/PrioritySignsTool.cs | 69 +++++++++--- .../SubTools/SpeedLimits/SpeedLimitsTool.cs | 21 ++-- .../TimedTrafficLightsTool.cs | 24 +++- .../UI/SubTools/ToggleTrafficLightsTool.cs | 20 +++- .../UI/SubTools/VehicleRestrictionsTool.cs | 32 +++++- 37 files changed, 463 insertions(+), 205 deletions(-) diff --git a/TLM/TLM/Resources/Translations/Guide.csv b/TLM/TLM/Resources/Translations/Guide.csv index d7f8f3177..c510970bb 100644 --- a/TLM/TLM/Resources/Translations/Guide.csv +++ b/TLM/TLM/Resources/Translations/Guide.csv @@ -5,5 +5,5 @@ "TMPE_GUIDE_BODY_LaneArrowTool_Disabled due to lane connections","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du Spuren von Hand verbunden hast.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","El modificador de flechas de la carretera fue desactivado porque has creado las conexiones manualmente.","Le modificateur des directions de voies est désactivé pour cette voie car vous avez manuellement créé des connexions de voies.","Ennek a sávnak a sáv nyílváltója le van tiltva, mert kézzel hozta létre a sávcsatlakozásokat.","La modifica delle frecce direzionali per questa corsia è disabilitata perché hai creato la connessione della corsia manualmente.","手動で車線接続を作成したため、この車線の矢印の変更は無効になっています","수동으로 차선 연결을 생성했기 때문에 이 차선의 차선 화살표 변경은 비활성화되어 있습니다.","Voor deze rijstrook kan de rijstrookpijl niet aangepast worden, omdat je handmatig rijstrookverbindingen hebt gemaakt.","Zmiana strzałek pasów ruchu jest niedostępna, ponieważ pasy ruchu zostały połączone ręcznie.","O trocador de seta de pista esta desabilitado para essa pista porque você criou uma conexão de pista manualmente.","Изменение стрелок для этого перекрёстка отключено, потому что вы создали соединение полос движения вручную.","因為您已手動建立車道連接,無法在此車道上使用「變更車行方向」功能","由于此车道创建了车道连接, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","Şerit bağlantılarını el ile yaptığınızdan dolayı bu şerit için şerit oku değiştiricisi devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на цьому перехресті наявні вручну з'єднані смуги руху","Nelze změnit jízdní pruhy na silnici kde je ručně nastaven směr jízdy","","" "TMPE_GUIDE_HEAD_TimedTrafficLightsTool_Auto TL no need","Zeitgesteuerte Ampel","Timed traffic light","","Outil de feux de circulation chronométrés. Pas besoins car feu de circulation automatique","Időzített jelzőlámpa","Semaforo temporizzato","時限式信号機","신호등 시간표","Getimed verkeerslicht","Czasowa sygnalizacja świetlna","Semáforo cronometrado","Нет потребности в светофоре на этом перекрёстке","TL 腳本","红绿灯定时设置","TL Script","","Немає потреби в такому світлофорі","Časované semafory","","" "TMPE_GUIDE_BODY_TimedTrafficLightsTool_Auto TL no need","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt","Quick-setup is not supported for this junction setup","","Création automatique de feux inutile","Nem lehetséges ennél a kereszteződésnél","La configurazione rapida non è supportata","クイックセットアップはサポートされていません","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Auto TL niet nodig","wybrane skrzyżowanie go nie potrzebuje lub konfiguracja skrzyżowania nie jest obsługiwana","Não é necessária a criação de semáforos","нет потребности в светофоре на этом перекрёстке","不需自動化號誌","不支持使用<快速设置>","Quick-setup is not supported","Hızlı kurulum desteklenmiyor","немає потреби в такому світлофорі на цьому перехресті","Rychlé nastavení nelze použít na danou křižovatku","","" -"TMPE_GUIDE_HEAD_LaneConnectorTool:stay-in-lane is not supported for this setup","Schnelle Einrichtung von Fahrspurverbindungen","Stay in lane","","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","Sávösszekötő eszköz","Configurazione rapida dei collegamenti di corsia","車線変更不可","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup van rijstrookverbindingen","Szybkie dopasowanie pasów ruchu","Configuração automática de conectores de faixas","Быстрая настройка полос не поддерживается","","","Stay in lane","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується","Zůstat v pruhu","","" -"TMPE_GUIDE_BODY_LaneConnectorTool:stay-in-lane is not supported for this setup","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt. Beachte, dass für eine T-Kreuzung die Arithmetik funktionieren sollte","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","A sávösszekötő eszköz nem használható ebben az útkereszteződésben","La configurazione rapida non è supportata per le impostazioni di questo incrocio. Si noti che per un incrocio a T l'aritmetica dovrebbe funzionare.","この設定では車線維持はサポートされていません。 各方向に1レーン以上あることを確認してください。 ステイインレーンは、交差しないようにレーンを接続します。","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup wordt niet ondersteund voor deze knooppunt-setup","Szybkie dopasowanie pasów ruchu nie jest dostępne dla tego układu skrzyżowania","Não há suporte para a configuração automática nessa junção. Observe que para uma intersecção em T, a ""aritmética de faixas"" deve funcionar.","Быстрая настройка полос не поддерживается для данной формы перекрёстка","","","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується для цієї комбінації доріг на даному перехресті","Zůstat v pruhu není pro toto nastavení dostupné. Ujistěte se že máte alespoň 1 jízdní pruh pro každý směr . Zůstaň v pruhu lze aplikovat pouze na silnici které se nekříží.","","" +"TMPE_GUIDE_HEAD_LaneConnectorTool:stay-in-lane is not supported for this setup","Schnelle Einrichtung von Fahrspurverbindungen","Stay in lane","","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","Sávösszekötő eszköz","Configurazione rapida dei collegamenti di corsia","車線変更不可","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup van rijstrookverbindingen","Szybkie dopasowanie pasów ruchu","Configuração automática de conectores de faixas","Быстрая настройка полос не поддерживается","此設定不支援禁止變換車道","","Stay in lane","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується","Zůstat v pruhu","","" +"TMPE_GUIDE_BODY_LaneConnectorTool:stay-in-lane is not supported for this setup","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt. Beachte, dass für eine T-Kreuzung die Arithmetik funktionieren sollte","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","A sávösszekötő eszköz nem használható ebben az útkereszteződésben","La configurazione rapida non è supportata per le impostazioni di questo incrocio. Si noti che per un incrocio a T l'aritmetica dovrebbe funzionare.","この設定では車線維持はサポートされていません。 各方向に1レーン以上あることを確認してください。 ステイインレーンは、交差しないようにレーンを接続します。","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup wordt niet ondersteund voor deze knooppunt-setup","Szybkie dopasowanie pasów ruchu nie jest dostępne dla tego układu skrzyżowania","Não há suporte para a configuração automática nessa junção. Observe que para uma intersecção em T, a ""aritmética de faixas"" deve funcionar.","Быстрая настройка полос не поддерживается для данной формы перекрёстка","此設定不支援禁止變換車道","","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується для цієї комбінації доріг на даному перехресті","Zůstat v pruhu není pro toto nastavení dostupné. Ujistěte se že máte alespoň 1 jízdní pruh pro každý směr . Zůstaň v pruhu lze aplikovat pouze na silnici které se nekříží.","","" diff --git a/TLM/TLM/Resources/Translations/JunctionRestrictions.csv b/TLM/TLM/Resources/Translations/JunctionRestrictions.csv index 14b3d3d6a..015ad7bca 100644 --- a/TLM/TLM/Resources/Translations/JunctionRestrictions.csv +++ b/TLM/TLM/Resources/Translations/JunctionRestrictions.csv @@ -1 +1,10 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th" +"JR.OnscreenHint.Mode:Select","Auswählen","Choose a junction to edit","","RJ. Conseil à l'écran. Mode : Sélectionnez +S'affiche lorsque l'outil Restrictions de jonction est activé, demandant à l'utilisateur de sélectionner le nœud à modifier +Fichier : TM: PE - Outil - Restrictions de jonction","","","","","Selecteer","Wybierz skrzyżowanie aby edytować","","Выберите перекрёсток или узел для настройки","","","Choose a junction to edit","","Оберіть перехрестя або вузол шляху","Zvolte si uzel k editaci","","" +"JR.OnscreenHint.Reset:Reset to default","Auf Standard zurücksetzen","Revert to default","","RJ.Conseil à l'écran. Réinitialisation: Réinitialisation par défaut +S'affiche lorsque l'outil Restrictions de jonction est en mode édition, suggérant que l'utilisateur peut supprimer les paramètres et rétablir les valeurs par défaut +Fichier : TM: PE - Outil - Restrictions de jonction","","","","","Zet terug naar standaard","Przywróć domyślne ustawienia","","Сбросить по умолчанию","","","Revert to default","","Скинути як було до змін","Můžete smazat nastavení a obnovit tak výchozí hodnoty","","" +"JR.OnscreenHint.Mode:Edit","","Click icons to toggle","","RJ.Conseil à l'écran. Mode : Modifier +Description du mode d'édition à l'écran pour l'outil de Restriction de Jonction : Cliquez sur les icônes pour basculer l'interdiction. Celui-ci devient cerclé et barré en rouge et à l'inverse, il redevient cerclé en vert en re-cliquant dessus. +Fichier: TM: PE - Outil - Restrictions de jonction","","","","","Bewerk","Kliknij wybraną ikonę aby przełączać ustawienie","","Нажимайте на значки ограничений","","","Click icons to toggle","","Натискайте знаки для зміни обмежень перехрестя","Klikněte na ikonu pro přepnutí","","" diff --git a/TLM/TLM/Resources/Translations/LaneRouting.csv b/TLM/TLM/Resources/Translations/LaneRouting.csv index a178d4033..06e321450 100644 --- a/TLM/TLM/Resources/Translations/LaneRouting.csv +++ b/TLM/TLM/Resources/Translations/LaneRouting.csv @@ -3,17 +3,24 @@ "Dialog.Text:Disabled due to manual connection","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du Spuren von Hand verbunden hast.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","El modificador de flechas de la carretera fue desactivado porque has creado las conexiones manualmente.","Le modificateur des directions de voies est désactivé pour cette voie car vous avez manuellement créé des connexions de voies.","Ennek a sávnak a sáv nyílváltója le van tiltva, mert kézzel hozta létre a sávcsatlakozásokat.","La modifica delle frecce direzionali per questa corsia è disabilitata perché hai creato la connessione della corsia manualmente.","手動で車線接続を作成したため、この車線の矢印の変更は無効になっています","차선 연결로 이미 수정된 교차로이므로 차선변경을 할 수 없습니다.","Voor deze rijstrook kan de rijstrookpijl niet aangepast worden, omdat je handmatig rijstrookverbindingen hebt gemaakt.","Zmiana strzałek pasów ruchu jest niedostępna, ponieważ pasy ruchu zostały połączone ręcznie.","O trocador de seta de pista esta desabilitado para essa pista porque você criou uma conexão de pista manualmente.","Изменение стрелок для этого перекрёстка отключено, потому что вы создали соединение полос движения вручную.","因為您已手動建立車道連接,無法在此車道上使用「變更車行方向」功能","由于此车道创建了车道连接, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","Şerit bağlantılarını el ile yaptığınızdan dolayı bu şerit için şerit oku değiştiricisi devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на цьому перехресті наявні вручну з'єднані смуги руху","Zakázáno z důvodu použití ručního přiřazení pruhu","","" "Dialog.Text:Disabled due to highway rules","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du die speziellen Regeln für Autobahnen aktiviert hast.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","El editor de flechas está desactivado debido a que has activado el control de autopistas.","Le modificateur de directions pour cette voie est désactivé car vous avez activé le système de règles pour autoroutes.","Ennek a sávnak a sáv nyílváltója le van tiltva, mert aktiválta az autópálya-szabályrendszert.","La modifica delle frecce direzionali per questa corsia è disabilitata perché è attivo il sistema di regole autostradali predefinito. Puoi disabilitarlo nelle opzioni alla voce ""Abilita regolazione specifica per le corsie autostradali"".","高速道路ルールシステムを適用しているため、この車線の矢印は変更できません","고속도로 시스템 규칙으로 인해 이 도로 화살표는 변경 할 수 없습니다(발전된 차량 AI기능 참고)","Het is niet mogelijk de voorrangspijlen op deze rijstroom te veranderen, omdat je de speciale regels voor snelwegen geactiveerd hebt.","Zmiana strzałek pasów została wyłączona dla tego pasa ponieważ aktywowałeś/łaś Zmienione zasady łączenia pasów dla Autostrad","O trocador de seta de pista esta desabilitado porque você ativou o sistema de regras para rodovia.","Изменение стрелок для этого перекрёстка отключено, потому что включены особые правила для шоссейных дорог","「變更車行方向」功能已關閉,因為您已開啟「高速公路規則」","由于开启了高速公路特定规则, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","Otoban kuralı dizgesini etkinleştirdiğiniz için şerit oku değiştiricisi bu şerit için devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на мапі включені особливі правила руху по смугах на шосе","Zakázáno z důvodu pravidel dálnice","","" "Button:Reset","Zurücksetzen","Reset","","Réinitialiser","Visszaállítás","Ripristina","","초기화","Herstellen","Resetuj","Resetar","Сброс","重設","重置","Reset","Geri yükle","Скинути","Reset","","" -"LaneConnector.Label:Reset to default","Zurücksetzen zu Standard","Reset to default","","Réinitialiser","Eredeti visszaállítása","","","","Herstellen naar standaard","Resetuj do domyślnych","","Вернуть по умолчанию","","","Reset to default","Varsayılanı geri yükle","Очистити налаштування стрiлок","Obnovit výchozí hodnoty","","" -"LaneArrows.Click:Separate lanes for entire junction","","Separate turning lanes for entire junction","","LaneArrows.Clic : Voies séparées pour l'intersection entière +"LaneConnector.Label:Reset to default","Zurücksetzen zu Standard","Reset to default","","Réinitialiser","Eredeti visszaállítása","","","","Herstellen naar standaard","Resetuj do domyślnych","","Вернуть по умолчанию","重設為預設值","","Reset to default","Varsayılanı geri yükle","Очистити налаштування стрiлок","Obnovit výchozí hodnoty","","" +"LaneArrows.Click:Separate lanes for entire junction","Separate Abbiege-Spuren für die ganze Kreuzung","Separate turning lanes for entire junction","","Flèches de voie de circulation. Cliquez sur : Voies séparées pour l'intersection entière Info-bulle Ctrl + clic pour les flèches de voie séparées pour l'intersection Fichier: TM: PE - Outil - Routage de voie de circulation","Sávok különválasztása az egész kereszteződésben","","","","Aparte rijstroken voor heel het kruispunt","Oddziel pasy skrętu dla całego skrzyżowania","","Раздельные повороты из полос на всём перекрёстке","","","Separate turning lanes for entire junction","","Роздільні повороти зі смуг по всьому перехресті","Vyhradí odbočovací pruhy pro danou křižovatku","","" -"LaneArrows.Click:Separate lanes for segment","","Separate turning lanes for selected segment","","LaneArrows.Clic : Voies séparées pour le segment +"LaneArrows.Click:Separate lanes for segment","Separate Abbiege-Spuren für das ausgewählte Segment","Separate turning lanes for selected segment","","Flèches de voie. Cliquez sur : Voies séparées pour le segment Info-bulle Alt + clic pour les flèches de voie distinctes pour un segment Fichier: TM: PE - Outil - Routage de voie de circulation","","","","","Aparte rijstroken per segment","Oddziel pasy skrętu dla wybranego segmentu","","Раздельные повороты из полос на сегменте","","","Separate turning lanes for selected segment","","Роздільні повороти зі смуг на сегменті шляху","Oddělí odbočovací pruhy pro daný segment silnice","","" -"LaneConnector.Label:Stay in lane, multiple modes","","Stay in lane, repeat to cycle through different modes","","LaneConnector.Label: Restez dans la voie de circulation, plusieurs modes possibles +"LaneConnector.Label:Stay in lane, multiple modes","In der Spur bleiben, mehrere Modi","Stay in lane, repeat to cycle through different modes","","Connecteur de voie. Étiquette : Restez dans la voie de circulation, plusieurs modes possibles Restez dans la voie de circulation, répétez pour parcourir les différents modes -Fichier: TM: PE - Outil - Routage de voie de circulation","","","","","Blijf op uw lijn, herhaal om door verschillende modi te bladeren","Pozostań na pasie, powtórz aby przełączać pomiędzy dostępnymi wariantami","","Оставаться в полосе, повторно нажмите для других режимов","","","Stay in lane, repeat to cycle through different modes","","Залишатись в своїй смузі, натисніть ще раз для інших режимів","Zůstat v pruhu, opakujte pro různé možnosti","","" -"LaneArrows.Mode:Select","","Choose a segment to edit","","","","","","","","","","Выберите сегмент дороги","","","Choose a segment to edit","","Оберіть сегмент шляху","","","" -"LaneConnector.Mode:Select","","Choose a node or junction to edit","","","","","","","","","","Выберите узел дороги или перекрёсток","","","Choose a node or junction to edit","","Оберіть вузол шляху або перехрестя","","","" -"LaneConnector.Mode:Source","","Choose which lane to edit","","","","","","","","","","Выберите полосу движения","","","Choose which lane to edit","","Оберіть смугу руху","","","" -"LaneConnector.Mode:Target","","Click target lanes to toggle connections","","","","","","","","","","Выберите полосы, чтобы направить либо запретить движение в них","","","Click target lanes to toggle connections","","Натисніть на смуги руху, куди слід дозволити або заборонити рух","","","" +Fichier: TM: PE - Outil - Routage de voie de circulation","","","","","Blijf op uw lijn, herhaal om door verschillende modi te bladeren","Pozostań na pasie, powtórz aby przełączać pomiędzy dostępnymi wariantami","","Оставаться в полосе, повторно нажмите для других режимов","禁止變換車道,多種模式","","Stay in lane, repeat to cycle through different modes","","Залишатись в своїй смузі, натисніть ще раз для інших режимів","Zůstat v pruhu, opakujte pro různé možnosti","","" +"LaneArrows.Mode:Select","Auswählen","Choose a segment to edit","","Flèches de voie de circulation. Mode : Sélectionnez +S'affiche lorsque l'outil de flèches de voie est activé: ""Choisissez un segment à modifier"" +Fichier : TM: PE - Outil - Routage de voie","","","","","Selecteer een segment om te bewerken","Wybierz segment","","Выберите сегмент дороги","選擇需要編輯的路段","","Choose a segment to edit","","Оберіть сегмент шляху","Zvolte segment k editaci","","" +"LaneConnector.Mode:Select","Auswählen","Choose a node or junction to edit","","Connecteur de Voie de circulation. Mode : Sélectionnez +Affiché dans l'outil de Connecteur de Voie, lorsque l'utilisateur doit ""sélectionner un nœud ou une jonction à modifier"" +Fichier : TM: PE - Outil - Routage de voie","","","","","Kies een punt of knooppunt om te bewerken","Wybierz węzęł lub skrzyżowanie","","Выберите узел дороги или перекрёсток","選擇需要編輯的路口或節點","","Choose a node or junction to edit","","Оберіть вузол шляху або перехрестя","Zvolte uzel nebo křižovatku k editaci","","" +"LaneConnector.Mode:Source","Start","Choose which lane to edit","","Connecteur de Voie de circulation. Mode : Source +S'affiche lorsque l'outil de connexion de voie est actif ""Choisissez la voie à modifier"" +Fichier: TM: PE - Outil - Routage de voie","","","","","Kies welke lijn die je wilt bewerken","Wybierz pas","","Выберите полосу движения","選擇需要編輯的車道","","Choose which lane to edit","","Оберіть смугу руху","Zvolte který jízdní pruh chcete editovat","","" +"LaneConnector.Mode:Target","Ziel","Click target lanes to toggle connections","","Connecteur de Voie de circulation. Mode : Cible +S'affiche lorsque l'outil de connecteur de voie de circulation est actif ""Cliquez sur les voies ciblées pour basculer les connexions""","","","","","","Wybierz pas, aby utworzyć połączenia","","Выберите полосы, чтобы направить либо запретить движение в них","點選目標車道以切換連接的道路","","Click target lanes to toggle connections","","Натисніть на смуги руху, куди слід дозволити або заборонити рух","Zvolte cílové jízdní pruhy k zapnutí připojení","","" diff --git a/TLM/TLM/Resources/Translations/Menu.csv b/TLM/TLM/Resources/Translations/Menu.csv index 62b5fb8e5..1d557d33b 100644 --- a/TLM/TLM/Resources/Translations/Menu.csv +++ b/TLM/TLM/Resources/Translations/Menu.csv @@ -18,7 +18,6 @@ "Tooltip:Lane connector","Fahrspurverbinder","Lane Connector","Conector de carriles","Connecteur de voies","Sávcsatlakozó","Connettore di corsia","車線を接続","차선 연결","Rijstrookverbinder","Połącz pasy ruchu","Conector de faixas","Соединения Полос Движения","車道連接工具","车道连接","Lane connector","Şerit birleştiricisi","З'єднання Смуг Руху","Připojení jízdních pruhů","","" "Tooltip:Junction restrictions","Kreuzungsbeschränkungen","Junction Restrictions","Restricciones del cruce","Restrictions des intersections","Csomópont korlátozások","Restrizioni d'incrocio","交差点の制限","교차로 규칙","Splitsingsbeperkingen","Ograniczenia na skrzyżowaniach","Restrições de junção","Ограничения на Перекрёстках","交岔路口動線連接制定","路口管制","Junction restrictions","Kavşak kısıtlamaları","Обмеження на Перехресті","Pravidla křižovatky","","" "Tooltip.Keybinds:Auto TL","Strg+Klick: Automatische Einstellung der Ampeln","Ctrl+Click: Quick setup","Semáforos automáticos","Feux automatiques","Automatikus jelzőlámpa","Ctrl+Clic: Configurazione rapida","Ctrl+クリック: クイックセットアップ","Ctrl+클릭: 빠른 설정","Ctrl+Shift+Klik: Automatische setup van de verkeerslichten","Ctrl + Klik: Szybka instalacja","Ctrl+Clique: Configuração rápida","Ctrl+Click: Автоматическое создание светофора с таймером","自動化號誌","Ctrl+点击: 快速设置","Ctrl+Click: Quick setup","Özdevinimli TI","Ctrl+Click: Автоматичне створення світлофора з таймером","Ctrl + Levý klik: rychlé nastavení semaforu","","" -"Tooltip.Keybinds:Add priority signs","Vorfahrtsschilder hinzufügen","Shift-Click: Quick-setup priority Road/Roundabout.\nCtrl+Shift+Click: Quick setup high priority Road/Roundabout\nCtrl+Click: Quick-setup priority junction","Añadir señales de prioridad","Ajouter les panneaux de priorité","Elsőbbségadás kötelező tábla hozzáadása","Ctrl+Shift+Clic: Configurazione rapida","Ctrl+Shift+クリック: クイックセットアップ","Shift-클릭: 도로/라운드어바웃 우선순위 빠른 설정 \nCtrl+Shift+클릭: 도로/라운드어바웃 높은 우선순위 빠른 설정\nCtrl+클릭: 교차로 우선순위 빠른 설정","Ctrl+Shift+Klik: Snelle setup","Ctrl+Shift+Klik: Szybka instalacja - droga/rondo z priorytetem\nCtrl+Shift+Klik: Szybka instalacja - droga/rondo z wysokim priorytetem\nCtrl+Klik: Szybka instalacja skrzyżowanie z priorytetem","Ctrl+Shift+Clique: Configuração rápida","Ctrl+Shift+Click: Добавить знаки приоритета на перекрёстках круга","加入優先標誌","Ctrl+Shift+点击: 快速设置","Shift-Click: Quick-setup priority Road/Roundabout.\nCtrl+Shift+Click: Quick setup high priority Road/Roundabout\nCtrl+Click: Quick-setup priority junction","Öncelik işaretleri ekle","Ctrl+Shift+Click: Додати знаки приорітету руху автоматично","Shift+Levý klik: Rychlé nastavení přednosti na silnici/kruhovém objezdu.\nCtrl+Shift+Levý klik: Rychlé nastavení vysoké přednosti silnice/kruhového objezdu\nCtrl+Levý klik: Rychlé nastavení předností křižovatky","","" "Roundabout.Option:Allocate dedicated exit lanes","Dedizierte Ausfahrspuren zuweisen","Allocate dedicated exit lanes","","Attribuer des voies de sortie dédiées","","Assegna corsie di uscita","専用の出口レーンを割り当てる","출구 전용 차선 할당","Wijs speciale exit-rijstroken toe","Przydziel dedykowane pasy zjazdu z ronda","Atribuir faixas de saída dedicadas","Выделенные полосы для покидания круга","分配出口專用車道","","Allocate dedicated exit lanes","Ayrılmış çıkış şeritleri özgüle","Окремі смуги для виїзду з кругового перехрестя","Povolit samostatné pruhy pro výjezd","","" "Roundabout.Tooltip:Allocate dedicated exit lanes","Dedizierte Ausfahrspuren zuweisen","One dedicated lane for each exit, the rest of lanes go straight","","Attribuer des voies de sortie dédiées","","Una corsia per ogni uscita, le restanti per proseguire dritto","各出口に1つの専用レーン、残りのレーンは直進","각 출구에 대해 전용 차선 1개, 나머지 차선은 직진","Een speciale rijstrook voor elke afslag, de rest van de rijstroken gaat rechtdoor","Dedykowany pas do zjazdu, pozostałe do jazdy na wprost","Apenas uma das faixas será dedicada para cada saída, o resto seguirá em frente","Крайние полосы будут назначены исключительно для съезда с круга","分配出口專用車道","","One dedicated lane for each exit, the rest of lanes go straight","Her çıkışa bir şerit özgüler, geriye kalan şeritler düz akar","Призначити крайні смуги руху виключно для виїзду з кругового перехрестя","Přiřadí vyhrazené pruhy pro každý výjezd, ostatní budou pokračovat rovně","","" "Roundabout.Option:Stay in lane inside roundabout","Keine Spurwechsel im Kreisverkehr","Stay in lane inside the roundabout","","Rester dans la voie à l'intérieur du rond-point","Maradjon a sávjában a körforgalomban","Nella rotonda i veicoli devono mantenere la corsia","ラウンドアバウト交差点内では車線にとどまる","라운드어바웃 안에서의 차선 유지","Blijf in lijn binnen de rotonde","'Pozostań na pasie' na drogach wewnątrz ronda","Permanecer na faixa dentro da rotatória","Оставаться в полосе внутри круга","將車道留在圓環島內","","Stay in lane inside the roundabout","Dönel kavşak içinde şerit değiştirilmesin","Тримати смугу всередині кругового перехрестя","Zůstat v pruhu během jízdy v kruhovém objezdu","","" @@ -27,21 +26,22 @@ "Roundabout.Option:No crossing inside","Fußgänger betreten nicht die Mitte eines Kreisels","Pedestrians shall not cross to the center of roundabout","","Pas de croisement à l'intérieur","Ne legyen gyalogátkelő a körforgalomban","I pedoni non possono attraversare al centro della rotonda","歩行者は、ラウンドアバウト交差点の中心部に進入してはならない。","라운드어바웃의 중앙으로 보행자가 건너지 않음","Voetgangers mogen de oversteekplaatsen niet oversteken die op de rotonde liggen","Pieszy nie powinni przechodzić przez drogę do środka ronda","Proibir a travessia de pedestres para o centro da rotatória","Запретить пешеходные переходы внутри круга","內部無路口","","Pedestrians shall not cross to the centre of the roundabout","Yayalar kavşak ortasından karşıya geçmesin","Заборонити пішохідні переходи всередині","Chodci by nesmí přecházet kruhový objezd doprostřed","","" "Roundabout.Option:No crossing on incoming roads","Keine Überquerung über ankommende Straßen","Pedestrians shall not cross the roads approaching the roundabout","","Pas de croisement sur les routes entrantes","Ne legyen gyalogátkelő a bejövő utakon","I pedoni non possono attraversare le strade in avvicinamento alla rotonda","歩行者は、ラウンドアバウト交差点に進入する道路を横断してはならない","라운드어바웃으로 접근하는 도로를 보행자가 건너지 않음","Voetgangers mogen de weg niet oversteken die aan de inkomende wegen van de rotonde liggen","Pieszy nie powinni przechodzić przez drogę tuż przed rondem","Proibir a travessia de pedestres nas ruas de acesso a rotatória","Запретить пешеходные переходы на подъездных дорогах к кругу","路口無連接的道路","","Pedestrians shall not cross the roads approaching the roundabout","Yayalar kavşak bağlantılarına yakınken karşıya geçmesin","Заборонити пішохідні переході на під'їздних дорогах","Chodci nesmí přecházet silnici blízko kruhovému objezdu","","" "Roundabout.Option:Set priority signs","Vorfahrtsschilder setzen","Add priority signs on the roundabout junction","Añadir señales de prioridad en los cruces de la rotonda","Définir les panneaux de priorité","Elsőbbségadás tábla hozzáadása a körforgalomhoz","Aggiungi segnali di precedenza alla rotonda","ラウンドアバウト交差点に優先標識を追加する","라운드어바웃 교차로에 우선주행 표지판 추가","Voeg Prioriteitsborden toe aan rotondes","Dodaj znaki pierwszeństwa przejazdu na rondzie","Adicionar placas de prioridade na junção da rotatória","Установить знаки приоритета","設定優先標誌","","Add priority signs on the roundabout junction","Öncelik işaretlerini ayarla","Встановити знаки пріоритету на круговому перехресті","Přidat přednost na kruhovém objezdu","","" -"Tooltip:Disable despawning","Despawn ausschalten","Toggle automatic vehicle despawning\n -Currently: Enabled (easy mode, less traffic jams)","Desactivar desaparición","Désactiver la disparition","Letiltja a hajtást","Disabilita la sparizione dei veicoli","スタック除去無効化","차 사라짐 비활성화","Voertuigverdwijning uitschakelen","Zablokuj znikanie pojazdów","Desativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n +"Tooltip:Disable despawning","Despawn ausschalten","Toggle automatic vehicle despawning +Currently: ENABLED (easy mode, less traffic jams)","Desactivar desaparición","Désactiver la disparition","Letiltja a hajtást","Disabilita la sparizione dei veicoli","スタック除去無効化","차 사라짐 비활성화","Voertuigverdwijning uitschakelen","Zablokuj znikanie pojazdów","Desativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n Сейчас: Включено (лёгкий режим, пробки случаются реже)","久塞車輛永不消失","禁止车辆消失","Despawning is currently enabled. Disable despawning.","Yok olmayı devre dışı bırak","Переключення режиму Зникнення Застряглих Автівок\n Зараз: Дозволено (легше грати, менше заторів на дорозі)","Vypnout mazání vozidel","","" -"Tooltip:Enable despawning","Despawn einschalten","Toggle automatic vehicle despawning\n -Currently: Disabled (hard mode, bigger traffic jams)","Activar desaparición","Activer la disparition","Engedélyezze a levágást","Abilita la sparizione dei veicoli","スタック除去有効化","차 사라짐 활성화","Voertuigverdwijning inschakelen","Odblokuj znikanie pojazdów","Ativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n +"Tooltip:Enable despawning","Despawn einschalten","Toggle automatic vehicle despawning +Currently: NO DESPAWNING (hard mode, bigger traffic jams)","Activar desaparición","Activer la disparition","Engedélyezze a levágást","Abilita la sparizione dei veicoli","スタック除去有効化","차 사라짐 활성화","Voertuigverdwijning inschakelen","Odblokuj znikanie pojazdów","Ativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n Сейчас: Отключено (более трудный режим, пробки случаются чаще)","允許久塞車輛消失","允许车辆消失","Despawning is currently disabled. Enable despawning.","Yok olmayı etkinleştir","Переключення режиму Зникнення Застряглих Автівок\n Зараз: Вимкнено (важче грати, вищий ризик заторів на дорозі)","Zapnout mazání vozidel","","" -"RoadSelection.Tooltip:Clear","Löschen","Clear traffic rules related to high priority road","","Sélection de route. Info-bulle : Nettoyer","Törlés","Rimuove le regole del traffico relative alla strada ad alta priorità","","높은 우선순위 도로와 관련된 교통규칙 삭제","Wis verkeersregels gerelateerd tot wegen met hoge prioriteit","Wyczyść zasady ruchu drogowego związane z priorytetem drogi","Limpar as regras de trânsito relacionadas à rua de alta prioridade","Сбросить настройки","","","Clear traffic rules related to high priority road","Temizle","Очистити всі правила","Vymaže pravidla provozu pro silnice s vysokou prioritou","","" -"RoadSelection.Tooltip:Stop entry","Stopschild","Applies stop signs on connected roads","","Sélection de route. Info-bulle : Arrêt à l'entrée d'une route","","Applica segnali di stop sulle strade collegate","","연결된 도로에 정지 표지판 적용","Past stopborden toe op verbonden wegen","Ustawia znaki stop na połączonych drogach","Aplica placas de pare em ruas conectadas","Стоп при въезде со всех дорог","","","Applies stop signs on connected roads","Dur işareti","Знаки Стоп по всій вулиці","Použije značku STOP na připojených silnicích","","" -"RoadSelection.Tooltip:Yield entry","Vorfahrt gewähren","Applies yield signs on connected roads","","Sélection de route. Info-bulle : Arrêt à l'entrée d'un route","","Applica segnali di dare la precedenza sulle strade collegate","","연결된 도로에 양보 표지판 적용","Past voorangsborden toe op verbonden wegen","Ustawia znaki pierwszeństwa przejazdu na połączonych drogach","Aplica placas de dar a preferência em ruas conectadas","Уступить при въезде со всех дорог","","","Applies give way signs on connected roads.","Yolver işareti","Знаки Дати Дорогу по всій вулиці","Použije značku dej přednost na připojených silnicích","","" -"RoadSelection.Tooltip:High priority","Vorfahrt","Applies all traffic rules for high priority road(customizable in options)","","Sélection de route. Info-bulle : Haute priorité","","Applica tutte le regole per strade ad alta priorità (personalizzabile nelle opzioni)","","높은 우선순위 도로에 대한 모든 교통규칙 적용(옵션에서 사용자 정의 가능)","Past alle verkeersregels toe op wegen met hoge prioriteit (aanpasbaar in opties)","Aplikuje wszystkie zasady dla drogi priorytetowej(modyfikowalne w opcjach)","Aplica todas as regras de trânsito para rua de alta prioridade (customizável nas opções)","Приоритетная дорога","","","Applies all traffic rules for high priority road (customisable in options)","Yüksek öncelikli","Зробити вулицю пріоритетною дорогою","Použije veškeré pravidla provozu na silnice s vysokou prioritou (lze změnit v nastavení)","","" -"RoadSelection.Tooltip:Roundabout","Kreisverkehr","Applies all traffic rules for roundabout. Button is disabled when road selection is not recognized as roundabout (e.g.: two way road or one-way road that changes direction).","","Sélection de route. Info-bulle : Rond point","Körforgalom","Applica tutte le regole del traffico per la rotonda. Il pulsante è disabilitato quando la selezione di strade non è riconosciuta come rotonda.","","라운드어바웃에 대한 모든 교통규칙 적용. 도로 선택이 라운드어바웃으로 인식되지 않으면 버튼이 비활성화됩니다.","Past alle verkeersregels toe op rotonde. Knop is uitgeschakeld wanneer wegselectie niet als rotonde wordt herkend.","Aplikuje wszystkie zasady do ronda. Przycisk jest zablokowant jeśli zaznaczona droga nie jest rondem.","Aplica toda as regras de trânsito para a rotatória. O botão fica desligado quando a seleção de rua não detecta uma rotatória.","Правила для кругового движения","","","Applies all traffic rules for roundabout. Button is disabled when road selection is not recognised as roundabout.","Dönel kavşak","Застосувати правила руху по колу","Použije veškeré pravidla provozu silnice na kruhový objezd. Tlačítko je vypnuto jestliže zvolená silnice není kruhový objezd.","","" -"Tooltip.Keybinds:Parking restrictions","Parkeinschränkungen","Apply changes to the whole road","","Info-bulle. Restrictions des aires de stationnement","Parkolási szabályok","Applica modifiche a tutta la strada","","모든 도로에 변경 사항 적용","Pas wijzigingen toe op de hele weg","Zastosuj zmiany do całej drogi","Aplicar restrições a toda a rua","Ограничить парковку на всей дороге","","","Apply changes to the whole road","Park kısıtlamaları","Застосувати обмеження паркування до всієї вулиці","Použít změny na celou silnici","","" -"Tooltip:Toggle onscreen display panel","","Toggle keyboard and mouse hints panel","","Info-bulle : Basculer le panneau d'affichage vers l'écran +"RoadSelection.Tooltip:Clear","Löschen","Clear traffic rules related to high priority road","","Sélection de route. Info-bulle : Nettoyer","Törlés","Rimuove le regole del traffico relative alla strada ad alta priorità","","높은 우선순위 도로와 관련된 교통규칙 삭제","Wis verkeersregels gerelateerd tot wegen met hoge prioriteit","Wyczyść zasady ruchu drogowego związane z priorytetem drogi","Limpar as regras de trânsito relacionadas à rua de alta prioridade","Сбросить настройки","清除","","Clear traffic rules related to high priority road","Temizle","Очистити всі правила","Vymaže pravidla provozu pro silnice s vysokou prioritou","","" +"RoadSelection.Tooltip:Stop entry","Stopschild","Applies stop signs on connected roads","","Sélection de route. Info-bulle : Arrêt à l'entrée d'une route","","Applica segnali di stop sulle strade collegate","","연결된 도로에 정지 표지판 적용","Past stopborden toe op verbonden wegen","Ustawia znaki stop na połączonych drogach","Aplica placas de pare em ruas conectadas","Стоп при въезде со всех дорог","禁止進入","","Applies stop signs on connected roads","Dur işareti","Знаки Стоп по всій вулиці","Použije značku STOP na připojených silnicích","","" +"RoadSelection.Tooltip:Yield entry","Vorfahrt gewähren","Applies yield signs on connected roads","","Sélection de route. Info-bulle : Arrêt à l'entrée d'un route","","Applica segnali di dare la precedenza sulle strade collegate","","연결된 도로에 양보 표지판 적용","Past voorangsborden toe op verbonden wegen","Ustawia znaki pierwszeństwa przejazdu na połączonych drogach","Aplica placas de dar a preferência em ruas conectadas","Уступить при въезде со всех дорог","支道匯入","","Applies give way signs on connected roads.","Yolver işareti","Знаки Дати Дорогу по всій вулиці","Použije značku dej přednost na připojených silnicích","","" +"RoadSelection.Tooltip:High priority","Vorfahrt","Applies all traffic rules for high priority road(customizable in options)","","Sélection de route. Info-bulle : Haute priorité","","Applica tutte le regole per strade ad alta priorità (personalizzabile nelle opzioni)","","높은 우선순위 도로에 대한 모든 교통규칙 적용(옵션에서 사용자 정의 가능)","Past alle verkeersregels toe op wegen met hoge prioriteit (aanpasbaar in opties)","Aplikuje wszystkie zasady dla drogi priorytetowej(modyfikowalne w opcjach)","Aplica todas as regras de trânsito para rua de alta prioridade (customizável nas opções)","Приоритетная дорога","高優先權","","Applies all traffic rules for high priority road (customisable in options)","Yüksek öncelikli","Зробити вулицю пріоритетною дорогою","Použije veškeré pravidla provozu na silnice s vysokou prioritou (lze změnit v nastavení)","","" +"RoadSelection.Tooltip:Roundabout","Kreisverkehr","Applies all traffic rules for roundabout. Button is disabled when road selection is not recognized as roundabout (e.g.: two way road or one-way road that changes direction).","","Sélection de route. Info-bulle : Rond point","Körforgalom","Applica tutte le regole del traffico per la rotonda. Il pulsante è disabilitato quando la selezione di strade non è riconosciuta come rotonda.","","라운드어바웃에 대한 모든 교통규칙 적용. 도로 선택이 라운드어바웃으로 인식되지 않으면 버튼이 비활성화됩니다.","Past alle verkeersregels toe op rotonde. Knop is uitgeschakeld wanneer wegselectie niet als rotonde wordt herkend.","Aplikuje wszystkie zasady do ronda. Przycisk jest zablokowant jeśli zaznaczona droga nie jest rondem.","Aplica toda as regras de trânsito para a rotatória. O botão fica desligado quando a seleção de rua não detecta uma rotatória.","Правила для кругового движения","圓環","","Applies all traffic rules for roundabout. Button is disabled when road selection is not recognised as roundabout.","Dönel kavşak","Застосувати правила руху по колу","Použije veškeré pravidla provozu silnice na kruhový objezd. Tlačítko je vypnuto jestliže zvolená silnice není kruhový objezd.","","" +"Tooltip:Toggle onscreen display panel","Tooltip Einblendungen ein-/ausschalten","Toggle keyboard and mouse hints panel","","Info-bulle : Basculer le panneau d'affichage vers l'écran Info-bulle sur le bouton (?) dans le menu principal -Fichier : TM: PE - Barre de menu et bouton","","","","","","Wł/wył panel podpowiedzi skrótów klawiszowych","","Показать или скрыть панель подсказок по клавишам","工具提示: 切換畫面上的顯示面板","","Toggle keyboard and mouse hints panel","","Показати чи сховати панель підказок клавіш та дій","Zapnout panel tipů pro klávesnici a myš","","" -"Onscreen.Idle:Choose a tool","","Choose a tool to use, or click a road","","","","","","","","","","Выберите инструмент либо нажмите на дорогу","","","Choose a tool to use, or click a road","","Оберіть інструмент, або натисніть на шлях","","","" +Fichier : TM: PE - Barre de menu et bouton","","","","","Wissel toetsenbord en muis hints paneel","Wł/wył panel podpowiedzi skrótów klawiszowych","","Показать или скрыть панель подсказок по клавишам","工具提示: 切換畫面上的顯示面板","","Toggle keyboard and mouse hints panel","","Показати чи сховати панель підказок клавіш та дій","Zapnout panel tipů pro klávesnici a myš","","" +"Onscreen.Idle:Choose a tool","Werkzeug auswählen oder Straße anklicken","Choose a tool to use, or click a road","","À l'écran. Idle : Choisissez un outil +Affiché dans le panneau d'indication à l'écran, lorsque rien n'est sélectionné: ""Choisissez un outil à utiliser ou cliquez sur une route"" +Fichier : TM: PE - Barre de menu et bouton","","","使用するツールを選択するか、道路をクリックしてください","","Kies een tool om te gebruiken, of klik op een straat","Wybierz narzędzie, albo kliknij w segment drogi","","Выберите инструмент либо нажмите на дорогу","選取工具","","Choose a tool to use, or click a road","","Оберіть інструмент, або натисніть на шлях","Zvolte si nástroj který chcete použít nebo klikněte na silnici","","" diff --git a/TLM/TLM/Resources/Translations/Options.csv b/TLM/TLM/Resources/Translations/Options.csv index 966e3489c..94afdfe41 100644 --- a/TLM/TLM/Resources/Translations/Options.csv +++ b/TLM/TLM/Resources/Translations/Options.csv @@ -35,8 +35,8 @@ "General.Tooltip.Format:Overlay transparency: {0}%","Overlaytransparenz: {0}%","Overlay transparency: {0}%","Transparencia de capa: {0}%","Transparence de l'interface: {0}%","Átlátszó fedvény: {0}%","Trasparenza dello strato superiore: {0}%","オーバーレイの透明度: {0}%","오버레이 투명도: {0}%","Overlay transparantie: {0}%","Przezroczystość nakł.: {0}%","Transparência da sobreposição: {0}%","Прозрачность вспомогательной графики: {0}%","堆疊透明度:{0} %","图层透明度: {0}%","Overlay transparency: {0}%","Üstyazım saydamlığı: {0}%","Прозорість допоміжної графіки: {0}%","Průhlednost nabídky: {0}%","","" "General.Dropdown:Select language","Sprache","Select language","Idioma","Langue","Nyelv","Lingua","言語","언어 선택","Taal","Język","Linguagem","Выберите язык мода","選擇語言","语言","Select language","Dil seçimi","Виберіть мову","Zvolte jazyk","","" "General.Group:Simulation","Simulation","Simulation","Simulación","Simulation","tettetés","Simulazione","シミュレーション","시뮬레이션","Simulatie","Symulacja","Simulação","Симуляция","模擬","模拟","Simulation","Benzeşim","Моделювання","Simulace","","" -"General.Slider:Window transparency","Fenstertransparenz","Window transparency","Transparencia de ventana","Transparence de la fenêtre","Ablak átlátszósága","Trasparenza della finestra","ウィンドウの透明度","창 투명도","Transparantie van het venster","Przezroczystość okna","Transparência da janela","Прозрачность окна","視窗透明度","窗口透明度","Window transparency","Pencere saydamlığı","Прозорість вікна","Průhlednost okna","","" -"General.Tooltip.Format:Window transparency: {0}%","Fenstertransparenz: {0}%","Window transparency: {0}%","Transparencia: {0}%","Transparence de la fenêtre: {0}%","Ablak átlátszósága: {0}%","Trasparenza della finestra: {0}%","ウィンドウの透明度: {0}%","창 투명도: {0}%","Transparantie van het venster {0}%","Przezroczystość okna: {0}%","Transparência da janela: {0}%","Прозрачность окна: {0}%","視窗透明度:{0}%","窗口透明度: {0}%","Window transparency: {0}%","Pencere saydamlığı: {0}%","Прозорість вікна: {0}%","Průhlednost okna: {0}%","","" +"General.Slider:Window transparency","Fenstertransparenz","Window opacity","Transparencia de ventana","Transparence de la fenêtre","Ablak átlátszósága","Trasparenza della finestra","ウィンドウの透明度","창 투명도","Transparantie van het venster","Przezroczystość okna","Transparência da janela","Прозрачность окна","視窗透明度","窗口透明度","Window transparency","Pencere saydamlığı","Прозорість вікна","Průhlednost okna","","" +"General.Tooltip.Format:Window transparency: {0}%","Fenstertransparenz: {0}%","Window opacity: {0}%","Transparencia: {0}%","Transparence de la fenêtre: {0}%","Ablak átlátszósága: {0}%","Trasparenza della finestra: {0}%","ウィンドウの透明度: {0}%","창 투명도: {0}%","Transparantie van het venster {0}%","Przezroczystość okna: {0}%","Transparência da janela: {0}%","Прозрачность окна: {0}%","視窗透明度:{0}%","窗口透明度: {0}%","Window transparency: {0}%","Pencere saydamlığı: {0}%","Прозорість вікна: {0}%","Průhlednost okna: {0}%","","" "Keybind:Generic exit subtool key","Werkzeug und TM:PE Menü schließen","Exit tool and close TM:PE Menu","Salir de la herramienta y cerrar menú de TM:PE","Sortir de l'outil et fermer le menu TM:PE","Lépjen ki az eszközből, és zárja be a TM: PE menüt","Esci dallo strumento e chiudi il menù di TM:PE","ツールを終了しTM:PEメニューを閉じます","도구 및 TM:PE 메뉴 닫기","Verlaat de tool en sluit het TM:PE-menu","Wyłącz narzędzie i zamknij TM:PE menu","Sair da ferramenta e fechar o menu do TM:PE","Закрыть инструмент и меню TM:PE","退出工具並且關閉TM: PE選單","关闭工具与TM:PE主菜单","Exit tool and close TM:PE Menu","Çıkış ve TM:PE menüsünü kapatma","Загальна клавіша завершення роботи з інструментом","Zavřít nástroj a nabídku Traffic Managera","","" "Keybind.LaneConnector:Delete","Fahrspurverbindungen löschen","Clear lane connections","Borrar uniones de carril","Effacer la voie connectée","Tiszta sávcsatlakozások","Elimina la connessione tra le corsie","車線接続をクリア","차선 연결 해제","Verwijder","Usuń połączenia pasów ruchu","Deletar","Очистить соединения полос движения","刪除","清除车道连接设置","Clear lane connections","Kaldır","Видалити","Vymazat spojení pruhů","","" "Keybind.LaneConnector:Stay in lane","Fahrspurverbinder: Bleib auf der Fahrspur","Stay in lane","Mantenerse en el carril","Connecteur de voie : Rester sur sa voie","Maradjon a sávban","Resta nella corsia","車線変更不可","차선 유지","Blijf in lijn","Połącz pasy ruchu: Pozostań na pasie","Manter-se na faixa","Полосы движения: Оставаться в своей полосе","留在當下車道","辅助连接禁止变更车道","Stay in lane","Şeritte kal","Залишатися в смузі руху","Držet se pruhu","","" @@ -97,16 +97,16 @@ "Maintenance.Dialog.Title:Remove all traffic lights","Entferne alle Ampeln","Remove all traffic lights","","Retirer tous les feux de circulation","Összes jelzőlámpa eltávolítása","Rimuovi tutti i semafori","すべての信号を削除する","모든 신호등 제거","Verwijder alle verkeerslichten?","Usuwanie sygnalizacji świetlnych","Remover todos os semáforos","Удаление всех светофоров на карте","移除所有的號誌燈","移除所有红绿灯","Remove all traffic lights","Mevcut trafik ışıklarını kaldır","Видалення всіх світлофорів","Smazání světelných řízení křižovatek","","" "Maintenance.Dialog.Text:Remove all traffic lights, Confirmation","Wirklich alle existierenden Ampeln entfernen?","Are you sure you want to remove all existing traffic lights?","","Êtes-vous sûr de vouloir retirer tous les feux de circulation ?","Biztosan törölni szeretné az összes jelzőlámpát","Sei sicuro di voler rimuovere tutti i semafori esistenti?","既存の信号機をすべて除去してもよろしいですか?","존재하는 신호등을 모두 제거하시겠습니까?","Bent u zeker dat je alle bestaande verkeerslichten wilt verwijderen?","Czy na pewno chcesz usunąć sygnalizację świetlną ze wszystkich skrzyżowań?","Você realmente deseja remover todos os semáforos existentes?","Это действие удалит все светофоры на текущей карте. Вы уверены?","是否確定要移除所有現有的號誌燈?","是否确认移除所有现有的红绿灯?","Are you sure you want to remove all existing traffic lights?","Mevcut tüm trafik ışıklarını kaldırmak istediğinizden emin misiniz?","Чи ви бажаєте очистити мапу від всіх світлофорів","Opravdu chcete smazat veškeré existující semafory ze všech křižovatek?","","" "VR.Checkbox:Automatically add traffic lights if applicable","Wo möglich, Ampeln automatisch hinzufügen","Automatically add traffic lights if applicable","","Ajouter automatiquement les feux de signalisation si possible","Automatikusan adjon hozzá jelzőlámpákat, ha lehetséges","Aggiungi i semafori automaticamente se possibile","該当する場合、信号を自動的に追加する","해당되는 경우 자동으로 신호등 추가","Voeg automatisch verkeerslicht toe indien van toepassing","Automatycznie dodaj sygnalizację świetlną dla nowych skrzyżowań","Automaticamente adicionar semáforos se possível","Добавлять светофоры автоматически, где это применимо","如果允許,自動加入號誌燈","在合适的情况下自动增加红绿灯","Automatically add traffic lights if applicable","Eğer uygunsa trafik ışıklarını kendiliğinden ekle","Автоматично додавати світлофор, якщо це має сенс","Automaticky zapni semafory pokud je to možno","","" -"MassEdit.Group:Roundabouts","Kreisverkehr","Roundabouts","Rotonda","Ronds-points","Körforgalmak","Rotatorie","","라운드어바웃","MassEdit.Group:Rotondes","Ronda","Rotatórias","Движение по кругу","圓環島","环岛","Roundabouts","Dönel kavşaklar","Круговий рух","Kruhový objezd","","" -"MassEdit.Group.Priority roads","Prioritätsstraßen","Priority roads","","Priorité des routes","Felsőbbrendű utak","Strade prioritarie","","우선 주행 도로","Prioritaire wegen","Drogi priorytetowe","Ruas de prioridade","Главная дорога","優先道路","","Priority roads","Öncelikli yollar","Головна дорога","Hlavní silnice","","" -"Priority roads.Option:Allow far turns","Erlaube Fahrzeugen, von einer Straße über eine Spur abzubiegen/auf die Hauptstraße zu fahren (nicht empfohlen)","Allow cars to take far turn from/into main road (not recommended)","","Option : Autoriser les virages lointains/éloignés","","Permette alle auto di svoltare lontano da/verso la strada principale (non raccomandato)","","차량 중앙차선으로 회전 허용 (권장하지 않음)","Sta auto's toe ver af te slaan van / naar hoofdweg (niet aanbevolen)","Zezwól na wykonanie skrętu z przecięciem przeciwległej jezdni","Permitir que carros escolham uma curva mais distante de/para a rua principal (não recomendado)","Позволить повороты через встречную полосу","允許車輛可逕行從幹道轉入/轉入至幹道(不建議)","","Allow cars to take far turn from/into main road (not recommended)","Geniş dönüşlere izin ver","Дозволити поворот через смугу зустрічного руху","Povolit vzdálené otáčení vozidel z/na hlavní silnici (nedoporučujeme)","","" -"Priority roads.Tooltip:Allow far turns","Wenn diese Option aktiviert ist, werden die Fahrspurpfeile nicht geändert, und Autos können den Mittelpunkt der Kreuzung überqueren (gilt nicht, wenn sich die Allee teilt)","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","","Info-bulle : Autoriser les virages lointains/éloignés","","Se abilitato, le frecce di corsia non verranno modificate e le auto possono attraversare il punto medio dell'incrocio (non si applica quando il viale si divide)","","활성화되면, 차선을 무시하고 차량이 도로 중앙으로 진입이 가능해집니다. (분할된 에비뉴 도로 미적용됨)","Indien ingeschakeld, blijven rijstrookpijlen onaangeroerd en kunnen auto's de mediaan van de weg oversteken (niet van toepassing bij het splitsen van de rijbaan).","Jeśli aktywne, strzałki pasów pozostają nietknięte a pojazdy mogą przecinać przeciwległą jezdnię","Caso ativado, as setas de faixa não serão modificadas e os carros poderão cruzar a mediana da rua (não se aplica ao dividir avenida).","Повороты через встречную полосу без разделителя полос","如果啟用此選項,車道箭頭將不改變,且車輛可逕行穿越道路中央(不適用含有分隔島的道路)","","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","Geniş dönüşlere izin ver","Дозволити повороти через зустрічний рух, якщо немає розділювача смуг","Pokud je zapnuto, jízdní pruhy nejsou dotčeny a automobily mohou pokračovat","","" -"Priority roads.Option:Enter blocked yield road","Erlauben den Fahrzeugen auf der Ausweichstraße die Einfahrt in eine blockierte Hauptstraße","Allow cars on yield road to enter blocked main road","","Option : Entrer sur la route même bloquée","Elsőbbségadás kötelező táblánál az autók továbbhajthatnak","Consente alle auto su strade con obbligo di dare la precedenza di entrare su strade principali bloccate","","양보 도로에서 주행 중인 차량이 막힌 메인 도로로 진입할 수 있도록 허용","Sta auto's toe om de geblokkeerde hoofdweg op te rijden vanuit de wegen die de hoofdweg voorrang moeten geven","Zezwól na wjazd z podporządkowanej na zablokowaną drogę z pierwszeństwem","Permitir que carros em espera entrem na rua principal bloqueada","Разрешить въезд на главную дорогу, занятую другими авто","允許支道車輛進入阻塞的幹道","","Allow cars on yield road to enter blocked main road","","Дозволити в'їзд на головну дорогу якщо місце зайнято іншими авто","Vozidla mohou na značce ""dej přednost"" vjet do zaplněné křižovatky","","" +"MassEdit.Group:Roundabouts","Kreisverkehr","Roundabouts","Rotonda","Ronds-points","Körforgalmak","Rotatorie","ラウンドアバウト","라운드어바웃","MassEdit.Group:Rotondes","Ronda","Rotatórias","Движение по кругу","圓環島","环岛","Roundabouts","Dönel kavşaklar","Круговий рух","Kruhový objezd","","" +"MassEdit.Group.Priority roads","Prioritätsstraßen","Priority roads","","Priorité des routes","Felsőbbrendű utak","Strade prioritarie","優先道路","우선 주행 도로","Prioritaire wegen","Drogi priorytetowe","Ruas de prioridade","Главная дорога","優先道路","","Priority roads","Öncelikli yollar","Головна дорога","Hlavní silnice","","" +"Priority roads.Option:Allow far turns","Erlaube Fahrzeugen, von einer Straße über eine Spur abzubiegen/auf die Hauptstraße zu fahren (nicht empfohlen)","Allow cars to take far turn from/into main road (not recommended)","","Option : Autoriser les virages lointains/éloignés","","Permette alle auto di svoltare lontano da/verso la strada principale (non raccomandato)","自動車の優先道路からの分流/合流を許可します(非推奨)","차량 중앙차선으로 회전 허용 (권장하지 않음)","Sta auto's toe ver af te slaan van / naar hoofdweg (niet aanbevolen)","Zezwól na wykonanie skrętu z przecięciem przeciwległej jezdni","Permitir que carros escolham uma curva mais distante de/para a rua principal (não recomendado)","Позволить повороты через встречную полосу","允許車輛可逕行從幹道轉入/轉入至幹道(不建議)","","Allow cars to take far turn from/into main road (not recommended)","Geniş dönüşlere izin ver","Дозволити поворот через смугу зустрічного руху","Povolit vzdálené otáčení vozidel z/na hlavní silnici (nedoporučujeme)","","" +"Priority roads.Tooltip:Allow far turns","Wenn diese Option aktiviert ist, werden die Fahrspurpfeile nicht geändert, und Autos können den Mittelpunkt der Kreuzung überqueren (gilt nicht, wenn sich die Allee teilt)","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","","Info-bulle : Autoriser les virages lointains/éloignés","","Se abilitato, le frecce di corsia non verranno modificate e le auto possono attraversare il punto medio dell'incrocio (non si applica quando il viale si divide)","有効にすると、車線の矢印はそのままになり、車は道路の中央分離帯を横切ることができます(道を分割する場合は適用されません)。","활성화되면, 차선을 무시하고 차량이 도로 중앙으로 진입이 가능해집니다. (분할된 에비뉴 도로 미적용됨)","Indien ingeschakeld, blijven rijstrookpijlen onaangeroerd en kunnen auto's de mediaan van de weg oversteken (niet van toepassing bij het splitsen van de rijbaan).","Jeśli aktywne, strzałki pasów pozostają nietknięte a pojazdy mogą przecinać przeciwległą jezdnię","Caso ativado, as setas de faixa não serão modificadas e os carros poderão cruzar a mediana da rua (não se aplica ao dividir avenida).","Повороты через встречную полосу без разделителя полос","如果啟用此選項,車道箭頭將不改變,且車輛可逕行穿越道路中央(不適用含有分隔島的道路)","","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","Geniş dönüşlere izin ver","Дозволити повороти через зустрічний рух, якщо немає розділювача смуг","Pokud je zapnuto, jízdní pruhy nejsou dotčeny a automobily mohou pokračovat","","" +"Priority roads.Option:Enter blocked yield road","Erlauben den Fahrzeugen auf der Ausweichstraße die Einfahrt in eine blockierte Hauptstraße","Allow cars on yield road to enter blocked main road","","Option : Entrer sur la route même bloquée","Elsőbbségadás kötelező táblánál az autók továbbhajthatnak","Consente alle auto su strade con obbligo di dare la precedenza di entrare su strade principali bloccate","高速道路上の車を通行止めの優先道路に進入させる","양보 도로에서 주행 중인 차량이 막힌 메인 도로로 진입할 수 있도록 허용","Sta auto's toe om de geblokkeerde hoofdweg op te rijden vanuit de wegen die de hoofdweg voorrang moeten geven","Zezwól na wjazd z podporządkowanej na zablokowaną drogę z pierwszeństwem","Permitir que carros em espera entrem na rua principal bloqueada","Разрешить въезд на главную дорогу, занятую другими авто","允許支道車輛進入阻塞的幹道","","Allow cars on yield road to enter blocked main road","","Дозволити в'їзд на головну дорогу якщо місце зайнято іншими авто","Vozidla mohou na značce ""dej přednost"" vjet do zaplněné křižovatky","","" "Priority roads.Option:Stop signs on entry","Stoppschilder für einfahrten auf Hauptstraßen verwenden","Use stop signs when entering main road","","Option : Panneau Stop à l'entrée de route","Stop tábla a az út kezdeténél","Utilizza i segnali di stop quando si entra nella strada principale","","메인 도로 진입 시 정지 표지판 사용","Gebruik stopborden bij het betreden van de hoofdweg","Używaj znaku stop na wjazdach drogi z pierwszeństwem","Utilizar placas de ""Pare"" nas entradas a ruas principais","Установить знаки Стоп на въезде","當匯入幹道時,使用「停」標誌","","Use stop signs when entering main road","Yol girişinde Dur işareti","Встановити знаки Стоп на в'їзді до головної дороги","Použít STOP značku při vjezdu na hlavní silnici","","" "Priority roads.Tooltip:Stop signs on entry","Wenn aktiviert, werden Stoppschilder an Straßen angebracht, die in die Hauptstraße münden. Wenn deaktiviert, werden stattdessen Vorfahrtsschilder angebracht","If enabled, puts stop signs on roads entering the main road. If disabled, puts yield signs instead","","Info-bulle : Panneau Stop/d'arrêt à l'entrée d'une route","Stop tábla a az út kezdeténél","Se abilitato, mette segnali di stop sulle strade che entrano in quella principale. Se disabilitato, invece, mette segnali di dare la precedenza","","활성화되면 메인 도로로 진입하는 도로에 정지 표지판을 놓습니다. 비활성화되면 대신 양보 표지판을 놓습니다.","Indien ingeschakeld, plaatst stopborden. Indien uitgeschakeld, plaats voorrangsborden.","Jeśli aktywne, ustawia znaki stop na drogach dojazdowych do drogi z pierwszeństwem, jeśli nie, używa znaków pierwszeństwa przejazdu","Caso ativado, põe placas de ""Pare"" nas ruas de entrada a rua principal. Caso desativado, põe placas de prioridade","Если включено, устанавливает на въездах на главную дорогу знаки Стоп. Иначе будут установлены знаки Уступить Дорогу.","如果啟用此選項,將放置「停」標誌在匯入幹道的支道。如果停用,則立即放置「讓」標誌。","","If enabled, puts stop signs on roads entering the main road. If disabled, puts yield signs instead","Yol girişinde Dur işareti","Встановлює знаки Стоп на в'їздах на головну дорогу, інакше встановлює знаки Дати Дорогу","Použít STOP při vjezdu na hlavní silnici. V opačném případě ""dej přednost""","","" "Priority roads.Option:Allow pedestrian crossings on main road","Erlaube Fußgängerübergänge auf der Hauptstraße","Allow pedestrian crossings on main road","","Autoriser les passages piétons sur les routes principales","Gyalogátkelőhelyek a felsőbbrendű úton","Abilita attraversamenti pedonali sulla strada principale","","메인 도로에서 보행자 횡단 허용","Sta oversteekplaatsen toe op de hoofdweg","Zezwól na przejście dla pieszych na drodze głównej","Permitir cruzamento de pedestres em rua principal","Позволить пешеходные переходы на главной дороге","在幹道允許行人穿越道","","Allow pedestrian crossings on main road","Ana yolda yaya geçitlerine izin verin.","Дозволити пішохідні переходи на головній дорозі","Povolit chodcům přecházet silnici","","" "General.Slider:GUI scale","Größe der Benutzeroberfläche","User interface scale","","Taille de l'interface","Grafikus felhasználói felület mérete","scala GUI","","GUI 스케일","Gebruikersinterface schaal","Skala interfejsu użytkownika","Escala da interface de usuário","Масштаб пользовательского интерфейса","使用者介面大小","","User interface scale","Arayüz ölçeği","Масштаб графічного інтерфейсу користувача","Velikost uživatelského rozhraní","","" -"General.Tooltip.Format:GUI scale: {0}%","GUI-Skala: {0}%","Current GUI scale {0}%","","Info-bulle. Format : Échelle GUI : {0}%","Grafikus felhasználói felület {0}%","scala GUI: {0}%","","현재 GUI 스케일 {0}%","Huidige GUI-schaal {0}%","Aktualna skala interfejsu {0}%","Escala da Interface {0}%","Текущий масштаб интерфейса {0}%","","","Current GUI scale {0}%","Arayüz ölçeği: {0}%","Зараз встановлено масштаб {0}%","Velikost rozhraní {0}%","","" +"General.Tooltip.Format:GUI scale: {0}%","GUI-Skala: {0}%","Current GUI scale {0}%","","Info-bulle. Format : Échelle GUI : {0}%","Grafikus felhasználói felület {0}%","scala GUI: {0}%","","현재 GUI 스케일 {0}%","Huidige GUI-schaal {0}%","Aktualna skala interfejsu {0}%","Escala da Interface {0}%","Текущий масштаб интерфейса {0}%","目前的使用者介面 {0}%","","Current GUI scale {0}%","Arayüz ölçeği: {0}%","Зараз встановлено масштаб {0}%","Velikost rozhraní {0}%","","" "General.Dropdown:Simulation accuracy","Genauigkeit der Simulation","Simulation accuracy","Precisión de la simulación","Précision de la simulation","Szimulációs pontosság","Precisione simulazione","シミュレーションの正確さ","시뮬레이션 정확도","Genauigkeit der Simulation","Dokładność symulacji","A precisão da simulação","Точность моделирования","模擬精準度","模拟真实度","Simulation accuracy","Simülasyon doğruluğu","Точність симуляції","Přesnost simulace","","" "General.Dropdown.Option:Very low","Sehr niedrig","Very low","Muy bajo","Très basse","Nagyon alacsony","Molto basso","とても低い","매우 낮음","Zeer laag","Bardzo niska","Muito Baixa","Очень медленно","非常低","非常低","Very low","En düşük","Дуже низька","Velmi nízká","","" "General.Dropdown.Option:Low","Niedrig","Low","Bajo","Basse","Alacsony","Basso","低い","낮음","Laag","Niska","Baixa","Замедленное","低","低","Low","Düşük","Низька","Nízká","","" @@ -115,30 +115,33 @@ "General.Dropdown.Option:Very high","Sehr hoch","Very high","Muy alto","Très haute","Nagyon magas","Molto alto","とても高い","매우 높음","Zeer hoog","Bardzo wysoka","Muito Alta","Очень высоко","非常高","非常高","Very high","En yüksek","Дуже висока","Velmi vysoká","","" "Shortcut.Modifier:Shift","Shift","Shift","","Raccourci Modificateur: Maj ""Maj"" à utiliser dans les raccourcis clavier de type ""Maj + Clic"" -Fichier: TM: PE - Options de Mod","Shift","","","","Shift","Shift","","Shift","","Shift","Shift","","Shift","Shift","","" +Fichier: TM: PE - Options de Mod","Shift","","","","Shift","Shift","","Shift","Shift","Shift","Shift","","Shift","Shift","","" "Shortcut.Modifier:Ctrl","Ctrl","Ctrl","","Raccourci Modificateur: Ctrl ""Ctrl"" à utiliser dans les raccourcis clavier de type ""Maj + Clic"" -Fichier: TM: PE - Options de Mod","Ctrl","","","","Ctrl","Ctrl","","Ctrl","","Ctrl","Ctrl","","Ctrl","Ctrl","","" +Fichier: TM: PE - Options de Mod","Ctrl","","","","Ctrl","Ctrl","","Ctrl","Ctrl","Ctrl","Ctrl","","Ctrl","Ctrl","","" "Shortcut.Modifier:Alt","Alt","Alt","","Raccourci Modificateur: Alt «Alt» à utiliser dans les raccourcis clavier de type «Alt + clic» -Fichier: TM: PE - Options de Mod","Alt","","","","Alt","Alt","","Alt","","Alt","Alt","","Alt","Alt","","" +Fichier: TM: PE - Options de Mod","Alt","","","","Alt","Alt","","Alt","Alt","Alt","Alt","","Alt","Alt","","" "Shortcut:Click","Linke Maustaste","Click","","Raccourci: Clic ""Clic"" représente le clic gauche de la souris, à utiliser dans les raccourcis clavier de style ""Maj + Click"" -Fichier: TM: PE - Options de Mod","Klikk","","","","Klik","Klik","","Клик","","鼠标左键","Click","","Клік","Klik","","" +Fichier: TM: PE - Options de Mod","Klikk","","","","Klik","Klik","","Клик","滑鼠左鍵","鼠标左键","Click","","Клік","Klik","","" "Shortcut:RightClick","Rechte Maustaste","Right Click","","Raccourci: Clic droit Raccourci: Clic droit ""Clic droit"" à utiliser dans les raccourcis clavier ""Maj + Clic droit"", représente le clic droit de la souris -Fichier: TM: PE - Options du Mod","Jobb klikk","","","","","PPM","","Правый Клик","","鼠标右键","Right Click","","Правий Клік","Pravé tlačítko","","" +Fichier: TM: PE - Options du Mod","Jobb klikk","","","","Rechtermuisklik","PPM","","Правый Клик","滑鼠右鍵","鼠标右键","Right Click","","Правий Клік","Pravé tlačítko","","" "Shortcut:MiddleClick","Mittlere Maustaste","Middle Click","","Raccourci: Clic du bouton du milieu de la souris Raccourci: Clic du bouton du milieu de la souris ""Clic du bouton du milieu de la souris"" à utiliser dans les raccourcis clavier de style ""Maj + Clic bouton du milieu de la souris"", représente le clic du bouton du milieu de la souris -Fichier: TM: PE - Options du Mod","Középső egérgomb","","","","","ŚPM","","Средний Клик","","鼠标中键","Middle Click","","Середній Клік","Prostřední tlačítko","","" +Fichier: TM: PE - Options du Mod","Középső egérgomb","","","","Middelste muisklik","ŚPM","","Средний Клик","滑鼠中鍵","鼠标中键","Middle Click","","Середній Клік","Prostřední tlačítko","","" "Keybind.Esc:Cancel tool","Das Tool verlassen und TM:PE verstecken","Exit the tool and hide TM:PE","","Keybind.Esc : Annuler l'outil Affiché dans les indications du clavier comme : ""Échapper (Esc) quitte l'outil actuel et masque TM: PE"" -Fichier: TMPE - Options du Mod","Kilépés az eszközből","","","","","Wyjdź i ukryj menu TM:PE","","Покинуть текущий режим и закрыть меню TM:PE","","","Exit the tool and hide TM:PE","","Скасувати поточний режим та закрити панель TM:PE","Ukončit současný nástroj a schovat Traffic Manager","","" -"Keybind.RightClick:Leave node","","Leave the selected node","","Keybin.Click droit : Quitte l'outil noeud +Fichier: TMPE - Options du Mod","Kilépés az eszközből","","","","Verlaat de tool en verberg TM:PE","Wyjdź i ukryj menu TM:PE","","Покинуть текущий режим и закрыть меню TM:PE","結束此工具並隱藏 TM:PE","","Exit the tool and hide TM:PE","","Скасувати поточний режим та закрити панель TM:PE","Ukončit současný nástroj a schovat Traffic Manager","","" +"Keybind.RightClick:Leave node","Rechtsklick: Ausgewähltes Segment verlassen","Leave the selected node","","Keybin.Click droit : Quitte l'outil noeud Affiché comme ""Click droit - Laisser le nœud sélectionné"" -Fichier: TM: PE - Option du mod","","","","","","Odznacz wybrany węzeł","","Покинуть выбранный перекрёсток или узел","","","Leave the selected node","","Залишити обране перехрестя або вузол","Pravé kliknutí zruší výběr zvoleného uzlu","","" +Fichier: TM: PE - Option du mod","","","","","Verlaat het geselecteerde punt","Odznacz wybrany węzeł","","Покинуть выбранный перекрёсток или узел","留下選取的節點","","Leave the selected node","","Залишити обране перехрестя або вузол","Pravé kliknutí zruší výběr zvoleného uzlu","","" "Keybind.RightClick:Leave segment","Das ausgewählte Segment verlassen","Leave the selected segment","","Keybind. Clicdroit : Quitter le segment Affiché comme ""Clic droit, laisser le segment sélectionné"" -Fichier: TM: PE - Options du Mod","","","","","","Odznacz wybrany segment","","Покинуть выбранный сегмент дороги","","","Leave the selected segment","","Залишити обраний сегмент шляху","Pravé kliknutí zruší výběr zvoleného segmentu","","" +Fichier: TM: PE - Options du Mod","","","","","Verlaat segment","Odznacz wybrany segment","","Покинуть выбранный сегмент дороги","留下選取的部分","","Leave the selected segment","","Залишити обраний сегмент шляху","Pravé kliknutí zruší výběr zvoleného segmentu","","" +"Keybind.RightClick:Leave lane","","Leave selected lane","","LienClé. Clic droit : Quitter la voie de circulation ou d'intersection +Laisser la voie de circulation ou d'intersection sélectionnée +Fichier: TM: PE - Options du Mod","","","選択した車線をそのままにする","","","Odznacz wybrany pas","","Покинуть режим редактирования полосы","","","Leave selected lane","","Залишити обрану смугу руху","Opustit pruh","","" diff --git a/TLM/TLM/Resources/Translations/ParkingRestrictions.csv b/TLM/TLM/Resources/Translations/ParkingRestrictions.csv index 14b3d3d6a..a7d872a96 100644 --- a/TLM/TLM/Resources/Translations/ParkingRestrictions.csv +++ b/TLM/TLM/Resources/Translations/ParkingRestrictions.csv @@ -1 +1,7 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th" +"Parking.OnscreenHint.Mode:Click to toggle","Zum Umschalten klicken","Click icons to toggle parking ban","","Aire de Stationnement. Conseil à l'écran. Mode : Cliquez pour basculer +S'affiche lorsque l'outil de l'aire de stationnement est actif, invitant l'utilisateur à cliquer sur certaines icônes de restrictions +Fichier : TM: PE - Outil - Restrictions de l'aire de stationnement","","","","","Klik op de parkeerpictogrammen om parkeren aan of uit te schakelen","Kliknij ikony aby wł/wył zakaz parkowania na wybranym odcinku","","Нажимайте на значки парковки для переключения","","","Click icons to toggle parking ban","","Натискайте на знаки паркування для заборони або дозволу","Zobrazuje se, když je nástroj pro parkování aktivní, a vyzve uživatele k kliknutí na některá omezení ikon","","" +"Parking.ShiftClick:Apply to entire road","","Apply restrictions to entire road","","Aire de Stationnement. Shift Click : Appliquer toute la route +Astuce à l'écran pour Maj + clic : Appliquer l'action à toute la route (étirer entre deux intersections) +Fichier: TM: PE - Outil - Restrictions de stationnement","","","道路全体に制限を適用する","","","Zastosuj do całej drogi","","Применить к участку дороги (между перекрёстками)","","","Apply restrictions to entire road","","Застосувати до всієї дороги (між перехрестями)","Nápověda na obrazovce pro Shift+Click: Použijte akci na celou silnici (úsek mezi dvěma křižovatkami)","","" diff --git a/TLM/TLM/Resources/Translations/PrioritySigns.csv b/TLM/TLM/Resources/Translations/PrioritySigns.csv index 14b3d3d6a..1f71b8293 100644 --- a/TLM/TLM/Resources/Translations/PrioritySigns.csv +++ b/TLM/TLM/Resources/Translations/PrioritySigns.csv @@ -1 +1,16 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th" +"Prio.OnscreenHint.Mode:Select","Auswählen","Choose a junction to edit","","Priorité. Conseil à l'écran. Mode : Sélectionnez +S'affiche lorsque l'outil des Signes Prioritaires est actif, invitant l'utilisateur à cliquer sur un nœud, un carrefour ou une jonction +Fichier : TM: PE - Outil - Signes prioritaires","","","","","","Wybierz skrzyżowanie, aby edytować","","Выберите перекрёсток или узел дороги","","","Choose a junction to edit","","Оберіть перехрестя або вузол шляху","Zobrazí se, když je aktivní nástroj Prio Signs, což uživatele vyzve ke kliknutí na některý uzel","","" +"Prio.OnscreenHint.Mode:Edit","Bearbeiten","Click circles or signs to toggle","","Priorité. Astuce à l'écran. Mode : Modifier +S'affiche lorsque l'outil des Signes Prioritaires est actif et qu'un nœud, un carrefour ou une jonction est sélectionné, suggérant que l'utilisateur peut désormais modifier les signes prioritaires +Fichier : TM: PE - Outil - Signes prioritaires","","","","","","Kliknij w wybrany okrąg lub znak aby zmieniać ustawienie","","Нажимайте на значки приоритета для переключения","","","Click circles or signs to toggle","","Натискайте знаки приорітету для внесення змін","Zobrazí se, když je aktivní nástroj Prio Signs a je vybrán nějaký uzel, což naznačuje, že uživatel může nyní upravovat značky","","" +"Prio.Click:Quick setup prio road/roundabout","Vorfahrtsstraße/Kreisverkehr schnell einrichten","Quick setup priority road/roundabout","","Priorité. Cliquez sur : Route/Rond-point prioritaire à configuration rapide +Cliquez sur l'action de l'outil de signalisation prioritaire : Configuration rapide route/rond-point prioritaire +Fichier : TM: PE - Outil - Signes prioritaires","","","","","Snelle setup voor prioritaire wegen/rotondes","Szybka konfiguracja drogi/ronda","","Быстрая настройка приоритетной дороги или круга","","","Quick setup priority road/roundabout","","Швидке створення пріоритетної дороги або кола","Rychlé nastavení hlavní silnice / kruhového objezdu","","" +"Prio.Click:Quick setup high prio road/roundabout","Vorfahrtsstraße/Kreisverkehr mit hoher Priorität schnell einrichten","Quick setup high priority road/roundabout","","Priorité. Cliquez : Configuration rapide route/rond-point à circulation dense +Cliquez sur l'action sur la jonction dans l'outil Signalisation prioritaire: Configuration rapide de route prioritaire ou de rond-point +Fichier : TM: PE - Outil - Signes prioritaires","","","","","Snelle setup voor hoog prioritaire wegen/rotondes","Szybka konfiguracja drogi/ronda o wysokim priorytecie","","Быстрая настройка высокоприоритетной дороги/круга","","","Quick setup high priority road/roundabout","","Швидке створення високоприорітетної дороги/кола","Rychlé nastavení vysoké prioritní silnice / kruhového objezdu","","" +"Prio.Click:Quick setup prio junction","Vorfahrtsregeln an der Kreuzung schnell einrichten","Quick setup priority junction","","Priorité. Cliquez sur : Jonction prioritaire de configuration rapide de route/rond-point +Cliquez sur l'action dans l'outil Signes prioritaires : configuration rapide d'une jonction prioritaire +Fichier : TM: PE - Outil - Signes prioritaires","","","","","Snelle setup voor een prioriteits-knooppunt","Szybka konfiguracja skrzyżowania z priorytetem ruchu","","Быстрая настройка приоритетного перекрёстка","","","Quick setup priority junction","","Створення приорітетного перехрестя","Rychlé nastavení hlavní silnice","","" diff --git a/TLM/TLM/Resources/Translations/SpeedLimits.csv b/TLM/TLM/Resources/Translations/SpeedLimits.csv index ca3082c54..d05a77724 100644 --- a/TLM/TLM/Resources/Translations/SpeedLimits.csv +++ b/TLM/TLM/Resources/Translations/SpeedLimits.csv @@ -13,5 +13,5 @@ "Defaults.Label:Road type","Straßentyp","Road type","Tipo de carretera","Type de route","Út típusa","Tipo di strada","道路の種類","도로 유형","Wegtype","Typ drogi","Tipo de pista","Тип дороги","道路類型","道路类型","Road type","Yol tipi","Тип дороги","Typ cesty","","" "Button:Save & Apply","Anwenden","Apply","Guadar y Aplicar","Appliquer","Alkalmaz","Applica","適用","적용","Toepassen","Zastosuj","Aplicar","Применить","儲存並套用","应用","Apply","Uygula","Зберегти і застосувати","Uložit a použít","","" "Checkbox:Show lane-wise speed limits","Zeige spurweise Geschwindigkeitsbeschränkungen","Show lane-wise speed limits","Mostrar límite de velocidad en el carril","Afficher les limites de vitesse par voie","Mutassa meg a sáv szerinti sebességkorlátozásokat","Mostra i limiti di velocità per ogni corsia","車線毎の制限速度を表示する","차선별 속도 제한 표시","Toon rijstrookspecifieke snelheidslimieten","Pokaż limity prędkości dla pasów","Mostrar limites de velocidade por faixa.","Показывать ограничения по каждой полосе","顯示車道速限","显示各车道道路限速设置","Show lane-wise speed limits","Şerite göre azami hızları göster","Показувати обмеження в кожній смузі","Zobrazit limit rychlosti pro jízdní pruhy","","" -"Checkbox:Apply to entire road","Auf gesamte Straße anwenden","Apply to entire road","","Appliquer à toute la route","Alkalmazás a teljes útra","Applica a tutta la strada","道路全体に適用","도로 전체에 적용","Pas op het gehele weg toe","Zastosuj dla całej drogi","Aplica a toda a rua","Применить к целой дороге","","","Apply to entire road","Tüm yola uygula","Застосувати до всієї вулиці","Nastavit pro celou silnici","","" -"Button:Default","Standard","Default","","Bouton : Défault","Alapbeállítás","Impostazione predefinita","デフォルト","기본값","Standaard","Domyślne","Padrão","По умолчанию","","默认","Default","Varsayılan","По замовчанню","Výchozí","","" +"Checkbox:Apply to entire road","Auf gesamte Straße anwenden","Apply to entire road","","Appliquer à toute la route","Alkalmazás a teljes útra","Applica a tutta la strada","道路全体に適用","도로 전체에 적용","Pas op het gehele weg toe","Zastosuj dla całej drogi","Aplica a toda a rua","Применить к целой дороге","套用到整個路段","","Apply to entire road","Tüm yola uygula","Застосувати до всієї вулиці","Nastavit pro celou silnici","","" +"Button:Default","Standard","Default","","Bouton : Défault","Alapbeállítás","Impostazione predefinita","デフォルト","기본값","Standaard","Domyślne","Padrão","По умолчанию","預設值","默认","Default","Varsayılan","По замовчанню","Výchozí","","" diff --git a/TLM/TLM/Resources/Translations/TrafficLights.csv b/TLM/TLM/Resources/Translations/TrafficLights.csv index 06320fd43..4bd3cf837 100644 --- a/TLM/TLM/Resources/Translations/TrafficLights.csv +++ b/TLM/TLM/Resources/Translations/TrafficLights.csv @@ -56,3 +56,15 @@ "TTL.Label.Format:Segment {0}","Segment {0}","Segment {0}","Segmento {0}","Segment {0}","szegmens {0}","Segmento {0}","道路 {0}","세그먼트 {0}","Segment {0}","Segment {0}","Segmento {0}","Сегмент {0}","路段 {0}","路段 {0}","Segment {0}","Boğum {0}","Сегмент {0}","Segment {0}","","" "Dialog.Text:Auto TL create failed because","Zeitgesteuerte Ampel konnte nicht automatisch erstellt werden, weil","Failed to create TTL because","","La création automatique de feux a échoué car","Automatikus jelzőlámpa nem adható hozzá, mert","La creazione dei semafori è fallita perché","TTLを作成できませんでした","신호등 시간표를 생성하지 못함:","Auto TL aanmaken mislukt omdat","Nie udało sie utworzyć Sygnalizacji czasowej ponieważ","A criação automática de semáforos falhou porque","Не удалось создать светофор с таймером автоматически, потому что","建立自動化號誌失敗,因為","创建<定时红绿灯>失败, 原因:","Failed to create TTL because","STI oluşturma başarısız oldu çünkü","Не вдалося створити світлофор з таймером автоматично, тому що","Selhalo vytvoření časového semaforu z důvodu","","" "Dialog.Text:Auto TL no need","Schnelleinrichtung wird nicht unterstützt","Quick-setup is not supported","","Création automatique de feux inutile","Nincs szükség automatikus jelzőlámpára","La configurazione rapida non è supportata","クイックセットアップはサポートされていません","빠른 설정이 지원되지 않습니다","Auto TL niet nodig","wybrane skrzyżowanie go nie potrzebuje.","Não é necessária a criação de semáforos","нет потребности в светофоре на этом перекрёстке","不需自動化號誌","不支持使用<快速设置>","Quick-setup is not supported","Hızlı kurulum desteklenmiyor","немає потреби в такому світлофорі на цьому перехресті","Rychlé nastavení není k dispozici","","" +"ManualTL.Mode:Select","Auswählen","Choose a junction to perform manual traffic light control","","ManuelTL. Mode : Sélectionnez +S'affiche lorsque l'outil de feux de signalisation manuels est allumé, demandant à l'utilisateur de sélectionner une jonction ou un carrefour +Fichier : TM: PE - Outil - Feux de signalisation","","","","","","Wybierz skrzyżowanie, aby ręcznie zarządzać sygnalizacją świetlną","","Выберите перекрёсток","","","Choose a junction to perform manual traffic light control","","Оберіть перехрестя для редагування","Zvolit","","" +"ManualTL.Mode:Edit","Bearbeiten","Click controls to set traffic light state","","ManuelTL. Mode : Modifier +S'affiche lorsque l'outil de feux de signalisation manuel est en mode édition, suggérant que l'utilisateur peut maintenant modifier certains paramètres sur les feux de circulation +Fichier : TM: PE - Outil - Feux de signalisation","","","","","","Kliknij kontrolkę, aby zmienić stan sygnalizatora","","Создайте или настройте систему светофоров","","","Click controls to set traffic light state","","Змінюйте параметри світлофору","Upravit","","" +"ToggleTL.Mode:Click to toggle","Zum Umschalten klicken","Click junctions to toggle traffic lights","","BasculeTL. Mode : Cliquez pour basculer +S'affiche lorsque l'outil de Basculement des Feux de Circulation est activé +Fichier: TM: PE - Outil - Feux de signalisation","","","","","Klik op knooppunten om verkeerslichten in- of uit te schakelen","Kliknij na wybranym skrzyżowaniu aby wł/wył sygnalizację świetlną","","Нажмите на перекрёсток для переключения светофора","","","Click junctions to toggle traffic lights","","Натискайте на перехрестя для переключення світлофору","Klikněte pro přepnutí","","" +"TimedTL.CtrlClick:Quick setup","","Quick setup","","FSChronométrés. CtrlClick : Configuration rapide +Affiché avec l'indication à l'écran ""Ctrl + clic Configuration rapide"" +Fichier: TM: PE - Outil - Feux de signalisation/circulation","","","","","","Szybka konfiguracja","","Быстрая настройка светофора с таймером","","","Quick setup","","Швидке створення світлофору з таймером","Zobrazí se spolu s nápovědou na obrazovce ""Ctrl+Click Quick setup""","","" diff --git a/TLM/TLM/Resources/Translations/VehicleRestrictions.csv b/TLM/TLM/Resources/Translations/VehicleRestrictions.csv index 05cacb305..881aa8a45 100644 --- a/TLM/TLM/Resources/Translations/VehicleRestrictions.csv +++ b/TLM/TLM/Resources/Translations/VehicleRestrictions.csv @@ -4,3 +4,12 @@ "Button:Allow all vehicles","Erlaube alle Fahrzeuge","Allow all vehicles","Permitir a todos los vehículos","Autoriser tous les véhicules","Minden jármű engedélyezése","Permetti l'accesso a tutti i veicoli","全車両を許可","모든 차량 허가","Sta alle voertuigen toe","Zezwól dla wszystkich pojazdów","Permitir todos os veículos","Разрешить всему транспорту","通行所有車種","允许所有车种通行","Allow all vehicles","Tüm taşıtlara izin ver","Дозволити всім","Povolit všechny vozidla","","" "Button:Ban all vehicles","Verbiete alle Fahrzeuge","Ban all vehicles","Prohibir a todos los vehículos","Interdire tous les véhicules","Minden járművet tiltsa le","Bandisci tutti i veicoli","全車両を禁止","모든 차량 금지","Verbied alle voertuigen","Zablokuj dla wszystkich pojazdów","Proibir todos os veículos","Запретить всему транспорту","禁行所有車種","禁止所有车种通行","Ban all vehicles","Tüm taşıtları yasakla","Заборонити всім","Zakázat všechny vozidla","","" "Button:Apply to entire road","Wende Fahrzeugbeschränkungen auf alle Straßensegmente zwischen zwei Kreuzungen an","Apply vehicle restrictions to entire road","Aplicar restricción vehicular a todas los segmentos de calle entre dos cruces","Appliquer les restrictions de véhicules à tous les segments de route entre deux intersections","A járművek korlátozásait kell alkalmazni az összes útszakaszra két kereszteződés között","Applica le restrizioni a tutta la strada","交差点間の全道路に車両規制を適用","두 교차로 구간에 동일한 차량 제한 적용","Pas voertuigbeperkingen toe op alle wegsegmenten tussen twee kruisingen","Zastosuj ograniczenia ruchu pojazdów do wszystkich segmentów drogi pomiędzy dwoma skrzyżowaniami","Aplicar restrições de veículos para todos os segmentos de estrada entre dois cruzamentos","Применить на участок дороги между перекрёстками","對兩個路口間的全部路段套用車種限定","应用车种限制设置至两个路口之间所有路段","Apply vehicle restrictions to entire road","Taşıt kısıtlamalarını tüm yola uygula","Застосувати до всієї дороги між перехрестями","Nastavit omezení pro celou silnici","","" +"VR.OnscreenHint.Mode:Select segment","Segment auswählen","Choose a segment to edit","","RV. Conseil à l'écran. Mode : Sélectionnez un segment +S'affiche lorsque l'outil Restrictions du Véhicule est actif, demandant à l'utilisateur de sélectionner un segment à modifier +Fichier : TM: PE - Outils - Restrictions concernant les Véhicules","","","","","Selecteer een segment om te bewerken","Wybierz segment drogi, aby edytować","","Выберите сегмент дороги для редактирования","","","Choose a segment to edit","","Оберіть сегмент шляху","Zobrazuje se, když je aktivní nástroj Omezení vozidla s žádostí o výběr segmentu, který chcete upravit","","" +"VR.OnscreenHint.Mode:Toggle restrictions","Fahrzeugbeschränkungen ändern","Click vehicle icons to toggle restrictions","","RV. Conseil à l'écran. Mode : Basculer les restrictions +S'affiche lorsque l'outil Restrictions de véhicule a un segment sélectionné, suggérant que l'utilisateur peut maintenant cliquer sur certains signes de type de véhicule. +Fichier : TM: PE - Outils - Restrictions concernant les véhicules","","","","","Schakel beperkingen aan of uit","Kliknij na ikonę pojazdu, aby wł/wył ograniczenie","","Нажимайте на значки ограничений для переключения","","","Click vehicle icons to toggle restrictions","","Натискайте на знаки для заборони видів транспорту","Zobrazí se, když má nástroj Omezení vozidla vybrán segment, což naznačuje, že uživatel nyní může kliknout na některé značky typu vozidla","","" +"VR.Label:Revert to default","","Revert to default","","RV. Label : Rétablir la valeur par défaut +Affiché à l'écran : Supprimer | Retour arrière par défaut +Fichier : TM: PE - Outils - Restrictions concernant les véhicules","","","","","Zet terug naar standaard","Przywróć to ustawień domyślnych","","Сбросить по умолчанию","","","Revert to default","","Скинути як було до змін","Zobrazeno v nápovědě na obrazovce: Odstranit | Návrat k výchozímu nastavení","","" diff --git a/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs b/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs index 7de8ef102..d713a9111 100644 --- a/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs +++ b/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs @@ -59,9 +59,9 @@ public class KeybindSettingsBase : UICustomControl { "Key_LaneConnector_StayInLane", SavedInputKey.Encode(KeyCode.S, control:true, shift:false, alt:false)); - public static KeybindSetting LaneConnectorDelete = new KeybindSetting( - "LaneConnector", - "Key_LaneConnector_Delete", + public static KeybindSetting RestoreDefaultsKey = new KeybindSetting( + "Global", + "Key_RestoreDefaults", SavedInputKey.Encode(KeyCode.Delete, false, false, false), SavedInputKey.Encode(KeyCode.Backspace, false, false, false)); diff --git a/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs b/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs index ee05fb2e6..0e51424b7 100644 --- a/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs +++ b/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs @@ -55,7 +55,7 @@ private void CreateUI_LaneConnector() { // First key binding is readonly (editable1=false) AddAlternateKeybindUI(Translation.Options.Get("Keybind.LaneConnector:Delete"), - LaneConnectorDelete, false, true); + RestoreDefaultsKey, false, true); } } } diff --git a/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs b/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs index feb388076..b4fe8e611 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsGameplayTab.cs @@ -167,7 +167,11 @@ private static void OnAltLaneSelectionRatioChanged(float newVal) { _altLaneSelectionRatioSlider.tooltip = Translation.Options.Get("Gameplay.Tooltip:DLS_percentage") + ": " + Options.altLaneSelectionRatio + " %"; - _altLaneSelectionRatioSlider.RefreshTooltip(); + + // Only call this if the game is running, not during the loading time + if (LoadingExtension.IsGameLoaded) { + _altLaneSelectionRatioSlider.RefreshTooltip(); + } Log._Debug($"altLaneSelectionRatio changed to {Options.altLaneSelectionRatio}"); } diff --git a/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs b/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs index 52b08a76f..5a24d29ee 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs @@ -40,9 +40,7 @@ public static class OptionsGeneralTab { private static UIDropDown _roadSignsMphThemeDropdown; private static int _roadSignMphStyleInt; - private static string T(string key) { - return Translation.Options.Get(key); - } + private static string T(string key) => Translation.Options.Get(key); internal static void MakeSettings_General(ExtUITabstrip tabStrip) { UIHelper panelHelper = tabStrip.AddTabPage(T("Tab:General")); diff --git a/TLM/TLM/U/Button/BaseUButton.cs b/TLM/TLM/U/Button/BaseUButton.cs index 61b3285ed..882675328 100644 --- a/TLM/TLM/U/Button/BaseUButton.cs +++ b/TLM/TLM/U/Button/BaseUButton.cs @@ -77,18 +77,24 @@ protected override void OnClick(UIMouseEventParameter p) { UpdateButtonImageAndTooltip(); } - // TODO: Simplify tooltip override, use this code for MainMenu buttons, and return back to the original tooltip in all other internal void UpdateButtonImageAndTooltip() { UpdateButtonImage(); + UpdateTooltip(refreshTooltip: true); + this.isVisible = IsVisible(); + this.Invalidate(); + } + + internal void UpdateTooltip(bool refreshTooltip) { // Update localized tooltip with shortcut key if available string overrideTooltip = GetTooltip(); if (!string.IsNullOrEmpty(overrideTooltip)) { this.tooltip = overrideTooltip + GetShortcutTooltip(); } - this.isVisible = IsVisible(); - this.Invalidate(); + if (refreshTooltip) { + this.RefreshTooltip(); + } } internal void UpdateButtonImage() { diff --git a/TLM/TLM/U/UIUtil.cs b/TLM/TLM/U/UIUtil.cs index 52d21c294..2058bb007 100644 --- a/TLM/TLM/U/UIUtil.cs +++ b/TLM/TLM/U/UIUtil.cs @@ -22,8 +22,9 @@ IEnumerable objects .Where(obj => obj.name == name); foreach (GameObject found in objects) { - found.gameObject.SetActive(false); - UnityEngine.Object.DestroyImmediate(found.gameObject); + found.name = $"{name}_destroyed"; + // found.gameObject.SetActive(false); + UnityEngine.Object.Destroy(found.gameObject); } toMakeUnique.name = name; diff --git a/TLM/TLM/UI/LegacySubTool.cs b/TLM/TLM/UI/LegacySubTool.cs index 64ee1a91f..e201e185d 100644 --- a/TLM/TLM/UI/LegacySubTool.cs +++ b/TLM/TLM/UI/LegacySubTool.cs @@ -148,7 +148,8 @@ public virtual void Initialize() { public virtual void Cleanup() { } - public virtual void OnActivate() { } + public virtual void OnActivate() { + } /// /// Renders current situation overlay, called while the tool is not active to assist diff --git a/TLM/TLM/UI/Localization/LookupTable.cs b/TLM/TLM/UI/Localization/LookupTable.cs index 3747e8123..92b93f164 100644 --- a/TLM/TLM/UI/Localization/LookupTable.cs +++ b/TLM/TLM/UI/Localization/LookupTable.cs @@ -2,11 +2,9 @@ // #define DUMP_TRANSLATIONS namespace TrafficManager.UI.Localization { - using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; - using System.Linq; using System.Reflection; using System.Text; using CSUtil.Commons; diff --git a/TLM/TLM/UI/MainMenu/BaseMenuButton.cs b/TLM/TLM/UI/MainMenu/BaseMenuButton.cs index 6471fa9e8..6ff613916 100644 --- a/TLM/TLM/UI/MainMenu/BaseMenuButton.cs +++ b/TLM/TLM/UI/MainMenu/BaseMenuButton.cs @@ -1,4 +1,5 @@ namespace TrafficManager.UI.MainMenu { + using System; using System.Collections.Generic; using ColossalFramework.UI; using TrafficManager.U.Button; @@ -19,13 +20,12 @@ public abstract class BaseMenuButton : BaseUButton { public override void HandleClick(UIMouseEventParameter p) { } + /// Handles click. NOTE: When overriding, call base.OnClick() last! + /// Event. protected override void OnClick(UIMouseEventParameter p) { - OnClickInternal(p); ModUI.Instance.MainMenu.UpdateButtons(); } - public abstract void OnClickInternal(UIMouseEventParameter p); - public override bool CanActivate() { return true; } diff --git a/TLM/TLM/UI/MainMenu/BaseMenuToolModeButton.cs b/TLM/TLM/UI/MainMenu/BaseMenuToolModeButton.cs index 69b795d86..6b20a2684 100644 --- a/TLM/TLM/UI/MainMenu/BaseMenuToolModeButton.cs +++ b/TLM/TLM/UI/MainMenu/BaseMenuToolModeButton.cs @@ -11,9 +11,10 @@ public abstract class BaseMenuToolModeButton : BaseMenuButton { protected override bool IsActive() => ToolMode.Equals(ModUI.GetTrafficManagerTool(false)?.GetToolMode()); - public override void OnClickInternal(UIMouseEventParameter p) { + protected override void OnClick(UIMouseEventParameter p) { ModUI.GetTrafficManagerTool() .SetToolMode(IsActive() ? ToolMode.None : ToolMode); + base.OnClick(p); } } } \ No newline at end of file diff --git a/TLM/TLM/UI/MainMenu/ClearTrafficButton.cs b/TLM/TLM/UI/MainMenu/ClearTrafficButton.cs index 4582f5ef5..34fe3a5df 100644 --- a/TLM/TLM/UI/MainMenu/ClearTrafficButton.cs +++ b/TLM/TLM/UI/MainMenu/ClearTrafficButton.cs @@ -24,7 +24,7 @@ public override void SetupButtonSkin(HashSet atlasKeys) { atlasKeys.AddRange(this.Skin.CreateAtlasKeyset()); } - public override void OnClickInternal(UIMouseEventParameter p) { + protected override void OnClick(UIMouseEventParameter p) { ConfirmPanel.ShowModal( Translation.Menu.Get("Tooltip:Clear traffic"), Translation.Menu.Get("Dialog.Text:Clear traffic, confirmation"), @@ -36,6 +36,7 @@ public override void OnClickInternal(UIMouseEventParameter p) { ModUI.GetTrafficManagerTool(true).SetToolMode(ToolMode.None); }); + base.OnClick(p); } } } diff --git a/TLM/TLM/UI/MainMenu/DespawnButton.cs b/TLM/TLM/UI/MainMenu/DespawnButton.cs index 715239bef..f499d3339 100644 --- a/TLM/TLM/UI/MainMenu/DespawnButton.cs +++ b/TLM/TLM/UI/MainMenu/DespawnButton.cs @@ -13,7 +13,11 @@ protected override string GetTooltip() => protected override bool IsVisible() => true; - protected override bool IsActive() => Options.disableDespawning; + /// + /// Button lights up on despawning enabled (easy mode). + /// Button remains dark on despawning disabled (hard mode). + /// + protected override bool IsActive() => !Options.disableDespawning; public override void SetupButtonSkin(HashSet atlasKeys) { // Button backround (from BackgroundPrefix) is provided by MainMenuPanel.Start @@ -27,10 +31,17 @@ public override void SetupButtonSkin(HashSet atlasKeys) { atlasKeys.AddRange(this.Skin.CreateAtlasKeyset()); } - public override void OnClickInternal(UIMouseEventParameter p) { + protected override void OnClick(UIMouseEventParameter p) { // Immediately unclick the tool button, but toggle the option ModUI.GetTrafficManagerTool(true).SetToolMode(ToolMode.None); + + // Toggle the despawning value OptionsGameplayTab.SetDisableDespawning(!Options.disableDespawning); + + // Update currently visible tooltip + this.UpdateTooltip(refreshTooltip: true); + this.UpdateButtonImage(); + // do not call base -- base.OnClick(p); } } } diff --git a/TLM/TLM/UI/MainMenu/MainMenuWindow.cs b/TLM/TLM/UI/MainMenu/MainMenuWindow.cs index 642783cb8..79a301964 100644 --- a/TLM/TLM/UI/MainMenu/MainMenuWindow.cs +++ b/TLM/TLM/UI/MainMenu/MainMenuWindow.cs @@ -256,6 +256,9 @@ private void SetupControls_OnscreenDisplayPanel(UiBuilder builde p.atlas = TextureUtil.FindAtlas("Ingame"); p.backgroundSprite = "GenericPanel"; p.color = new Color32(64, 64, 64, 240); + p.opacity = GlobalConfig.Instance.Main.KeybindsPanelVisible + ? 1f + : 0f; })) { osdBuilder.SetPadding(UConst.UIPADDING); @@ -264,8 +267,8 @@ private void SetupControls_OnscreenDisplayPanel(UiBuilder builde UResizerConfig.From(osdBuilder.Control).ContributeToBoundingBox = false; this.OnscreenDisplayPanel = osdBuilder.Control; - bool keybindsVisible = GlobalConfig.Instance.Main.KeybindsPanelVisible; - this.OnscreenDisplayPanel.gameObject.SetActive(keybindsVisible); + // bool keybindsVisible = GlobalConfig.Instance.Main.KeybindsPanelVisible; + // this.OnscreenDisplayPanel.gameObject.SetActive(keybindsVisible); osdBuilder.ResizeFunction( r => { diff --git a/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs b/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs index 9c3000ecd..472351502 100644 --- a/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs +++ b/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs @@ -17,7 +17,9 @@ public static void Clear() { private static void Hide() { MainMenuWindow mainMenu = ModUI.Instance.MainMenu; - mainMenu.OnscreenDisplayPanel.opacity = 0f; // invisible + if (mainMenu.OnscreenDisplayPanel.GetUIView() != null) { // safety + mainMenu.OnscreenDisplayPanel.opacity = 0f; // invisible + } } /// Clear the OSD panel and display the idle hint. @@ -54,7 +56,9 @@ public static void Display(List items) { } } - if (items.Count > 0) { + if (items.Count > 0 + && mainMenu.OnscreenDisplayPanel.GetUIView() != null) + { mainMenu.OnscreenDisplayPanel.opacity = 1f; // fully visible, opaque } @@ -79,6 +83,14 @@ public static Shortcut RightClick_LeaveNode() { localizedText: Translation.Options.Get("Keybind.RightClick:Leave node")); } + /// Create OsdItem with generic "RightClick Leave lane" text. + /// New OsdItem to pass to the . + public static Shortcut RightClick_LeaveLane() { + return new Shortcut( + keybindSetting: KeybindSettingsBase.RightClick, + localizedText: Translation.Options.Get("Keybind.RightClick:Leave lane")); + } + /// Create OsdItem with generic "RightClick Leave segment" text. /// New OsdItem to pass to the . public static Shortcut RightClick_LeaveSegment() { diff --git a/TLM/TLM/UI/MainMenu/ParkingRestrictionsButton.cs b/TLM/TLM/UI/MainMenu/ParkingRestrictionsButton.cs index 784a4f62b..0143562e2 100644 --- a/TLM/TLM/UI/MainMenu/ParkingRestrictionsButton.cs +++ b/TLM/TLM/UI/MainMenu/ParkingRestrictionsButton.cs @@ -19,9 +19,7 @@ public override void SetupButtonSkin(HashSet atlasKeys) { atlasKeys.AddRange(this.Skin.CreateAtlasKeyset()); } - protected override string GetTooltip() => - Translation.Menu.Get("Tooltip:Parking restrictions") + "\n" + - "[Shift]: " + Translation.Menu.Get("Tooltip.Keybinds:Parking restrictions"); + protected override string GetTooltip() => Translation.Menu.Get("Tooltip:Parking restrictions"); protected override bool IsVisible() => IsButtonEnabled(); diff --git a/TLM/TLM/UI/MainMenu/PrioritySignsButton.cs b/TLM/TLM/UI/MainMenu/PrioritySignsButton.cs index fe35b623e..10578f538 100644 --- a/TLM/TLM/UI/MainMenu/PrioritySignsButton.cs +++ b/TLM/TLM/UI/MainMenu/PrioritySignsButton.cs @@ -20,9 +20,7 @@ public override void SetupButtonSkin(HashSet atlasKeys) { atlasKeys.AddRange(this.Skin.CreateAtlasKeyset()); } - protected override string GetTooltip() => - Translation.Menu.Get("Tooltip:Add priority signs") + "\n" + - Translation.Menu.Get("Tooltip.Keybinds:Add priority signs"); + protected override string GetTooltip() => Translation.Menu.Get("Tooltip:Add priority signs"); public override KeybindSetting GetShortcutKey() => KeybindSettingsBase.PrioritySignsTool; diff --git a/TLM/TLM/UI/MainMenu/TimedTrafficLightsButton.cs b/TLM/TLM/UI/MainMenu/TimedTrafficLightsButton.cs index 908a6d35d..17cf348e4 100644 --- a/TLM/TLM/UI/MainMenu/TimedTrafficLightsButton.cs +++ b/TLM/TLM/UI/MainMenu/TimedTrafficLightsButton.cs @@ -19,9 +19,7 @@ public override void SetupButtonSkin(HashSet atlasKeys) { atlasKeys.AddRange(this.Skin.CreateAtlasKeyset()); } - protected override string GetTooltip() => - Translation.Menu.Get("Tooltip:Timed traffic lights") + "\n" + - Translation.Menu.Get("Tooltip.Keybinds:Auto TL"); + protected override string GetTooltip() => Translation.Menu.Get("Tooltip:Timed traffic lights"); protected override bool IsVisible() => IsButtonEnabled(); diff --git a/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs b/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs index ce628e86f..2dc7e7f49 100644 --- a/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs +++ b/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs @@ -2,21 +2,29 @@ namespace TrafficManager.UI.SubTools { using ColossalFramework; using CSUtil.Commons; using System.Collections.Generic; - using TrafficManager.API.Manager; using TrafficManager.Manager.Impl; using TrafficManager.State.ConfigData; using TrafficManager.State; - using TrafficManager.UI.Textures; using UnityEngine; using TrafficManager.State.Keybinds; using TrafficManager.UI.SubTools.PrioritySigns; using TrafficManager.Util; using static TrafficManager.Util.Shortcuts; using TrafficManager.UI.Helpers; + using TrafficManager.UI.MainMenu.OSD; - public class JunctionRestrictionsTool : LegacySubTool { + public class JunctionRestrictionsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { private readonly HashSet currentRestrictedNodeIds; - private bool overlayHandleHovered; + + /// + /// Set to true in render, if any of the overlay clickable icons has mouse in them. + /// + private bool isAnyOverlayHandleHovered; + + private readonly float junctionRestrictionsSignSize = 80f; public JunctionRestrictionsTool(TrafficManagerTool mainTool) : base(mainTool) { @@ -24,13 +32,8 @@ public JunctionRestrictionsTool(TrafficManagerTool mainTool) } public override void OnToolGUI(Event e) { - // if (SelectedNodeId != 0) { - // overlayHandleHovered = false; - // } - // ShowSigns(false); - // handle delete - if (KeybindSettingsBase.LaneConnectorDelete.KeyDown(e)) { + if (KeybindSettingsBase.RestoreDefaultsKey.KeyDown(e)) { netService.IterateNodeSegments( SelectedNodeId, (ushort segmmentId, ref NetSegment segment) => { @@ -66,13 +69,13 @@ public override void ShowGUIOverlay(ToolMode toolMode, bool viewOnly) { } if (SelectedNodeId != 0) { - overlayHandleHovered = false; + isAnyOverlayHandleHovered = false; } - ShowSigns(viewOnly); + ShowGUIOverlay_ShowSigns(viewOnly); } - private void ShowSigns(bool viewOnly) { + private void ShowGUIOverlay_ShowSigns(bool viewOnly) { #if DEBUG bool logJunctions = !viewOnly && DebugSwitch.JunctionRestrictions.Get(); #else @@ -126,7 +129,7 @@ private void ShowSigns(bool viewOnly) { } } - overlayHandleHovered = handleHovered; + isAnyOverlayHandleHovered = handleHovered; if (updatedNodeId != 0) { RefreshCurrentRestrictedNodeIds(updatedNodeId); @@ -143,7 +146,7 @@ public override void OnPrimaryClickOverlay() { return; } - if (overlayHandleHovered) { + if (isAnyOverlayHandleHovered) { return; } @@ -154,6 +157,7 @@ public override void OnPrimaryClickOverlay() { } SelectedNodeId = HoveredNodeId; + MainTool.RequestOnscreenDisplayUpdate(); // prevent accidential activation of signs on node selection (TODO [issue #740] improve this !) MainTool.CheckClicked(); @@ -161,11 +165,14 @@ public override void OnPrimaryClickOverlay() { public override void OnSecondaryClickOverlay() { SelectedNodeId = 0; + MainTool.RequestOnscreenDisplayUpdate(); } public override void OnActivate() { + base.OnActivate(); Log._Debug("LaneConnectorTool: OnActivate"); SelectedNodeId = 0; + MainTool.RequestOnscreenDisplayUpdate(); RefreshCurrentRestrictedNodeIds(); } @@ -207,5 +214,30 @@ private void RefreshCurrentRestrictedNodeIds(ushort forceNodeId = 0) { } } } - } + + private static string T(string key) => Translation.JunctionRestrictions.Get(key); + + public void UpdateOnscreenDisplayPanel() { + if (SelectedNodeId == 0) { + // Select mode + var items = new List(); + items.Add(new UI.MainMenu.OSD.ModeDescription(T("JR.OnscreenHint.Mode:Select"))); + OnscreenDisplay.Display(items); + } else { + // Edit mode + var items = new List(); + items.Add(new UI.MainMenu.OSD.ModeDescription(T("JR.OnscreenHint.Mode:Edit"))); + items.Add( + new UI.MainMenu.OSD.Shortcut( + keybindSetting: KeybindSettingsBase.RestoreDefaultsKey, + localizedText: T("JR.OnscreenHint.Reset:Reset to default"))); + + items.Add(OnscreenDisplay.RightClick_LeaveNode()); + OnscreenDisplay.Display(items); + } + + // Default: no hint + // OnscreenDisplay.Clear(); + } + } // end class } \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs index bf392572b..6a06e1e79 100644 --- a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs +++ b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs @@ -70,9 +70,7 @@ public LaneArrowTool(TrafficManagerTool mainTool) fsm_ = new Util.GenericFsm(State.Select); } - private static string T(string key) { - return Translation.LaneRouting.Get(key); - } + private static string T(string key) => Translation.LaneRouting.Get(key); /// /// Creates FSM ready to begin editing. Or recreates it when ESC is pressed @@ -404,7 +402,7 @@ public override void UpdateEveryFrame() { return; } - if (Event.current.type == EventType.KeyDown && KeybindSettingsBase.LaneConnectorDelete.IsPressed(Event.current)) { + if (Event.current.type == EventType.KeyDown && KeybindSettingsBase.RestoreDefaultsKey.IsPressed(Event.current)) { OnResetToDefaultPressed(); } @@ -449,7 +447,7 @@ void IOnscreenDisplayProvider.UpdateOnscreenDisplayPanel() { var items = new List(); items.Add( item: new MainMenu.OSD.Shortcut( - keybindSetting: KeybindSettingsBase.LaneConnectorDelete, + keybindSetting: KeybindSettingsBase.RestoreDefaultsKey, localizedText: T(key: "LaneConnector.Label:Reset to default"))); items.Add(item: OnscreenDisplay.RightClick_LeaveSegment()); OnscreenDisplay.Display(items: items); diff --git a/TLM/TLM/UI/SubTools/LaneConnectorTool.cs b/TLM/TLM/UI/SubTools/LaneConnectorTool.cs index 880ebc36c..bb8a1a0cc 100644 --- a/TLM/TLM/UI/SubTools/LaneConnectorTool.cs +++ b/TLM/TLM/UI/SubTools/LaneConnectorTool.cs @@ -1,5 +1,4 @@ namespace TrafficManager.UI.SubTools { - using System; using ColossalFramework.Math; using ColossalFramework; using CSUtil.Commons; @@ -13,7 +12,6 @@ namespace TrafficManager.UI.SubTools { using UnityEngine; using TrafficManager.Util; using TrafficManager.UI.Helpers; - using TrafficManager.UI.MainMenu; using TrafficManager.UI.MainMenu.OSD; using static TrafficManager.Util.Shortcuts; using TrafficManager.UI.SubTools.PrioritySigns; @@ -127,7 +125,7 @@ public override void OnToolGUI(Event e) { // not too long ago (within 20 Unity frames or 0.33 sec) } - if (KeybindSettingsBase.LaneConnectorDelete.IsPressed(e)) { + if (KeybindSettingsBase.RestoreDefaultsKey.IsPressed(e)) { frameClearPressed = Time.frameCount; // this will be consumed in RenderOverlay() if the key was pressed @@ -957,6 +955,7 @@ public override void OnSecondaryClickOverlay() { } public override void OnActivate() { + base.OnActivate(); #if DEBUG bool logLaneConn = DebugSwitch.LaneConnections.Get(); if (logLaneConn) { @@ -1327,41 +1326,36 @@ private static readonly Color32[] COLOR_CHOICES new Color32(99, 75, 85, 255), }; - private static string T(string key) { - return Translation.LaneRouting.Get(key); - } + private static string T(string key) => Translation.LaneRouting.Get(key); + /// public void UpdateOnscreenDisplayPanel() { SelectionMode m = GetSelectionMode(); switch (m) { - // TODO: uncomment this when state machine is properly implemented and right click cancels the mode case SelectionMode.None: { var items = new List(); - items.Add( - new MainMenu.OSD.ModeDescription( - localizedText: T("LaneConnector.Mode:Select"))); + items.Add(new ModeDescription(localizedText: T("LaneConnector.Mode:Select"))); OnscreenDisplay.Display(items); return; } case SelectionMode.SelectTarget: case SelectionMode.SelectSource: { var items = new List(); - items.Add( - new MainMenu.OSD.ModeDescription( - m == SelectionMode.SelectSource - ? T("LaneConnector.Mode:Source") - : T("LaneConnector.Mode:Target"))); - items.Add( - new MainMenu.OSD.Shortcut( - keybindSetting: KeybindSettingsBase.LaneConnectorStayInLane, - localizedText: T("LaneConnector.Label:Stay in lane, multiple modes"))); - items.Add( - new MainMenu.OSD.Shortcut( - keybindSetting: KeybindSettingsBase.LaneConnectorDelete, - localizedText: T("LaneConnector.Label:Reset to default"))); - - items.Add(OnscreenDisplay.RightClick_LeaveNode()); + items.Add(new ModeDescription( + m == SelectionMode.SelectSource + ? T("LaneConnector.Mode:Source") + : T("LaneConnector.Mode:Target"))); + items.Add(new Shortcut( + keybindSetting: KeybindSettingsBase.LaneConnectorStayInLane, + localizedText: T("LaneConnector.Label:Stay in lane, multiple modes"))); + items.Add(new Shortcut( + keybindSetting: KeybindSettingsBase.RestoreDefaultsKey, + localizedText: T("LaneConnector.Label:Reset to default"))); + + items.Add(m == SelectionMode.SelectSource + ? OnscreenDisplay.RightClick_LeaveNode() + : OnscreenDisplay.RightClick_LeaveLane()); OnscreenDisplay.Display(items); return; } diff --git a/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs index 6a7b123ed..b6f05ae07 100644 --- a/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs @@ -1,4 +1,5 @@ namespace TrafficManager.UI.SubTools { + using System.Collections.Generic; using ColossalFramework; using JetBrains.Annotations; using TrafficManager.API.Manager; @@ -6,11 +7,15 @@ namespace TrafficManager.UI.SubTools { using TrafficManager.API.Traffic.Enums; using TrafficManager.API.TrafficLight; using TrafficManager.Manager.Impl; + using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; using UnityEngine; - public class ManualTrafficLightsTool : LegacySubTool { + public class ManualTrafficLightsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { private readonly int[] hoveredButton = new int[2]; private readonly GUIStyle counterStyle = new GUIStyle(); @@ -24,6 +29,7 @@ public override void OnSecondaryClickOverlay() { Cleanup(); SelectedNodeId = 0; + MainTool.RequestOnscreenDisplayUpdate(); } public override void OnPrimaryClickOverlay() { @@ -31,7 +37,9 @@ public override void OnPrimaryClickOverlay() { return; } - if (SelectedNodeId != 0) return; + if (SelectedNodeId != 0) { + return; + } TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance; TrafficPriorityManager prioMan = TrafficPriorityManager.Instance; @@ -48,24 +56,19 @@ ref Singleton.instance.m_nodes.m_buffer[ if (tlsMan.SetUpManualTrafficLight(HoveredNodeId)) { SelectedNodeId = HoveredNodeId; + MainTool.RequestOnscreenDisplayUpdate(); } - - // for (var s = 0; s < 8; s++) { - // var segment = Singleton - // .instance.m_nodes.m_buffer[SelectedNodeId].GetSegment(s); - // if (segment != 0 && - // !TrafficPriority.IsPrioritySegment(SelectedNodeId, segment)) { - // TrafficPriority.AddPrioritySegment( - // SelectedNodeId, - // segment, - // SegmentEnd.PriorityType.None); - // } - // } } else { MainTool.WarningPrompt(Translation.TrafficLights.Get("Dialog.Text:Node has timed TL script")); } } + public override void Initialize() { + base.Initialize(); + // TODO: Call this for all tools from main trafficmanager tool + MainTool.RequestOnscreenDisplayUpdate(); + } + public override void OnToolGUI(Event e) { IExtSegmentManager segMan = Constants.ManagerFactory.ExtSegmentManager; IExtSegmentEndManager segEndMan = Constants.ManagerFactory.ExtSegmentEndManager; @@ -156,8 +159,8 @@ public override void OnToolGUI(Event e) { GUI.color = guiColor; var myRect3 = new Rect( - screenPos.x - pedestrianWidth / 2 - lightWidth + 5f * zoom, - screenPos.y - pedestrianHeight / 2 + 22f * zoom, + (screenPos.x - (pedestrianWidth / 2) - lightWidth) + (5f * zoom), + (screenPos.y - (pedestrianHeight / 2)) + (22f * zoom), pedestrianWidth, pedestrianHeight); @@ -192,13 +195,13 @@ public override void OnToolGUI(Event e) { ICustomSegmentLight segmentLight = segmentLights.GetCustomLight(vehicleType); Vector3 offsetScreenPos = screenPos; - offsetScreenPos.y -= (lightHeight + 10f * zoom) * lightOffset; + offsetScreenPos.y -= (lightHeight + (10f * zoom)) * lightOffset; SetAlpha(segmentId, -1); var myRect1 = new Rect( - offsetScreenPos.x - modeWidth / 2, - offsetScreenPos.y - modeHeight / 2 + modeHeight - 7f * zoom, + offsetScreenPos.x - (modeWidth / 2), + ((offsetScreenPos.y - (modeHeight / 2)) + modeHeight) - (7f * zoom), modeWidth, modeHeight); @@ -234,7 +237,7 @@ public override void OnToolGUI(Event e) { } var infoRect = new Rect( - offsetScreenPos.x + modeWidth / 2f + + offsetScreenPos.x + (modeWidth / 2f) + (7f * zoom * (float)(numInfos + 1)) + (infoWidth * (float)numInfos), offsetScreenPos.y - (infoHeight / 2f), infoWidth, @@ -398,7 +401,7 @@ private bool RenderManualPedestrianLightSwitch(float zoom, GUI.color = guiColor; var myRect2 = new Rect( - screenPos.x - (manualPedestrianWidth / 2) - lightWidth + (5f * zoom), + (screenPos.x - (manualPedestrianWidth / 2) - lightWidth) + (5f * zoom), screenPos.y - (manualPedestrianHeight / 2) - (9f * zoom), manualPedestrianWidth, manualPedestrianHeight); @@ -497,8 +500,8 @@ private bool RenderCounter(int segmentId, uint counter = segmentLights.LastChange(); var myRectCounterNum = new Rect( - screenPos.x - counterSize + (15f * zoom) + (counter >= 10 ? -5 * zoom : 0f), - screenPos.y - counterSize + (11f * zoom), + (screenPos.x - counterSize) + (15f * zoom) + (counter >= 10 ? -5 * zoom : 0f), + (screenPos.y - counterSize) + (11f * zoom), counterSize, counterSize); @@ -529,7 +532,7 @@ private bool SimpleManualSegmentLightMode(int segmentId, var myRect4 = new Rect( - screenPos.x - (lightWidth / 2) - lightWidth - pedestrianWidth + (5f * zoom), + (screenPos.x - (lightWidth / 2) - lightWidth - pedestrianWidth) + (5f * zoom), screenPos.y - (lightHeight / 2), lightWidth, lightHeight); @@ -705,7 +708,7 @@ private bool RightForwardLSegmentLightMode(int segmentId, } else if (!hasLeftSegment) { if (!hasRightSegment) { myRect4 = new Rect( - screenPos.x - (lightWidth / 2) - lightWidth - pedestrianWidth + (5f * zoom), + (screenPos.x - (lightWidth / 2) - lightWidth - pedestrianWidth) + (5f * zoom), screenPos.y - (lightHeight / 2), lightWidth, lightHeight); @@ -1007,20 +1010,6 @@ private void RenderManualSelectionOverlay(RenderManager.CameraInfo cameraInfo) { } MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId, false, false); - - // var segment = Singleton.instance.m_segments.m_buffer[Singleton - // .instance.m_nodes.m_buffer[HoveredNodeId].m_segment0]; - // - // //if ((node.m_flags & NetNode.Flags.TrafficLights) == NetNode.Flags.None) return; - // Bezier3 bezier; - // bezier.a = Singleton.instance.m_nodes.m_buffer[HoveredNodeId].m_position; - // bezier.d = Singleton.instance.m_nodes.m_buffer[HoveredNodeId].m_position; - // - // var color = MainTool.GetToolColor(false, false); - // - // NetSegment.CalculateMiddlePoints(bezier.a, segment.m_startDirection, bezier.d, - // segment.m_endDirection, false, false, out bezier.b, out bezier.c); - // MainTool.DrawOverlayBezier(cameraInfo, bezier, color); } private void RenderManualNodeOverlays(RenderManager.CameraInfo cameraInfo) { @@ -1028,18 +1017,50 @@ private void RenderManualNodeOverlays(RenderManager.CameraInfo cameraInfo) { return; } - MainTool.DrawNodeCircle(cameraInfo, SelectedNodeId, true, false); + MainTool.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: SelectedNodeId, + warning: true, + alpha: false); } public override void Cleanup() { - if (SelectedNodeId == 0) return; + if (SelectedNodeId == 0) { + return; + } + TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance; if (!tlsMan.HasManualSimulation(SelectedNodeId)) { return; } - tlsMan.RemoveNodeFromSimulation(SelectedNodeId, true, false); + tlsMan.RemoveNodeFromSimulation( + nodeId: SelectedNodeId, + destroyGroup: true, + removeTrafficLight: false); + } + + private static string T(string key) => Translation.TrafficLights.Get(key); + + public void UpdateOnscreenDisplayPanel() { + if (SelectedNodeId == 0) { + // Select mode + var items = new List(); + items.Add(new ModeDescription(localizedText: T("ManualTL.Mode:Select"))); + OnscreenDisplay.Display(items); + } else { + // Modify traffic light settings + var items = new List(); + items.Add(new ModeDescription(localizedText: T("ManualTL.Mode:Edit"))); + items.Add(OnscreenDisplay.RightClick_LeaveNode()); + OnscreenDisplay.Display(items); + } + } + + public override void OnActivate() { + base.OnActivate(); + MainTool.RequestOnscreenDisplayUpdate(); } } } diff --git a/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs b/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs index bf8c693cd..07a5740f3 100644 --- a/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs +++ b/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs @@ -11,9 +11,13 @@ namespace TrafficManager.UI.SubTools { using TrafficManager.UI.Helpers; using static TrafficManager.Util.Shortcuts; using ColossalFramework.Math; - using CSUtil.Commons; + using ColossalFramework.UI; + using TrafficManager.UI.MainMenu.OSD; - public class ParkingRestrictionsTool : LegacySubTool { + public class ParkingRestrictionsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { private ParkingRestrictionsManager parkingManager => ParkingRestrictionsManager.Instance; private readonly Dictionary> segmentCenterByDir @@ -54,7 +58,10 @@ public ParkingRestrictionsTool(TrafficManagerTool mainTool) LastCachedCamera = new CameraTransformValue(); } - public override void OnActivate() { } + public override void OnActivate() { + base.OnActivate(); + MainTool.RequestOnscreenDisplayUpdate(); + } public override void OnPrimaryClickOverlay() { } @@ -364,5 +371,20 @@ bool LaneVisitor(SegmentLaneVisitData data) { return hoveredDirection; } + + private static string T(string key) => Translation.ParkingRestrictions.Get(key); + + public void UpdateOnscreenDisplayPanel() { + var items = new List(); + items.Add(new ModeDescription(localizedText: T("Parking.OnscreenHint.Mode:Click to toggle"))); + items.Add( + new HardcodedMouseShortcut( + button: UIMouseButton.Left, + shift: true, + ctrl: false, + alt: false, + localizedText: T("Parking.ShiftClick:Apply to entire road"))); + OnscreenDisplay.Display(items); + } } } \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs b/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs index 9e730ae1f..14b78e722 100644 --- a/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs +++ b/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs @@ -3,17 +3,25 @@ namespace TrafficManager.UI.SubTools.PrioritySigns { using System.Collections.Generic; using ColossalFramework; using CSUtil.Commons; + using static Util.SegmentTraverser; + using System.Collections.Generic; + using System; + using ColossalFramework.UI; using TrafficManager.API.Manager; using TrafficManager.API.Traffic.Data; using TrafficManager.API.Traffic.Enums; using TrafficManager.Manager.Impl; using TrafficManager.State; + using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; using UnityEngine; using static TrafficManager.Util.SegmentTraverser; - public class PrioritySignsTool : LegacySubTool { + public class PrioritySignsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { public enum PrioritySignsMassEditMode { MainYield = 0, MainStop = 1, @@ -38,6 +46,7 @@ public override void OnPrimaryClickOverlay() { return; } SelectedNodeId = 0; + MainTool.RequestOnscreenDisplayUpdate(); } // TODO provide revert/clear mode issue #568 @@ -84,7 +93,8 @@ public override void OnPrimaryClickOverlay() { } SelectedNodeId = HoveredNodeId; - Log._Debug($"PrioritySignsTool.OnPrimaryClickOverlay: SelectedNodeId={SelectedNodeId}"); + MainTool.RequestOnscreenDisplayUpdate(); + // Log._Debug($"PrioritySignsTool.OnPrimaryClickOverlay: SelectedNodeId={SelectedNodeId}"); } // update priority node cache @@ -374,6 +384,7 @@ private void ShowGUI(bool viewOnly) { if (removedNodeId != 0) { currentPriorityNodeIds.Remove(removedNodeId); SelectedNodeId = 0; + MainTool.RequestOnscreenDisplayUpdate(); } } catch (Exception e) { Log.Error(e.ToString()); @@ -432,19 +443,12 @@ private bool SetPrioritySign(ushort segmentId, bool startNode, PriorityType sign } public override void Cleanup() { - //TrafficPriorityManager prioMan = TrafficPriorityManager.Instance; - //foreach (PrioritySegment trafficSegment in prioMan.PrioritySegments) { - // try { - // trafficSegment?.Instance1?.Reset(); - // trafficSegment?.Instance2?.Reset(); - // } catch (Exception e) { - // Log.Error($"Error occured while performing PrioritySignsTool.Cleanup: {e.ToString()}"); - // } - //} } public override void OnActivate() { + base.OnActivate(); RefreshCurrentPriorityNodeIds(); + MainTool.RequestOnscreenDisplayUpdate(); } public override void Initialize() { @@ -461,12 +465,8 @@ public override void Initialize() { private bool MayNodeHavePrioritySigns(ushort nodeId) { SetPrioritySignError reason; - // Log._Debug($"PrioritySignsTool.MayNodeHavePrioritySigns: Checking if node {nodeId} - // may have priority signs."); if (!TrafficPriorityManager.Instance.MayNodeHavePrioritySigns(nodeId, out reason)) { - // Log._Debug($"PrioritySignsTool.MayNodeHavePrioritySigns: Node {nodeId} does not - // allow priority signs: {reason}"); if (reason == SetPrioritySignError.HasTimedLight) { MainTool.WarningPrompt( Translation.TrafficLights.Get("Dialog.Text:Node has timed TL script")); @@ -475,8 +475,45 @@ private bool MayNodeHavePrioritySigns(ushort nodeId) { return false; } - // Log._Debug($"PrioritySignsTool.MayNodeHavePrioritySigns: Node {nodeId} allows priority signs"); return true; } + + private static string T(string key) => Translation.PrioritySigns.Get(key); + + public void UpdateOnscreenDisplayPanel() { + if (SelectedNodeId == 0) { + // Select mode + var items = new List(); + items.Add(new ModeDescription(localizedText: T("Prio.OnscreenHint.Mode:Select"))); + items.Add( + new HardcodedMouseShortcut( + button: UIMouseButton.Left, + shift: false, + ctrl: true, + alt: false, + localizedText: T("Prio.Click:Quick setup prio junction"))); + items.Add( + new HardcodedMouseShortcut( + button: UIMouseButton.Left, + shift: true, + ctrl: false, + alt: false, + localizedText: T("Prio.Click:Quick setup prio road/roundabout"))); + items.Add( + new HardcodedMouseShortcut( + button: UIMouseButton.Left, + shift: true, + ctrl: true, + alt: false, + localizedText: T("Prio.Click:Quick setup high prio road/roundabout"))); + OnscreenDisplay.Display(items); + } else { + // Modify traffic light settings + var items = new List(); + items.Add(new ModeDescription(localizedText: T("Prio.OnscreenHint.Mode:Edit"))); + // items.Add(OnscreenDisplay.RightClick_LeaveNode()); + OnscreenDisplay.Display(items); + } + } } } diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs index 0c1790515..b0b0cfbe6 100644 --- a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs @@ -106,6 +106,7 @@ public override bool IsCursorInPanel() { } public override void OnActivate() { + base.OnActivate(); LastCachedCamera = new CameraTransformValue(); } @@ -125,19 +126,19 @@ public override void OnToolGUI(Event e) { : 8 * (GUI_SPEED_SIGN_SIZE + 5); paletteWindowRect = GUILayout.Window( - 254, - paletteWindowRect, - GuiSpeedLimitsWindow, - Translation.Menu.Get("Tooltip:Speed limits") + unitTitle, - WindowStyle); + id: 254, + screenRect: paletteWindowRect, + func: GuiSpeedLimitsWindow, + text: Translation.Menu.Get("Tooltip:Speed limits") + unitTitle, + style: WindowStyle); if (defaultsWindowVisible) { defaultsWindowRect = GUILayout.Window( - 258, - defaultsWindowRect, - GuiDefaultsWindow, - Translation.SpeedLimits.Get("Window.Title:Default speed limits"), - WindowStyle); + id: 258, + screenRect: defaultsWindowRect, + func: GuiDefaultsWindow, + text: Translation.SpeedLimits.Get("Window.Title:Default speed limits"), + style: WindowStyle); } cursorInSecondaryPanel = paletteWindowRect.Contains(Event.current.mousePosition) diff --git a/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs index 0e743820f..df5c91447 100644 --- a/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs @@ -3,6 +3,7 @@ namespace TrafficManager.UI.SubTools.TimedTrafficLights { using System.Collections.Generic; using System.Linq; using ColossalFramework; + using ColossalFramework.UI; using CSUtil.Commons; using TrafficManager.API.Manager; using TrafficManager.API.Traffic.Data; @@ -10,11 +11,15 @@ namespace TrafficManager.UI.SubTools.TimedTrafficLights { using TrafficManager.API.TrafficLight; using TrafficManager.Manager.Impl; using TrafficManager.State; + using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; using UnityEngine; - public class TimedTrafficLightsTool : LegacySubTool { + public class TimedTrafficLightsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { private TTLToolMode ttlToolMode_ = TTLToolMode.SelectNode; private readonly GUIStyle _counterStyle = new GUIStyle(); @@ -80,6 +85,7 @@ private void RefreshCurrentTimedNodeIds(ushort forceNodeId = 0) { } public override void OnActivate() { + base.OnActivate(); TrafficLightSimulationManager tlsMan = TrafficLightSimulationManager.Instance; RefreshCurrentTimedNodeIds(); @@ -92,6 +98,8 @@ public override void OnActivate() { tlsMan.TrafficLightSimulations[nodeId].Housekeeping(); } + + MainTool.RequestOnscreenDisplayUpdate(); } public override void OnSecondaryClickOverlay() { @@ -2508,8 +2516,18 @@ private void ShowGUI() { } } - private static string T(string text) { - return Translation.TrafficLights.Get(text); + private static string T(string text) => Translation.TrafficLights.Get(text); + + public void UpdateOnscreenDisplayPanel() { + var items = new List(); + items.Add( + new UI.MainMenu.OSD.HardcodedMouseShortcut( + button: UIMouseButton.Left, + shift: false, + ctrl: true, + alt: false, + localizedText: T("TimedTL.CtrlClick:Quick setup"))); + OnscreenDisplay.Display(items: items); } } // end class } diff --git a/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs index 00480451a..a5e92d3ab 100644 --- a/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs @@ -1,13 +1,18 @@ namespace TrafficManager.UI.SubTools { + using System.Collections.Generic; using ColossalFramework; using TrafficManager.API.Traffic.Enums; using TrafficManager.Manager.Impl; using TrafficManager.State; + using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util.Caching; using UnityEngine; - public class ToggleTrafficLightsTool : LegacySubTool { + public class ToggleTrafficLightsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { /// /// Stores potentially visible ids for nodes while the camera did not move /// @@ -188,5 +193,18 @@ private void FilterVisibleNodes(Vector3 camPos) { CachedVisibleNodeIds.Add(nodeId); } } + + private static string T(string key) => Translation.TrafficLights.Get(key); + + public void UpdateOnscreenDisplayPanel() { + var items = new List(); + items.Add(new ModeDescription(localizedText: T("ToggleTL.Mode:Click to toggle"))); + OnscreenDisplay.Display(items); + } + + public override void OnActivate() { + base.OnActivate(); + MainTool.RequestOnscreenDisplayUpdate(); + } } } diff --git a/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs b/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs index 3b4300f60..b531e4b3c 100644 --- a/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs +++ b/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs @@ -6,15 +6,18 @@ namespace TrafficManager.UI.SubTools { using TrafficManager.API.Traffic.Enums; using TrafficManager.Manager.Impl; using TrafficManager.State; + using TrafficManager.State.Keybinds; using TrafficManager.UI.Textures; using TrafficManager.Util; using UnityEngine; using TrafficManager.UI.Helpers; - using CSUtil.Commons; + using TrafficManager.UI.MainMenu.OSD; using static TrafficManager.Util.Shortcuts; - - public class VehicleRestrictionsTool : LegacySubTool { + public class VehicleRestrictionsTool + : LegacySubTool, + UI.MainMenu.IOnscreenDisplayProvider + { private static readonly ExtVehicleType[] RoadVehicleTypes = { ExtVehicleType.PassengerCar, ExtVehicleType.Bus, ExtVehicleType.Taxi, ExtVehicleType.CargoTruck, ExtVehicleType.Service, ExtVehicleType.Emergency @@ -55,8 +58,10 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) } public override void OnActivate() { + base.OnActivate(); cursorInSecondaryPanel = false; RefreshCurrentRestrictedSegmentIds(); + MainTool.RequestOnscreenDisplayUpdate(); } private void RefreshCurrentRestrictedSegmentIds(ushort forceSegmentId = 0) { @@ -112,11 +117,13 @@ public override void OnPrimaryClickOverlay() { SelectedSegmentId = HoveredSegmentId; currentRestrictedSegmentIds.Add(SelectedSegmentId); MainTool.CheckClicked(); // consume click. + MainTool.RequestOnscreenDisplayUpdate(); } public override void OnSecondaryClickOverlay() { if (!IsCursorInPanel()) { SelectedSegmentId = 0; + MainTool.RequestOnscreenDisplayUpdate(); } } @@ -594,5 +601,24 @@ private bool DrawVehicleRestrictionHandles(ushort segmentId, return hovered; } + + public void UpdateOnscreenDisplayPanel() { + if (SelectedSegmentId == 0) { + // Select mode + var items = new List(); + items.Add(new ModeDescription(localizedText: T("VR.OnscreenHint.Mode:Select segment"))); + OnscreenDisplay.Display(items); + } else { + // Modify traffic light settings + var items = new List(); + items.Add(new ModeDescription(localizedText: T("VR.OnscreenHint.Mode:Toggle restrictions"))); + items.Add( + item: new Shortcut( + keybindSetting: KeybindSettingsBase.RestoreDefaultsKey, + localizedText: T("VR.Label:Revert to default"))); + items.Add(OnscreenDisplay.RightClick_LeaveSegment()); + OnscreenDisplay.Display(items); + } + } } }