Standardize and simplify settings menu settings access.
This commit is contained in:
committed by
Gustas Kažukauskas
parent
2e16ad47e5
commit
ec75dcd9e9
@@ -271,6 +271,11 @@ namespace OpenRA
|
|||||||
"Legacy: OpenGL 2.1 with framebuffer_object extension (requires DisableLegacyGL: False)",
|
"Legacy: OpenGL 2.1 with framebuffer_object extension (requires DisableLegacyGL: False)",
|
||||||
"Automatic: Use the first supported profile.")]
|
"Automatic: Use the first supported profile.")]
|
||||||
public GLProfile GLProfile = GLProfile.Automatic;
|
public GLProfile GLProfile = GLProfile.Automatic;
|
||||||
|
|
||||||
|
public GraphicSettings Clone()
|
||||||
|
{
|
||||||
|
return (GraphicSettings)MemberwiseClone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[YamlNode("Sound", shared: true)]
|
[YamlNode("Sound", shared: true)]
|
||||||
@@ -288,6 +293,11 @@ namespace OpenRA
|
|||||||
public bool CashTicks = true;
|
public bool CashTicks = true;
|
||||||
public bool Mute = false;
|
public bool Mute = false;
|
||||||
public bool MuteBackgroundMusic = false;
|
public bool MuteBackgroundMusic = false;
|
||||||
|
|
||||||
|
public SoundSettings Clone()
|
||||||
|
{
|
||||||
|
return (SoundSettings)MemberwiseClone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[YamlNode("Player", shared: true)]
|
[YamlNode("Player", shared: true)]
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public IntroductionPromptLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, Action onComplete)
|
public IntroductionPromptLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, Action onComplete)
|
||||||
{
|
{
|
||||||
var ps = Game.Settings.Player;
|
var playerSettings = modData.GetSettings<PlayerSettings>();
|
||||||
var ds = Game.Settings.Graphics;
|
var graphicSettings = modData.GetSettings<GraphicSettings>();
|
||||||
var gs = Game.Settings.Game;
|
var gameSettings = modData.GetSettings<GameSettings>();
|
||||||
|
|
||||||
classic = FluentProvider.GetMessage(Classic);
|
classic = FluentProvider.GetMessage(Classic);
|
||||||
modern = FluentProvider.GetMessage(Modern);
|
modern = FluentProvider.GetMessage(Modern);
|
||||||
@@ -49,7 +49,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
var escPressed = false;
|
var escPressed = false;
|
||||||
var nameTextfield = widget.Get<TextFieldWidget>("PLAYERNAME");
|
var nameTextfield = widget.Get<TextFieldWidget>("PLAYERNAME");
|
||||||
nameTextfield.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
|
nameTextfield.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
|
nameTextfield.Text = Settings.SanitizedPlayerName(playerSettings.Name);
|
||||||
|
|
||||||
var itchIntegration = modData.GetOrCreate<ItchIntegration>();
|
var itchIntegration = modData.GetOrCreate<ItchIntegration>();
|
||||||
itchIntegration.GetPlayerName(name => nameTextfield.Text = Settings.SanitizedPlayerName(name));
|
itchIntegration.GetPlayerName(name => nameTextfield.Text = Settings.SanitizedPlayerName(name));
|
||||||
@@ -64,93 +64,94 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
nameTextfield.Text = nameTextfield.Text.Trim();
|
nameTextfield.Text = nameTextfield.Text.Trim();
|
||||||
if (nameTextfield.Text.Length == 0)
|
if (nameTextfield.Text.Length == 0)
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
|
nameTextfield.Text = Settings.SanitizedPlayerName(playerSettings.Name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
|
nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
|
||||||
ps.Name = nameTextfield.Text;
|
playerSettings.Name = nameTextfield.Text;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
nameTextfield.OnEnterKey = _ => { nameTextfield.YieldKeyboardFocus(); return true; };
|
nameTextfield.OnEnterKey = _ => { nameTextfield.YieldKeyboardFocus(); return true; };
|
||||||
nameTextfield.OnEscKey = _ =>
|
nameTextfield.OnEscKey = _ =>
|
||||||
{
|
{
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
|
nameTextfield.Text = Settings.SanitizedPlayerName(playerSettings.Name);
|
||||||
escPressed = true;
|
escPressed = true;
|
||||||
nameTextfield.YieldKeyboardFocus();
|
nameTextfield.YieldKeyboardFocus();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
var mouseControlDescClassic = widget.Get("MOUSE_CONTROL_DESC_CLASSIC");
|
var mouseControlDescClassic = widget.Get("MOUSE_CONTROL_DESC_CLASSIC");
|
||||||
mouseControlDescClassic.IsVisible = () => gs.UseClassicMouseStyle;
|
mouseControlDescClassic.IsVisible = () => gameSettings.UseClassicMouseStyle;
|
||||||
|
|
||||||
var mouseControlDescModern = widget.Get("MOUSE_CONTROL_DESC_MODERN");
|
var mouseControlDescModern = widget.Get("MOUSE_CONTROL_DESC_MODERN");
|
||||||
mouseControlDescModern.IsVisible = () => !gs.UseClassicMouseStyle;
|
mouseControlDescModern.IsVisible = () => !gameSettings.UseClassicMouseStyle;
|
||||||
|
|
||||||
var mouseControlDropdown = widget.Get<DropDownButtonWidget>("MOUSE_CONTROL_DROPDOWN");
|
var mouseControlDropdown = widget.Get<DropDownButtonWidget>("MOUSE_CONTROL_DROPDOWN");
|
||||||
mouseControlDropdown.OnMouseDown = _ => InputSettingsLogic.ShowMouseControlDropdown(mouseControlDropdown, gs);
|
mouseControlDropdown.OnMouseDown = _ => InputSettingsLogic.ShowMouseControlDropdown(mouseControlDropdown, gameSettings);
|
||||||
mouseControlDropdown.GetText = () => gs.UseClassicMouseStyle ? classic : modern;
|
mouseControlDropdown.GetText = () => gameSettings.UseClassicMouseStyle ? classic : modern;
|
||||||
|
|
||||||
foreach (var container in new[] { mouseControlDescClassic, mouseControlDescModern })
|
foreach (var container in new[] { mouseControlDescClassic, mouseControlDescModern })
|
||||||
{
|
{
|
||||||
var classicScrollRight = container.Get("DESC_SCROLL_RIGHT");
|
var classicScrollRight = container.Get("DESC_SCROLL_RIGHT");
|
||||||
classicScrollRight.IsVisible = () => gs.UseClassicMouseStyle ^ gs.UseAlternateScrollButton;
|
classicScrollRight.IsVisible = () => gameSettings.UseClassicMouseStyle ^ gameSettings.UseAlternateScrollButton;
|
||||||
|
|
||||||
var classicScrollMiddle = container.Get("DESC_SCROLL_MIDDLE");
|
var classicScrollMiddle = container.Get("DESC_SCROLL_MIDDLE");
|
||||||
classicScrollMiddle.IsVisible = () => !gs.UseClassicMouseStyle ^ gs.UseAlternateScrollButton;
|
classicScrollMiddle.IsVisible = () => !gameSettings.UseClassicMouseStyle ^ gameSettings.UseAlternateScrollButton;
|
||||||
|
|
||||||
var zoomDesc = container.Get("DESC_ZOOM");
|
var zoomDesc = container.Get("DESC_ZOOM");
|
||||||
zoomDesc.IsVisible = () => gs.ZoomModifier == Modifiers.None;
|
zoomDesc.IsVisible = () => gameSettings.ZoomModifier == Modifiers.None;
|
||||||
|
|
||||||
var zoomDescModifier = container.Get<LabelWidget>("DESC_ZOOM_MODIFIER");
|
var zoomDescModifier = container.Get<LabelWidget>("DESC_ZOOM_MODIFIER");
|
||||||
zoomDescModifier.IsVisible = () => gs.ZoomModifier != Modifiers.None;
|
zoomDescModifier.IsVisible = () => gameSettings.ZoomModifier != Modifiers.None;
|
||||||
|
|
||||||
var zoomDescModifierTemplate = zoomDescModifier.GetText();
|
var zoomDescModifierTemplate = zoomDescModifier.GetText();
|
||||||
var zoomDescModifierLabel = new CachedTransform<Modifiers, string>(
|
var zoomDescModifierLabel = new CachedTransform<Modifiers, string>(
|
||||||
mod => zoomDescModifierTemplate.Replace("MODIFIER", mod.ToString()));
|
mod => zoomDescModifierTemplate.Replace("MODIFIER", mod.ToString()));
|
||||||
zoomDescModifier.GetText = () => zoomDescModifierLabel.Update(gs.ZoomModifier);
|
zoomDescModifier.GetText = () => zoomDescModifierLabel.Update(gameSettings.ZoomModifier);
|
||||||
|
|
||||||
var edgescrollDesc = container.Get<LabelWidget>("DESC_EDGESCROLL");
|
var edgescrollDesc = container.Get<LabelWidget>("DESC_EDGESCROLL");
|
||||||
edgescrollDesc.IsVisible = () => gs.ViewportEdgeScroll;
|
edgescrollDesc.IsVisible = () => gameSettings.ViewportEdgeScroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsUtils.BindCheckboxPref(widget, "EDGESCROLL_CHECKBOX", gs, "ViewportEdgeScroll");
|
SettingsUtils.BindCheckboxPref(widget, "EDGESCROLL_CHECKBOX", gameSettings, "ViewportEdgeScroll");
|
||||||
|
|
||||||
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
|
||||||
|
|
||||||
var colorDropdown = widget.Get<DropDownButtonWidget>("PLAYERCOLOR");
|
var colorDropdown = widget.Get<DropDownButtonWidget>("PLAYERCOLOR");
|
||||||
colorDropdown.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
|
colorDropdown.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
|
||||||
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, ps.Color, null, worldRenderer, color =>
|
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, playerSettings.Color, null, worldRenderer, color =>
|
||||||
{
|
{
|
||||||
ps.Color = color;
|
playerSettings.Color = color;
|
||||||
Game.Settings.Save();
|
Game.Settings.Save();
|
||||||
});
|
});
|
||||||
colorDropdown.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => ps.Color;
|
colorDropdown.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => playerSettings.Color;
|
||||||
|
|
||||||
var viewportSizes = modData.GetOrCreate<WorldViewportSizes>();
|
var viewportSizes = modData.GetOrCreate<WorldViewportSizes>();
|
||||||
var battlefieldCameraDropDown = widget.Get<DropDownButtonWidget>("BATTLEFIELD_CAMERA_DROPDOWN");
|
var battlefieldCameraDropDown = widget.Get<DropDownButtonWidget>("BATTLEFIELD_CAMERA_DROPDOWN");
|
||||||
var battlefieldCameraLabel = new CachedTransform<WorldViewport, string>(vs => DisplaySettingsLogic.GetViewportSizeName(modData, vs));
|
var battlefieldCameraLabel = new CachedTransform<WorldViewport, string>(vs => DisplaySettingsLogic.GetViewportSizeName(modData, vs));
|
||||||
battlefieldCameraDropDown.OnMouseDown = _ => DisplaySettingsLogic.ShowBattlefieldCameraDropdown(modData, battlefieldCameraDropDown, viewportSizes, ds);
|
battlefieldCameraDropDown.OnMouseDown = _ => DisplaySettingsLogic.ShowBattlefieldCameraDropdown(
|
||||||
battlefieldCameraDropDown.GetText = () => battlefieldCameraLabel.Update(ds.ViewportDistance);
|
modData, battlefieldCameraDropDown, viewportSizes, graphicSettings);
|
||||||
|
battlefieldCameraDropDown.GetText = () => battlefieldCameraLabel.Update(graphicSettings.ViewportDistance);
|
||||||
|
|
||||||
var uiScaleDropdown = widget.Get<DropDownButtonWidget>("UI_SCALE_DROPDOWN");
|
var uiScaleDropdown = widget.Get<DropDownButtonWidget>("UI_SCALE_DROPDOWN");
|
||||||
var uiScaleLabel = new CachedTransform<float, string>(s => $"{(int)(100 * s)}%");
|
var uiScaleLabel = new CachedTransform<float, string>(s => $"{(int)(100 * s)}%");
|
||||||
uiScaleDropdown.OnMouseDown = _ => DisplaySettingsLogic.ShowUIScaleDropdown(uiScaleDropdown, ds);
|
uiScaleDropdown.OnMouseDown = _ => DisplaySettingsLogic.ShowUIScaleDropdown(uiScaleDropdown, graphicSettings);
|
||||||
uiScaleDropdown.GetText = () => uiScaleLabel.Update(ds.UIScale);
|
uiScaleDropdown.GetText = () => uiScaleLabel.Update(graphicSettings.UIScale);
|
||||||
|
|
||||||
var minResolution = viewportSizes.MinEffectiveResolution;
|
var minResolution = viewportSizes.MinEffectiveResolution;
|
||||||
var resolution = Game.Renderer.Resolution;
|
var resolution = Game.Renderer.Resolution;
|
||||||
var disableUIScale = worldRenderer.World.Type != WorldType.Shellmap ||
|
var disableUIScale = worldRenderer.World.Type != WorldType.Shellmap ||
|
||||||
resolution.Width * ds.UIScale < 1.25f * minResolution.Width ||
|
resolution.Width * graphicSettings.UIScale < 1.25f * minResolution.Width ||
|
||||||
resolution.Height * ds.UIScale < 1.25f * minResolution.Height;
|
resolution.Height * graphicSettings.UIScale < 1.25f * minResolution.Height;
|
||||||
|
|
||||||
uiScaleDropdown.IsDisabled = () => disableUIScale;
|
uiScaleDropdown.IsDisabled = () => disableUIScale;
|
||||||
|
|
||||||
SettingsUtils.BindCheckboxPref(widget, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
|
SettingsUtils.BindCheckboxPref(widget, "CURSORDOUBLE_CHECKBOX", graphicSettings, "CursorDouble");
|
||||||
|
|
||||||
widget.Get<ButtonWidget>("CONTINUE_BUTTON").OnClick = () =>
|
widget.Get<ButtonWidget>("CONTINUE_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
Game.Settings.Game.IntroductionPromptVersion = IntroductionVersion;
|
gameSettings.IntroductionPromptVersion = IntroductionVersion;
|
||||||
Game.Settings.Save();
|
Game.Settings.Save();
|
||||||
Ui.CloseWindow();
|
Ui.CloseWindow();
|
||||||
onComplete();
|
onComplete();
|
||||||
|
|||||||
@@ -16,79 +16,75 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
public class AdvancedSettingsLogic : ChromeLogic
|
public class AdvancedSettingsLogic : ChromeLogic
|
||||||
{
|
{
|
||||||
static readonly bool OriginalServerDiscoverNatDevices;
|
readonly DebugSettings debugSettings;
|
||||||
|
readonly GameSettings gameSettings;
|
||||||
static AdvancedSettingsLogic()
|
readonly ServerSettings serverSettings;
|
||||||
{
|
static ServerSettings originalServerSettings;
|
||||||
var original = Game.Settings;
|
|
||||||
OriginalServerDiscoverNatDevices = original.Server.DiscoverNatDevices;
|
|
||||||
}
|
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public AdvancedSettingsLogic(Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>> registerPanel, string panelID, string label)
|
public AdvancedSettingsLogic(ModData modData, SettingsLogic settingsLogic, string panelID, string label)
|
||||||
{
|
{
|
||||||
registerPanel(panelID, label, InitPanel, ResetPanel);
|
debugSettings = modData.GetSettings<DebugSettings>();
|
||||||
|
gameSettings = modData.GetSettings<GameSettings>();
|
||||||
|
serverSettings = modData.GetSettings<ServerSettings>();
|
||||||
|
originalServerSettings ??= serverSettings.Clone();
|
||||||
|
settingsLogic.RegisterSettingsPanel(panelID, label, InitPanel, ResetPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Func<bool> InitPanel(Widget panel)
|
Func<bool> InitPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var ds = Game.Settings.Debug;
|
|
||||||
var ss = Game.Settings.Server;
|
|
||||||
var gs = Game.Settings.Game;
|
|
||||||
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
||||||
|
|
||||||
// Advanced
|
// Advanced
|
||||||
SettingsUtils.BindCheckboxPref(panel, "NAT_DISCOVERY", ss, "DiscoverNatDevices");
|
SettingsUtils.BindCheckboxPref(panel, "NAT_DISCOVERY", serverSettings, "DiscoverNatDevices");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "PERFTEXT_CHECKBOX", ds, "PerfText");
|
SettingsUtils.BindCheckboxPref(panel, "PERFTEXT_CHECKBOX", debugSettings, "PerfText");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "PERFGRAPH_CHECKBOX", ds, "PerfGraph");
|
SettingsUtils.BindCheckboxPref(panel, "PERFGRAPH_CHECKBOX", debugSettings, "PerfGraph");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "FETCH_NEWS_CHECKBOX", gs, "FetchNews");
|
SettingsUtils.BindCheckboxPref(panel, "FETCH_NEWS_CHECKBOX", gameSettings, "FetchNews");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "SENDSYSINFO_CHECKBOX", ds, "SendSystemInformation");
|
SettingsUtils.BindCheckboxPref(panel, "SENDSYSINFO_CHECKBOX", debugSettings, "SendSystemInformation");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "CHECK_VERSION_CHECKBOX", ds, "CheckVersion");
|
SettingsUtils.BindCheckboxPref(panel, "CHECK_VERSION_CHECKBOX", debugSettings, "CheckVersion");
|
||||||
|
|
||||||
var ssi = panel.Get<CheckboxWidget>("SENDSYSINFO_CHECKBOX");
|
var ssi = panel.Get<CheckboxWidget>("SENDSYSINFO_CHECKBOX");
|
||||||
ssi.IsDisabled = () => !gs.FetchNews;
|
ssi.IsDisabled = () => !gameSettings.FetchNews;
|
||||||
|
|
||||||
// Developer
|
// Developer
|
||||||
SettingsUtils.BindCheckboxPref(panel, "BOTDEBUG_CHECKBOX", ds, "BotDebug");
|
SettingsUtils.BindCheckboxPref(panel, "BOTDEBUG_CHECKBOX", debugSettings, "BotDebug");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "LUADEBUG_CHECKBOX", ds, "LuaDebug");
|
SettingsUtils.BindCheckboxPref(panel, "LUADEBUG_CHECKBOX", debugSettings, "LuaDebug");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "REPLAY_COMMANDS_CHECKBOX", ds, "EnableDebugCommandsInReplays");
|
SettingsUtils.BindCheckboxPref(panel, "REPLAY_COMMANDS_CHECKBOX", debugSettings, "EnableDebugCommandsInReplays");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "CHECKUNSYNCED_CHECKBOX", ds, "SyncCheckUnsyncedCode");
|
SettingsUtils.BindCheckboxPref(panel, "CHECKUNSYNCED_CHECKBOX", debugSettings, "SyncCheckUnsyncedCode");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "CHECKBOTSYNC_CHECKBOX", ds, "SyncCheckBotModuleCode");
|
SettingsUtils.BindCheckboxPref(panel, "CHECKBOTSYNC_CHECKBOX", debugSettings, "SyncCheckBotModuleCode");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "PERFLOGGING_CHECKBOX", ds, "EnableSimulationPerfLogging");
|
SettingsUtils.BindCheckboxPref(panel, "PERFLOGGING_CHECKBOX", debugSettings, "EnableSimulationPerfLogging");
|
||||||
|
|
||||||
panel.Get("BOTDEBUG_CHECKBOX_CONTAINER").IsVisible = () => ds.DisplayDeveloperSettings;
|
panel.Get("BOTDEBUG_CHECKBOX_CONTAINER").IsVisible = () => debugSettings.DisplayDeveloperSettings;
|
||||||
panel.Get("CHECKUNSYNCED_CHECKBOX_CONTAINER").IsVisible = () => ds.DisplayDeveloperSettings;
|
panel.Get("CHECKUNSYNCED_CHECKBOX_CONTAINER").IsVisible = () => debugSettings.DisplayDeveloperSettings;
|
||||||
panel.Get("CHECKBOTSYNC_CHECKBOX_CONTAINER").IsVisible = () => ds.DisplayDeveloperSettings;
|
panel.Get("CHECKBOTSYNC_CHECKBOX_CONTAINER").IsVisible = () => debugSettings.DisplayDeveloperSettings;
|
||||||
panel.Get("LUADEBUG_CHECKBOX_CONTAINER").IsVisible = () => ds.DisplayDeveloperSettings;
|
panel.Get("LUADEBUG_CHECKBOX_CONTAINER").IsVisible = () => debugSettings.DisplayDeveloperSettings;
|
||||||
panel.Get("REPLAY_COMMANDS_CHECKBOX_CONTAINER").IsVisible = () => ds.DisplayDeveloperSettings;
|
panel.Get("REPLAY_COMMANDS_CHECKBOX_CONTAINER").IsVisible = () => debugSettings.DisplayDeveloperSettings;
|
||||||
panel.Get("PERFLOGGING_CHECKBOX_CONTAINER").IsVisible = () => ds.DisplayDeveloperSettings;
|
panel.Get("PERFLOGGING_CHECKBOX_CONTAINER").IsVisible = () => debugSettings.DisplayDeveloperSettings;
|
||||||
panel.Get("DEBUG_HIDDEN_CONTAINER").IsVisible = () => !ds.DisplayDeveloperSettings;
|
panel.Get("DEBUG_HIDDEN_CONTAINER").IsVisible = () => !debugSettings.DisplayDeveloperSettings;
|
||||||
|
|
||||||
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
||||||
|
|
||||||
return () => ss.DiscoverNatDevices != OriginalServerDiscoverNatDevices;
|
return () => serverSettings.DiscoverNatDevices != originalServerSettings.DiscoverNatDevices;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action ResetPanel(Widget panel)
|
Action ResetPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var ds = Game.Settings.Debug;
|
var defaultDebugSettings = new DebugSettings();
|
||||||
var ss = Game.Settings.Server;
|
var defaultServerSettings = new ServerSettings();
|
||||||
var dds = new DebugSettings();
|
|
||||||
var dss = new ServerSettings();
|
|
||||||
|
|
||||||
return () =>
|
return () =>
|
||||||
{
|
{
|
||||||
ss.DiscoverNatDevices = dss.DiscoverNatDevices;
|
serverSettings.DiscoverNatDevices = defaultServerSettings.DiscoverNatDevices;
|
||||||
ds.PerfText = dds.PerfText;
|
debugSettings.PerfText = defaultDebugSettings.PerfText;
|
||||||
ds.PerfGraph = dds.PerfGraph;
|
debugSettings.PerfGraph = defaultDebugSettings.PerfGraph;
|
||||||
ds.SyncCheckUnsyncedCode = dds.SyncCheckUnsyncedCode;
|
debugSettings.SyncCheckUnsyncedCode = defaultDebugSettings.SyncCheckUnsyncedCode;
|
||||||
ds.SyncCheckBotModuleCode = dds.SyncCheckBotModuleCode;
|
debugSettings.SyncCheckBotModuleCode = defaultDebugSettings.SyncCheckBotModuleCode;
|
||||||
ds.BotDebug = dds.BotDebug;
|
debugSettings.BotDebug = defaultDebugSettings.BotDebug;
|
||||||
ds.LuaDebug = dds.LuaDebug;
|
debugSettings.LuaDebug = defaultDebugSettings.LuaDebug;
|
||||||
ds.SendSystemInformation = dds.SendSystemInformation;
|
debugSettings.SendSystemInformation = defaultDebugSettings.SendSystemInformation;
|
||||||
ds.CheckVersion = dds.CheckVersion;
|
debugSettings.CheckVersion = defaultDebugSettings.CheckVersion;
|
||||||
ds.EnableDebugCommandsInReplays = dds.EnableDebugCommandsInReplays;
|
debugSettings.EnableDebugCommandsInReplays = defaultDebugSettings.EnableDebugCommandsInReplays;
|
||||||
ds.EnableSimulationPerfLogging = dds.EnableSimulationPerfLogging;
|
debugSettings.EnableSimulationPerfLogging = defaultDebugSettings.EnableSimulationPerfLogging;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,43 +20,34 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
public class AudioSettingsLogic : ChromeLogic
|
public class AudioSettingsLogic : ChromeLogic
|
||||||
{
|
{
|
||||||
static readonly string OriginalSoundDevice;
|
|
||||||
|
|
||||||
readonly WorldRenderer worldRenderer;
|
readonly WorldRenderer worldRenderer;
|
||||||
|
readonly SoundSettings soundSettings;
|
||||||
|
static SoundSettings originalSoundSettings;
|
||||||
|
|
||||||
SoundDevice soundDevice;
|
SoundDevice soundDevice;
|
||||||
|
|
||||||
static AudioSettingsLogic()
|
|
||||||
{
|
|
||||||
var original = Game.Settings;
|
|
||||||
OriginalSoundDevice = original.Sound.Device;
|
|
||||||
}
|
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public AudioSettingsLogic(
|
public AudioSettingsLogic(ModData modData, SettingsLogic settingsLogic, string panelID, string label, WorldRenderer worldRenderer)
|
||||||
Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>> registerPanel,
|
|
||||||
string panelID,
|
|
||||||
string label,
|
|
||||||
WorldRenderer worldRenderer)
|
|
||||||
{
|
{
|
||||||
this.worldRenderer = worldRenderer;
|
this.worldRenderer = worldRenderer;
|
||||||
|
soundSettings = modData.GetSettings<SoundSettings>();
|
||||||
|
originalSoundSettings ??= soundSettings.Clone();
|
||||||
|
|
||||||
registerPanel(panelID, label, InitPanel, ResetPanel);
|
settingsLogic.RegisterSettingsPanel(panelID, label, InitPanel, ResetPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Func<bool> InitPanel(Widget panel)
|
Func<bool> InitPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var musicPlaylist = worldRenderer.World.WorldActor.Trait<MusicPlaylist>();
|
var musicPlaylist = worldRenderer.World.WorldActor.Trait<MusicPlaylist>();
|
||||||
var ss = Game.Settings.Sound;
|
|
||||||
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
||||||
|
|
||||||
SettingsUtils.BindCheckboxPref(panel, "CASH_TICKS", ss, "CashTicks");
|
SettingsUtils.BindCheckboxPref(panel, "CASH_TICKS", soundSettings, "CashTicks");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "MUTE_SOUND", ss, "Mute");
|
SettingsUtils.BindCheckboxPref(panel, "MUTE_SOUND", soundSettings, "Mute");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "MUTE_BACKGROUND_MUSIC", ss, "MuteBackgroundMusic");
|
SettingsUtils.BindCheckboxPref(panel, "MUTE_BACKGROUND_MUSIC", soundSettings, "MuteBackgroundMusic");
|
||||||
|
|
||||||
SettingsUtils.BindSliderPref(panel, "SOUND_VOLUME", ss, "SoundVolume");
|
SettingsUtils.BindSliderPref(panel, "SOUND_VOLUME", soundSettings, "SoundVolume");
|
||||||
SettingsUtils.BindSliderPref(panel, "MUSIC_VOLUME", ss, "MusicVolume");
|
SettingsUtils.BindSliderPref(panel, "MUSIC_VOLUME", soundSettings, "MusicVolume");
|
||||||
SettingsUtils.BindSliderPref(panel, "VIDEO_VOLUME", ss, "VideoVolume");
|
SettingsUtils.BindSliderPref(panel, "VIDEO_VOLUME", soundSettings, "VideoVolume");
|
||||||
|
|
||||||
var muteCheckbox = panel.Get<CheckboxWidget>("MUTE_SOUND");
|
var muteCheckbox = panel.Get<CheckboxWidget>("MUTE_SOUND");
|
||||||
var muteCheckboxOnClick = muteCheckbox.OnClick;
|
var muteCheckboxOnClick = muteCheckbox.OnClick;
|
||||||
@@ -67,7 +58,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
muteCheckboxOnClick();
|
muteCheckboxOnClick();
|
||||||
|
|
||||||
if (ss.Mute)
|
if (soundSettings.Mute)
|
||||||
Game.Sound.MuteAudio();
|
Game.Sound.MuteAudio();
|
||||||
else
|
else
|
||||||
Game.Sound.UnmuteAudio();
|
Game.Sound.UnmuteAudio();
|
||||||
@@ -108,7 +99,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
videoVolumeSlider.OnChange += x => Game.Sound.VideoVolume = x;
|
videoVolumeSlider.OnChange += x => Game.Sound.VideoVolume = x;
|
||||||
|
|
||||||
var devices = Game.Sound.AvailableDevices();
|
var devices = Game.Sound.AvailableDevices();
|
||||||
soundDevice = devices.FirstOrDefault(d => d.Device == ss.Device) ?? devices[0];
|
soundDevice = devices.FirstOrDefault(d => d.Device == soundSettings.Device) ?? devices[0];
|
||||||
|
|
||||||
var audioDeviceDropdown = panel.Get<DropDownButtonWidget>("AUDIO_DEVICE");
|
var audioDeviceDropdown = panel.Get<DropDownButtonWidget>("AUDIO_DEVICE");
|
||||||
audioDeviceDropdown.OnMouseDown = _ => ShowAudioDeviceDropdown(audioDeviceDropdown, devices, scrollPanel);
|
audioDeviceDropdown.OnMouseDown = _ => ShowAudioDeviceDropdown(audioDeviceDropdown, devices, scrollPanel);
|
||||||
@@ -119,38 +110,36 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
audioDeviceDropdown.GetText = () => deviceLabel.Update(soundDevice);
|
audioDeviceDropdown.GetText = () => deviceLabel.Update(soundDevice);
|
||||||
|
|
||||||
var restartDesc = panel.Get("AUDIO_RESTART_REQUIRED_DESC");
|
var restartDesc = panel.Get("AUDIO_RESTART_REQUIRED_DESC");
|
||||||
restartDesc.IsVisible = () => soundDevice.Device != OriginalSoundDevice;
|
restartDesc.IsVisible = () => soundDevice.Device != originalSoundSettings.Device;
|
||||||
|
|
||||||
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
||||||
|
|
||||||
return () =>
|
return () =>
|
||||||
{
|
{
|
||||||
ss.Device = soundDevice.Device;
|
soundSettings.Device = soundDevice.Device;
|
||||||
|
return soundSettings.Device != originalSoundSettings.Device;
|
||||||
return ss.Device != OriginalSoundDevice;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Action ResetPanel(Widget panel)
|
Action ResetPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var ss = Game.Settings.Sound;
|
var defaultSoundSettings = new SoundSettings();
|
||||||
var dss = new SoundSettings();
|
|
||||||
return () =>
|
return () =>
|
||||||
{
|
{
|
||||||
ss.SoundVolume = dss.SoundVolume;
|
soundSettings.SoundVolume = defaultSoundSettings.SoundVolume;
|
||||||
ss.MusicVolume = dss.MusicVolume;
|
soundSettings.MusicVolume = defaultSoundSettings.MusicVolume;
|
||||||
ss.VideoVolume = dss.VideoVolume;
|
soundSettings.VideoVolume = defaultSoundSettings.VideoVolume;
|
||||||
ss.CashTicks = dss.CashTicks;
|
soundSettings.CashTicks = defaultSoundSettings.CashTicks;
|
||||||
ss.Mute = dss.Mute;
|
soundSettings.Mute = defaultSoundSettings.Mute;
|
||||||
ss.MuteBackgroundMusic = dss.MuteBackgroundMusic;
|
soundSettings.MuteBackgroundMusic = defaultSoundSettings.MuteBackgroundMusic;
|
||||||
ss.Device = dss.Device;
|
soundSettings.Device = defaultSoundSettings.Device;
|
||||||
|
|
||||||
panel.Get<SliderWidget>("SOUND_VOLUME").Value = ss.SoundVolume;
|
panel.Get<SliderWidget>("SOUND_VOLUME").Value = soundSettings.SoundVolume;
|
||||||
Game.Sound.SoundVolume = ss.SoundVolume;
|
Game.Sound.SoundVolume = soundSettings.SoundVolume;
|
||||||
panel.Get<SliderWidget>("MUSIC_VOLUME").Value = ss.MusicVolume;
|
panel.Get<SliderWidget>("MUSIC_VOLUME").Value = soundSettings.MusicVolume;
|
||||||
Game.Sound.MusicVolume = ss.MusicVolume;
|
Game.Sound.MusicVolume = soundSettings.MusicVolume;
|
||||||
panel.Get<SliderWidget>("VIDEO_VOLUME").Value = ss.VideoVolume;
|
panel.Get<SliderWidget>("VIDEO_VOLUME").Value = soundSettings.VideoVolume;
|
||||||
Game.Sound.VideoVolume = ss.VideoVolume;
|
Game.Sound.VideoVolume = soundSettings.VideoVolume;
|
||||||
Game.Sound.UnmuteAudio();
|
Game.Sound.UnmuteAudio();
|
||||||
soundDevice = Game.Sound.AvailableDevices().First();
|
soundDevice = Game.Sound.AvailableDevices().First();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -67,15 +67,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
[FluentReference("fps")]
|
[FluentReference("fps")]
|
||||||
const string FrameLimiter = "checkbox-frame-limiter";
|
const string FrameLimiter = "checkbox-frame-limiter";
|
||||||
static readonly int OriginalVideoDisplay;
|
|
||||||
static readonly WindowMode OriginalGraphicsMode;
|
|
||||||
static readonly int2 OriginalGraphicsWindowedSize;
|
|
||||||
static readonly int2 OriginalGraphicsFullscreenSize;
|
|
||||||
static readonly GLProfile OriginalGLProfile;
|
|
||||||
|
|
||||||
readonly ModData modData;
|
readonly ModData modData;
|
||||||
readonly WorldRenderer worldRenderer;
|
readonly WorldRenderer worldRenderer;
|
||||||
readonly WorldViewportSizes viewportSizes;
|
readonly WorldViewportSizes viewportSizes;
|
||||||
|
readonly GameSettings gameSettings;
|
||||||
|
readonly GraphicSettings graphicSettings;
|
||||||
|
readonly PlayerSettings playerSettings;
|
||||||
|
static GraphicSettings originalGraphicSettings;
|
||||||
|
|
||||||
readonly string showOnDamage;
|
readonly string showOnDamage;
|
||||||
readonly string alwaysShow;
|
readonly string alwaysShow;
|
||||||
@@ -87,29 +86,21 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
readonly string legacyFullscreen;
|
readonly string legacyFullscreen;
|
||||||
readonly string fullscreen;
|
readonly string fullscreen;
|
||||||
|
|
||||||
static DisplaySettingsLogic()
|
|
||||||
{
|
|
||||||
var original = Game.Settings;
|
|
||||||
OriginalGraphicsMode = original.Graphics.Mode;
|
|
||||||
OriginalVideoDisplay = original.Graphics.VideoDisplay;
|
|
||||||
OriginalGraphicsWindowedSize = original.Graphics.WindowedSize;
|
|
||||||
OriginalGraphicsFullscreenSize = original.Graphics.FullscreenSize;
|
|
||||||
OriginalGLProfile = original.Graphics.GLProfile;
|
|
||||||
}
|
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public DisplaySettingsLogic(
|
public DisplaySettingsLogic(ModData modData, SettingsLogic settingsLogic, string panelID, string label, WorldRenderer worldRenderer)
|
||||||
Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>> registerPanel,
|
|
||||||
string panelID, string label, ModData modData, WorldRenderer worldRenderer)
|
|
||||||
{
|
{
|
||||||
this.worldRenderer = worldRenderer;
|
this.worldRenderer = worldRenderer;
|
||||||
this.modData = modData;
|
this.modData = modData;
|
||||||
viewportSizes = modData.GetOrCreate<WorldViewportSizes>();
|
viewportSizes = modData.GetOrCreate<WorldViewportSizes>();
|
||||||
|
gameSettings = modData.GetSettings<GameSettings>();
|
||||||
|
graphicSettings = modData.GetSettings<GraphicSettings>();
|
||||||
|
playerSettings = modData.GetSettings<PlayerSettings>();
|
||||||
|
originalGraphicSettings ??= graphicSettings.Clone();
|
||||||
|
|
||||||
legacyFullscreen = FluentProvider.GetMessage(LegacyFullscreen);
|
legacyFullscreen = FluentProvider.GetMessage(LegacyFullscreen);
|
||||||
fullscreen = FluentProvider.GetMessage(Fullscreen);
|
fullscreen = FluentProvider.GetMessage(Fullscreen);
|
||||||
|
|
||||||
registerPanel(panelID, label, InitPanel, ResetPanel);
|
settingsLogic.RegisterSettingsPanel(panelID, label, InitPanel, ResetPanel);
|
||||||
|
|
||||||
showOnDamage = FluentProvider.GetMessage(ShowOnDamage);
|
showOnDamage = FluentProvider.GetMessage(ShowOnDamage);
|
||||||
alwaysShow = FluentProvider.GetMessage(AlwaysShow);
|
alwaysShow = FluentProvider.GetMessage(AlwaysShow);
|
||||||
@@ -138,72 +129,70 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
Func<bool> InitPanel(Widget panel)
|
Func<bool> InitPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var ds = Game.Settings.Graphics;
|
|
||||||
var gs = Game.Settings.Game;
|
|
||||||
var world = worldRenderer.World;
|
var world = worldRenderer.World;
|
||||||
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
||||||
|
|
||||||
SettingsUtils.BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
|
SettingsUtils.BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", graphicSettings, "CursorDouble");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "VSYNC_CHECKBOX", ds, "VSync");
|
SettingsUtils.BindCheckboxPref(panel, "VSYNC_CHECKBOX", graphicSettings, "VSync");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
|
SettingsUtils.BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", graphicSettings, "CapFramerate");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "FRAME_LIMIT_GAMESPEED_CHECKBOX", ds, "CapFramerateToGameFps");
|
SettingsUtils.BindCheckboxPref(panel, "FRAME_LIMIT_GAMESPEED_CHECKBOX", graphicSettings, "CapFramerateToGameFps");
|
||||||
SettingsUtils.BindIntSliderPref(panel, "FRAME_LIMIT_SLIDER", ds, "MaxFramerate");
|
SettingsUtils.BindIntSliderPref(panel, "FRAME_LIMIT_SLIDER", graphicSettings, "MaxFramerate");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gs, "UsePlayerStanceColors");
|
SettingsUtils.BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gameSettings, "UsePlayerStanceColors");
|
||||||
|
|
||||||
var cb = panel.Get<CheckboxWidget>("PLAYER_STANCE_COLORS_CHECKBOX");
|
var cb = panel.Get<CheckboxWidget>("PLAYER_STANCE_COLORS_CHECKBOX");
|
||||||
cb.IsChecked = () => gs.UsePlayerStanceColors;
|
cb.IsChecked = () => gameSettings.UsePlayerStanceColors;
|
||||||
cb.OnClick = () =>
|
cb.OnClick = () =>
|
||||||
{
|
{
|
||||||
gs.UsePlayerStanceColors = cb.IsChecked() ^ true;
|
gameSettings.UsePlayerStanceColors = cb.IsChecked() ^ true;
|
||||||
Player.SetupRelationshipColors(world.Players, world.LocalPlayer, worldRenderer, false);
|
Player.SetupRelationshipColors(world.Players, world.LocalPlayer, worldRenderer, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (panel.GetOrNull<CheckboxWidget>("PAUSE_SHELLMAP_CHECKBOX") != null)
|
if (panel.GetOrNull<CheckboxWidget>("PAUSE_SHELLMAP_CHECKBOX") != null)
|
||||||
SettingsUtils.BindCheckboxPref(panel, "PAUSE_SHELLMAP_CHECKBOX", gs, "PauseShellmap");
|
SettingsUtils.BindCheckboxPref(panel, "PAUSE_SHELLMAP_CHECKBOX", gameSettings, "PauseShellmap");
|
||||||
|
|
||||||
SettingsUtils.BindCheckboxPref(panel, "HIDE_REPLAY_CHAT_CHECKBOX", gs, "HideReplayChat");
|
SettingsUtils.BindCheckboxPref(panel, "HIDE_REPLAY_CHAT_CHECKBOX", gameSettings, "HideReplayChat");
|
||||||
|
|
||||||
var windowModeDropdown = panel.Get<DropDownButtonWidget>("MODE_DROPDOWN");
|
var windowModeDropdown = panel.Get<DropDownButtonWidget>("MODE_DROPDOWN");
|
||||||
windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, ds, scrollPanel);
|
windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, graphicSettings, scrollPanel);
|
||||||
windowModeDropdown.GetText = () => ds.Mode == WindowMode.Windowed
|
windowModeDropdown.GetText = () => graphicSettings.Mode == WindowMode.Windowed
|
||||||
? FluentProvider.GetMessage(Windowed)
|
? FluentProvider.GetMessage(Windowed)
|
||||||
: ds.Mode == WindowMode.Fullscreen ? legacyFullscreen : fullscreen;
|
: graphicSettings.Mode == WindowMode.Fullscreen ? legacyFullscreen : fullscreen;
|
||||||
|
|
||||||
var displaySelectionDropDown = panel.Get<DropDownButtonWidget>("DISPLAY_SELECTION_DROPDOWN");
|
var displaySelectionDropDown = panel.Get<DropDownButtonWidget>("DISPLAY_SELECTION_DROPDOWN");
|
||||||
displaySelectionDropDown.OnMouseDown = _ => ShowDisplaySelectionDropdown(displaySelectionDropDown, ds);
|
displaySelectionDropDown.OnMouseDown = _ => ShowDisplaySelectionDropdown(displaySelectionDropDown, graphicSettings);
|
||||||
var displaySelectionLabel = new CachedTransform<int, string>(i => FluentProvider.GetMessage(Display, "number", i + 1));
|
var displaySelectionLabel = new CachedTransform<int, string>(i => FluentProvider.GetMessage(Display, "number", i + 1));
|
||||||
displaySelectionDropDown.GetText = () => displaySelectionLabel.Update(ds.VideoDisplay);
|
displaySelectionDropDown.GetText = () => displaySelectionLabel.Update(graphicSettings.VideoDisplay);
|
||||||
displaySelectionDropDown.IsDisabled = () => Game.Renderer.DisplayCount < 2;
|
displaySelectionDropDown.IsDisabled = () => Game.Renderer.DisplayCount < 2;
|
||||||
|
|
||||||
var glProfileLabel = new CachedTransform<GLProfile, string>(p => p.ToString());
|
var glProfileLabel = new CachedTransform<GLProfile, string>(p => p.ToString());
|
||||||
var glProfileDropdown = panel.Get<DropDownButtonWidget>("GL_PROFILE_DROPDOWN");
|
var glProfileDropdown = panel.Get<DropDownButtonWidget>("GL_PROFILE_DROPDOWN");
|
||||||
var disableProfile = Game.Renderer.SupportedGLProfiles.Length < 2 && ds.GLProfile == GLProfile.Automatic;
|
var disableProfile = Game.Renderer.SupportedGLProfiles.Length < 2 && graphicSettings.GLProfile == GLProfile.Automatic;
|
||||||
glProfileDropdown.OnMouseDown = _ => ShowGLProfileDropdown(glProfileDropdown, ds);
|
glProfileDropdown.OnMouseDown = _ => ShowGLProfileDropdown(glProfileDropdown, graphicSettings);
|
||||||
glProfileDropdown.GetText = () => glProfileLabel.Update(ds.GLProfile);
|
glProfileDropdown.GetText = () => glProfileLabel.Update(graphicSettings.GLProfile);
|
||||||
glProfileDropdown.IsDisabled = () => disableProfile;
|
glProfileDropdown.IsDisabled = () => disableProfile;
|
||||||
|
|
||||||
var statusBarsDropDown = panel.Get<DropDownButtonWidget>("STATUS_BAR_DROPDOWN");
|
var statusBarsDropDown = panel.Get<DropDownButtonWidget>("STATUS_BAR_DROPDOWN");
|
||||||
statusBarsDropDown.OnMouseDown = _ => ShowStatusBarsDropdown(statusBarsDropDown, gs);
|
statusBarsDropDown.OnMouseDown = _ => ShowStatusBarsDropdown(statusBarsDropDown, gameSettings);
|
||||||
statusBarsDropDown.GetText = () => gs.StatusBars == StatusBarsType.Standard
|
statusBarsDropDown.GetText = () => gameSettings.StatusBars == StatusBarsType.Standard
|
||||||
? FluentProvider.GetMessage(Standard)
|
? FluentProvider.GetMessage(Standard)
|
||||||
: gs.StatusBars == StatusBarsType.DamageShow
|
: gameSettings.StatusBars == StatusBarsType.DamageShow
|
||||||
? showOnDamage
|
? showOnDamage
|
||||||
: alwaysShow;
|
: alwaysShow;
|
||||||
|
|
||||||
var targetLinesDropDown = panel.Get<DropDownButtonWidget>("TARGET_LINES_DROPDOWN");
|
var targetLinesDropDown = panel.Get<DropDownButtonWidget>("TARGET_LINES_DROPDOWN");
|
||||||
targetLinesDropDown.OnMouseDown = _ => ShowTargetLinesDropdown(targetLinesDropDown, gs);
|
targetLinesDropDown.OnMouseDown = _ => ShowTargetLinesDropdown(targetLinesDropDown, gameSettings);
|
||||||
targetLinesDropDown.GetText = () => gs.TargetLines == TargetLinesType.Automatic
|
targetLinesDropDown.GetText = () => gameSettings.TargetLines == TargetLinesType.Automatic
|
||||||
? automatic
|
? automatic
|
||||||
: gs.TargetLines == TargetLinesType.Manual
|
: gameSettings.TargetLines == TargetLinesType.Manual
|
||||||
? manual
|
? manual
|
||||||
: disabled;
|
: disabled;
|
||||||
|
|
||||||
var battlefieldCameraDropDown = panel.Get<DropDownButtonWidget>("BATTLEFIELD_CAMERA_DROPDOWN");
|
var battlefieldCameraDropDown = panel.Get<DropDownButtonWidget>("BATTLEFIELD_CAMERA_DROPDOWN");
|
||||||
var battlefieldCameraLabel = new CachedTransform<WorldViewport, string>(vs => GetViewportSizeName(modData, vs));
|
var battlefieldCameraLabel = new CachedTransform<WorldViewport, string>(vs => GetViewportSizeName(modData, vs));
|
||||||
battlefieldCameraDropDown.OnMouseDown = _ => ShowBattlefieldCameraDropdown(modData, battlefieldCameraDropDown, viewportSizes, ds);
|
battlefieldCameraDropDown.OnMouseDown = _ => ShowBattlefieldCameraDropdown(modData, battlefieldCameraDropDown, viewportSizes, graphicSettings);
|
||||||
battlefieldCameraDropDown.GetText = () => battlefieldCameraLabel.Update(ds.ViewportDistance);
|
battlefieldCameraDropDown.GetText = () => battlefieldCameraLabel.Update(graphicSettings.ViewportDistance);
|
||||||
|
|
||||||
BindTextNotificationPoolFilterSettings(panel, gs);
|
BindTextNotificationPoolFilterSettings(panel, gameSettings);
|
||||||
|
|
||||||
// Update vsync immediately
|
// Update vsync immediately
|
||||||
var vsyncCheckbox = panel.Get<CheckboxWidget>("VSYNC_CHECKBOX");
|
var vsyncCheckbox = panel.Get<CheckboxWidget>("VSYNC_CHECKBOX");
|
||||||
@@ -211,50 +200,49 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
vsyncCheckbox.OnClick = () =>
|
vsyncCheckbox.OnClick = () =>
|
||||||
{
|
{
|
||||||
vsyncOnClick();
|
vsyncOnClick();
|
||||||
Game.Renderer.SetVSyncEnabled(ds.VSync);
|
Game.Renderer.SetVSyncEnabled(graphicSettings.VSync);
|
||||||
};
|
};
|
||||||
|
|
||||||
var uiScaleDropdown = panel.Get<DropDownButtonWidget>("UI_SCALE_DROPDOWN");
|
var uiScaleDropdown = panel.Get<DropDownButtonWidget>("UI_SCALE_DROPDOWN");
|
||||||
var uiScaleLabel = new CachedTransform<float, string>(s => $"{(int)(100 * s)}%");
|
var uiScaleLabel = new CachedTransform<float, string>(s => $"{(int)(100 * s)}%");
|
||||||
uiScaleDropdown.OnMouseDown = _ => ShowUIScaleDropdown(uiScaleDropdown, ds);
|
uiScaleDropdown.OnMouseDown = _ => ShowUIScaleDropdown(uiScaleDropdown, graphicSettings);
|
||||||
uiScaleDropdown.GetText = () => uiScaleLabel.Update(ds.UIScale);
|
uiScaleDropdown.GetText = () => uiScaleLabel.Update(graphicSettings.UIScale);
|
||||||
|
|
||||||
var minResolution = viewportSizes.MinEffectiveResolution;
|
var minResolution = viewportSizes.MinEffectiveResolution;
|
||||||
var resolution = Game.Renderer.Resolution;
|
var resolution = Game.Renderer.Resolution;
|
||||||
var disableUIScale = world.Type != WorldType.Shellmap ||
|
var disableUIScale = world.Type != WorldType.Shellmap ||
|
||||||
resolution.Width * ds.UIScale < 1.25f * minResolution.Width ||
|
resolution.Width * graphicSettings.UIScale < 1.25f * minResolution.Width ||
|
||||||
resolution.Height * ds.UIScale < 1.25f * minResolution.Height;
|
resolution.Height * graphicSettings.UIScale < 1.25f * minResolution.Height;
|
||||||
|
|
||||||
uiScaleDropdown.IsDisabled = () => disableUIScale;
|
uiScaleDropdown.IsDisabled = () => disableUIScale;
|
||||||
|
|
||||||
panel.Get("DISPLAY_SELECTION_CONTAINER").IsVisible = () => ds.Mode != WindowMode.Windowed;
|
panel.Get("DISPLAY_SELECTION_CONTAINER").IsVisible = () => graphicSettings.Mode != WindowMode.Windowed;
|
||||||
panel.Get("WINDOW_RESOLUTION_CONTAINER").IsVisible = () => ds.Mode == WindowMode.Windowed;
|
panel.Get("WINDOW_RESOLUTION_CONTAINER").IsVisible = () => graphicSettings.Mode == WindowMode.Windowed;
|
||||||
var windowWidth = panel.Get<TextFieldWidget>("WINDOW_WIDTH");
|
var windowWidth = panel.Get<TextFieldWidget>("WINDOW_WIDTH");
|
||||||
var origWidthText = windowWidth.Text = ds.WindowedSize.X.ToString(NumberFormatInfo.CurrentInfo);
|
var origWidthText = windowWidth.Text = graphicSettings.WindowedSize.X.ToString(NumberFormatInfo.CurrentInfo);
|
||||||
|
|
||||||
var windowHeight = panel.Get<TextFieldWidget>("WINDOW_HEIGHT");
|
var windowHeight = panel.Get<TextFieldWidget>("WINDOW_HEIGHT");
|
||||||
var origHeightText = windowHeight.Text = ds.WindowedSize.Y.ToString(NumberFormatInfo.CurrentInfo);
|
var origHeightText = windowHeight.Text = graphicSettings.WindowedSize.Y.ToString(NumberFormatInfo.CurrentInfo);
|
||||||
windowHeight.Text = ds.WindowedSize.Y.ToString(NumberFormatInfo.CurrentInfo);
|
windowHeight.Text = graphicSettings.WindowedSize.Y.ToString(NumberFormatInfo.CurrentInfo);
|
||||||
|
|
||||||
var restartDesc = panel.Get("VIDEO_RESTART_REQUIRED_DESC");
|
var restartDesc = panel.Get("VIDEO_RESTART_REQUIRED_DESC");
|
||||||
restartDesc.IsVisible = () => ds.Mode != OriginalGraphicsMode || ds.VideoDisplay != OriginalVideoDisplay || ds.GLProfile != OriginalGLProfile ||
|
restartDesc.IsVisible = () => graphicSettings.Mode != originalGraphicSettings.Mode ||
|
||||||
(ds.Mode == WindowMode.Windowed && (origWidthText != windowWidth.Text || origHeightText != windowHeight.Text));
|
graphicSettings.VideoDisplay != originalGraphicSettings.VideoDisplay ||
|
||||||
|
graphicSettings.GLProfile != originalGraphicSettings.GLProfile ||
|
||||||
|
(graphicSettings.Mode == WindowMode.Windowed && (origWidthText != windowWidth.Text || origHeightText != windowHeight.Text));
|
||||||
|
|
||||||
var frameLimitGamespeedCheckbox = panel.Get<CheckboxWidget>("FRAME_LIMIT_GAMESPEED_CHECKBOX");
|
var frameLimitGamespeedCheckbox = panel.Get<CheckboxWidget>("FRAME_LIMIT_GAMESPEED_CHECKBOX");
|
||||||
var frameLimitCheckbox = panel.Get<CheckboxWidget>("FRAME_LIMIT_CHECKBOX");
|
var frameLimitCheckbox = panel.Get<CheckboxWidget>("FRAME_LIMIT_CHECKBOX");
|
||||||
var frameLimitLabel = new CachedTransform<int, string>(fps => FluentProvider.GetMessage(FrameLimiter, "fps", fps));
|
var frameLimitLabel = new CachedTransform<int, string>(fps => FluentProvider.GetMessage(FrameLimiter, "fps", fps));
|
||||||
frameLimitCheckbox.GetText = () => frameLimitLabel.Update(ds.MaxFramerate);
|
frameLimitCheckbox.GetText = () => frameLimitLabel.Update(graphicSettings.MaxFramerate);
|
||||||
frameLimitCheckbox.IsDisabled = () => ds.CapFramerateToGameFps;
|
frameLimitCheckbox.IsDisabled = () => graphicSettings.CapFramerateToGameFps;
|
||||||
|
|
||||||
panel.Get<SliderWidget>("FRAME_LIMIT_SLIDER").IsDisabled = () => !frameLimitCheckbox.IsChecked() || frameLimitGamespeedCheckbox.IsChecked();
|
panel.Get<SliderWidget>("FRAME_LIMIT_SLIDER").IsDisabled = () => !frameLimitCheckbox.IsChecked() || frameLimitGamespeedCheckbox.IsChecked();
|
||||||
|
|
||||||
// Player profile
|
|
||||||
var ps = Game.Settings.Player;
|
|
||||||
|
|
||||||
var escPressed = false;
|
var escPressed = false;
|
||||||
var nameTextfield = panel.Get<TextFieldWidget>("PLAYERNAME");
|
var nameTextfield = panel.Get<TextFieldWidget>("PLAYERNAME");
|
||||||
nameTextfield.IsDisabled = () => world.Type != WorldType.Shellmap;
|
nameTextfield.IsDisabled = () => world.Type != WorldType.Shellmap;
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
|
nameTextfield.Text = Settings.SanitizedPlayerName(playerSettings.Name);
|
||||||
nameTextfield.OnLoseFocus = () =>
|
nameTextfield.OnLoseFocus = () =>
|
||||||
{
|
{
|
||||||
if (escPressed)
|
if (escPressed)
|
||||||
@@ -265,18 +253,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
nameTextfield.Text = nameTextfield.Text.Trim();
|
nameTextfield.Text = nameTextfield.Text.Trim();
|
||||||
if (nameTextfield.Text.Length == 0)
|
if (nameTextfield.Text.Length == 0)
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
|
nameTextfield.Text = Settings.SanitizedPlayerName(playerSettings.Name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
|
nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
|
||||||
ps.Name = nameTextfield.Text;
|
playerSettings.Name = nameTextfield.Text;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
nameTextfield.OnEnterKey = _ => { nameTextfield.YieldKeyboardFocus(); return true; };
|
nameTextfield.OnEnterKey = _ => { nameTextfield.YieldKeyboardFocus(); return true; };
|
||||||
nameTextfield.OnEscKey = _ =>
|
nameTextfield.OnEscKey = _ =>
|
||||||
{
|
{
|
||||||
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
|
nameTextfield.Text = Settings.SanitizedPlayerName(playerSettings.Name);
|
||||||
escPressed = true;
|
escPressed = true;
|
||||||
nameTextfield.YieldKeyboardFocus();
|
nameTextfield.YieldKeyboardFocus();
|
||||||
return true;
|
return true;
|
||||||
@@ -286,12 +274,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
var colorDropdown = panel.Get<DropDownButtonWidget>("PLAYERCOLOR");
|
var colorDropdown = panel.Get<DropDownButtonWidget>("PLAYERCOLOR");
|
||||||
colorDropdown.IsDisabled = () => world.Type != WorldType.Shellmap;
|
colorDropdown.IsDisabled = () => world.Type != WorldType.Shellmap;
|
||||||
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, ps.Color, null, worldRenderer, color =>
|
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, playerSettings.Color, null, worldRenderer, color =>
|
||||||
{
|
{
|
||||||
ps.Color = color;
|
playerSettings.Color = color;
|
||||||
Game.Settings.Save();
|
playerSettings.Save();
|
||||||
});
|
});
|
||||||
colorDropdown.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => ps.Color;
|
colorDropdown.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => playerSettings.Color;
|
||||||
|
|
||||||
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
||||||
|
|
||||||
@@ -299,54 +287,51 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
int.TryParse(windowWidth.Text, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out var x);
|
int.TryParse(windowWidth.Text, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out var x);
|
||||||
int.TryParse(windowHeight.Text, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out var y);
|
int.TryParse(windowHeight.Text, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out var y);
|
||||||
ds.WindowedSize = new int2(x, y);
|
graphicSettings.WindowedSize = new int2(x, y);
|
||||||
nameTextfield.YieldKeyboardFocus();
|
nameTextfield.YieldKeyboardFocus();
|
||||||
|
|
||||||
return ds.Mode != OriginalGraphicsMode ||
|
return graphicSettings.Mode != originalGraphicSettings.Mode ||
|
||||||
ds.VideoDisplay != OriginalVideoDisplay ||
|
graphicSettings.VideoDisplay != originalGraphicSettings.VideoDisplay ||
|
||||||
ds.WindowedSize != OriginalGraphicsWindowedSize ||
|
graphicSettings.WindowedSize != originalGraphicSettings.WindowedSize ||
|
||||||
ds.FullscreenSize != OriginalGraphicsFullscreenSize ||
|
graphicSettings.FullscreenSize != originalGraphicSettings.FullscreenSize ||
|
||||||
ds.GLProfile != OriginalGLProfile;
|
graphicSettings.GLProfile != originalGraphicSettings.GLProfile;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Action ResetPanel(Widget panel)
|
Action ResetPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var ds = Game.Settings.Graphics;
|
var defaultGameSettings = new GameSettings();
|
||||||
var ps = Game.Settings.Player;
|
var defaultGraphicSettings = new GraphicSettings();
|
||||||
var gs = Game.Settings.Game;
|
var defaultPlayerSettings = new PlayerSettings();
|
||||||
var dds = new GraphicSettings();
|
|
||||||
var dps = new PlayerSettings();
|
|
||||||
var dgs = new GameSettings();
|
|
||||||
return () =>
|
return () =>
|
||||||
{
|
{
|
||||||
ds.CapFramerate = dds.CapFramerate;
|
graphicSettings.CapFramerate = defaultGraphicSettings.CapFramerate;
|
||||||
ds.MaxFramerate = dds.MaxFramerate;
|
graphicSettings.MaxFramerate = defaultGraphicSettings.MaxFramerate;
|
||||||
ds.CapFramerateToGameFps = dds.CapFramerateToGameFps;
|
graphicSettings.CapFramerateToGameFps = defaultGraphicSettings.CapFramerateToGameFps;
|
||||||
ds.GLProfile = dds.GLProfile;
|
graphicSettings.GLProfile = defaultGraphicSettings.GLProfile;
|
||||||
ds.Mode = dds.Mode;
|
graphicSettings.Mode = defaultGraphicSettings.Mode;
|
||||||
ds.VideoDisplay = dds.VideoDisplay;
|
graphicSettings.VideoDisplay = defaultGraphicSettings.VideoDisplay;
|
||||||
ds.WindowedSize = dds.WindowedSize;
|
graphicSettings.WindowedSize = defaultGraphicSettings.WindowedSize;
|
||||||
ds.CursorDouble = dds.CursorDouble;
|
graphicSettings.CursorDouble = defaultGraphicSettings.CursorDouble;
|
||||||
ds.ViewportDistance = dds.ViewportDistance;
|
graphicSettings.ViewportDistance = defaultGraphicSettings.ViewportDistance;
|
||||||
|
|
||||||
if (ds.UIScale != dds.UIScale)
|
if (graphicSettings.UIScale != defaultGraphicSettings.UIScale)
|
||||||
{
|
{
|
||||||
var oldScale = ds.UIScale;
|
var oldScale = graphicSettings.UIScale;
|
||||||
ds.UIScale = dds.UIScale;
|
graphicSettings.UIScale = defaultGraphicSettings.UIScale;
|
||||||
Game.Renderer.SetUIScale(dds.UIScale);
|
Game.Renderer.SetUIScale(defaultGraphicSettings.UIScale);
|
||||||
RecalculateWidgetLayout(Ui.Root);
|
RecalculateWidgetLayout(Ui.Root);
|
||||||
Viewport.LastMousePos = (Viewport.LastMousePos.ToFloat2() * oldScale / ds.UIScale).ToInt2();
|
Viewport.LastMousePos = (Viewport.LastMousePos.ToFloat2() * oldScale / graphicSettings.UIScale).ToInt2();
|
||||||
}
|
}
|
||||||
|
|
||||||
ps.Color = dps.Color;
|
playerSettings.Color = defaultPlayerSettings.Color;
|
||||||
ps.Name = dps.Name;
|
playerSettings.Name = defaultPlayerSettings.Name;
|
||||||
|
|
||||||
gs.TextNotificationPoolFilters = dgs.TextNotificationPoolFilters;
|
gameSettings.TextNotificationPoolFilters = defaultGameSettings.TextNotificationPoolFilters;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowWindowModeDropdown(DropDownButtonWidget dropdown, GraphicSettings s, ScrollPanelWidget scrollPanel)
|
static void ShowWindowModeDropdown(DropDownButtonWidget dropdown, GraphicSettings graphicSettings, ScrollPanelWidget scrollPanel)
|
||||||
{
|
{
|
||||||
var options = new Dictionary<string, WindowMode>()
|
var options = new Dictionary<string, WindowMode>()
|
||||||
{
|
{
|
||||||
@@ -358,10 +343,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.Mode == options[o],
|
() => graphicSettings.Mode == options[o],
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
s.Mode = options[o];
|
graphicSettings.Mode = options[o];
|
||||||
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -372,30 +357,30 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void BindTextNotificationPoolFilterSettings(Widget panel, GameSettings gs)
|
public static void BindTextNotificationPoolFilterSettings(Widget panel, GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
void ToggleFilterFlag(TextNotificationPoolFilters f)
|
void ToggleFilterFlag(TextNotificationPoolFilters f)
|
||||||
{
|
{
|
||||||
gs.TextNotificationPoolFilters ^= f;
|
gameSettings.TextNotificationPoolFilters ^= f;
|
||||||
Game.Settings.Save();
|
gameSettings.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
var feedbackCheckbox = panel.GetOrNull<CheckboxWidget>("UI_FEEDBACK_CHECKBOX");
|
var feedbackCheckbox = panel.GetOrNull<CheckboxWidget>("UI_FEEDBACK_CHECKBOX");
|
||||||
if (feedbackCheckbox != null)
|
if (feedbackCheckbox != null)
|
||||||
{
|
{
|
||||||
feedbackCheckbox.IsChecked = () => gs.TextNotificationPoolFilters.HasFlag(TextNotificationPoolFilters.Feedback);
|
feedbackCheckbox.IsChecked = () => gameSettings.TextNotificationPoolFilters.HasFlag(TextNotificationPoolFilters.Feedback);
|
||||||
feedbackCheckbox.OnClick = () => ToggleFilterFlag(TextNotificationPoolFilters.Feedback);
|
feedbackCheckbox.OnClick = () => ToggleFilterFlag(TextNotificationPoolFilters.Feedback);
|
||||||
}
|
}
|
||||||
|
|
||||||
var transientsCheckbox = panel.GetOrNull<CheckboxWidget>("TRANSIENTS_CHECKBOX");
|
var transientsCheckbox = panel.GetOrNull<CheckboxWidget>("TRANSIENTS_CHECKBOX");
|
||||||
if (transientsCheckbox != null)
|
if (transientsCheckbox != null)
|
||||||
{
|
{
|
||||||
transientsCheckbox.IsChecked = () => gs.TextNotificationPoolFilters.HasFlag(TextNotificationPoolFilters.Transients);
|
transientsCheckbox.IsChecked = () => gameSettings.TextNotificationPoolFilters.HasFlag(TextNotificationPoolFilters.Transients);
|
||||||
transientsCheckbox.OnClick = () => ToggleFilterFlag(TextNotificationPoolFilters.Transients);
|
transientsCheckbox.OnClick = () => ToggleFilterFlag(TextNotificationPoolFilters.Transients);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowStatusBarsDropdown(DropDownButtonWidget dropdown, GameSettings s)
|
static void ShowStatusBarsDropdown(DropDownButtonWidget dropdown, GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
var options = new Dictionary<string, StatusBarsType>()
|
var options = new Dictionary<string, StatusBarsType>()
|
||||||
{
|
{
|
||||||
@@ -407,8 +392,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.StatusBars == options[o],
|
() => gameSettings.StatusBars == options[o],
|
||||||
() => s.StatusBars = options[o]);
|
() => gameSettings.StatusBars = options[o]);
|
||||||
|
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||||
return item;
|
return item;
|
||||||
@@ -417,13 +402,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowDisplaySelectionDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
|
static void ShowDisplaySelectionDropdown(DropDownButtonWidget dropdown, GraphicSettings graphicSettings)
|
||||||
{
|
{
|
||||||
ScrollItemWidget SetupItem(int o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(int o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.VideoDisplay == o,
|
() => graphicSettings.VideoDisplay == o,
|
||||||
() => s.VideoDisplay = o);
|
() => graphicSettings.VideoDisplay = o);
|
||||||
|
|
||||||
var label = $"Display {o + 1}";
|
var label = $"Display {o + 1}";
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||||
@@ -433,13 +418,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Enumerable.Range(0, Game.Renderer.DisplayCount), SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Enumerable.Range(0, Game.Renderer.DisplayCount), SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowGLProfileDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
|
static void ShowGLProfileDropdown(DropDownButtonWidget dropdown, GraphicSettings graphicSettings)
|
||||||
{
|
{
|
||||||
ScrollItemWidget SetupItem(GLProfile o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(GLProfile o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.GLProfile == o,
|
() => graphicSettings.GLProfile == o,
|
||||||
() => s.GLProfile = o);
|
() => graphicSettings.GLProfile = o);
|
||||||
|
|
||||||
var label = o.ToString();
|
var label = o.ToString();
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||||
@@ -450,7 +435,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, profiles, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, profiles, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowTargetLinesDropdown(DropDownButtonWidget dropdown, GameSettings s)
|
static void ShowTargetLinesDropdown(DropDownButtonWidget dropdown, GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
var options = new Dictionary<string, TargetLinesType>()
|
var options = new Dictionary<string, TargetLinesType>()
|
||||||
{
|
{
|
||||||
@@ -462,8 +447,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.TargetLines == options[o],
|
() => gameSettings.TargetLines == options[o],
|
||||||
() => s.TargetLines = options[o]);
|
() => gameSettings.TargetLines = options[o]);
|
||||||
|
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||||
return item;
|
return item;
|
||||||
@@ -472,13 +457,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ShowBattlefieldCameraDropdown(ModData modData, DropDownButtonWidget dropdown, WorldViewportSizes viewportSizes, GraphicSettings gs)
|
public static void ShowBattlefieldCameraDropdown(ModData modData, DropDownButtonWidget dropdown,
|
||||||
|
WorldViewportSizes viewportSizes, GraphicSettings graphicSettings)
|
||||||
{
|
{
|
||||||
ScrollItemWidget SetupItem(WorldViewport o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(WorldViewport o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => gs.ViewportDistance == o,
|
() => graphicSettings.ViewportDistance == o,
|
||||||
() => gs.ViewportDistance = o);
|
() => graphicSettings.ViewportDistance = o);
|
||||||
|
|
||||||
var label = GetViewportSizeName(modData, o);
|
var label = GetViewportSizeName(modData, o);
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
item.Get<LabelWidget>("LABEL").GetText = () => label;
|
||||||
@@ -543,22 +529,22 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
RecalculateWidgetLayout(c, insideScrollPanel || w is ScrollPanelWidget);
|
RecalculateWidgetLayout(c, insideScrollPanel || w is ScrollPanelWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ShowUIScaleDropdown(DropDownButtonWidget dropdown, GraphicSettings gs)
|
public static void ShowUIScaleDropdown(DropDownButtonWidget dropdown, GraphicSettings graphicSettings)
|
||||||
{
|
{
|
||||||
ScrollItemWidget SetupItem(float o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(float o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => gs.UIScale == o,
|
() => graphicSettings.UIScale == o,
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
Game.RunAfterTick(() =>
|
Game.RunAfterTick(() =>
|
||||||
{
|
{
|
||||||
var oldScale = gs.UIScale;
|
var oldScale = graphicSettings.UIScale;
|
||||||
gs.UIScale = o;
|
graphicSettings.UIScale = o;
|
||||||
|
|
||||||
Game.Renderer.SetUIScale(o);
|
Game.Renderer.SetUIScale(o);
|
||||||
RecalculateWidgetLayout(Ui.Root);
|
RecalculateWidgetLayout(Ui.Root);
|
||||||
Viewport.LastMousePos = (Viewport.LastMousePos.ToFloat2() * oldScale / gs.UIScale).ToInt2();
|
Viewport.LastMousePos = (Viewport.LastMousePos.ToFloat2() * oldScale / graphicSettings.UIScale).ToInt2();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -35,11 +35,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
readonly AutoSaveSettings autoSaveSettings;
|
readonly AutoSaveSettings autoSaveSettings;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public GameplaySettingsLogic(ModData modData, Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>> registerPanel,
|
public GameplaySettingsLogic(ModData modData, SettingsLogic settingsLogic, string panelID, string label)
|
||||||
string panelID, string label)
|
|
||||||
{
|
{
|
||||||
autoSaveSettings = modData.GetSettings<AutoSaveSettings>();
|
autoSaveSettings = modData.GetSettings<AutoSaveSettings>();
|
||||||
registerPanel(panelID, label, InitPanel, ResetPanel);
|
settingsLogic.RegisterSettingsPanel(panelID, label, InitPanel, ResetPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Func<bool> InitPanel(Widget panel)
|
Func<bool> InitPanel(Widget panel)
|
||||||
@@ -79,7 +78,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
autoSaveSettings.AutoSaveInterval = o;
|
autoSaveSettings.AutoSaveInterval = o;
|
||||||
Game.Settings.Save();
|
autoSaveSettings.Save();
|
||||||
});
|
});
|
||||||
|
|
||||||
var deviceLabel = item.Get<LabelWidget>("LABEL");
|
var deviceLabel = item.Get<LabelWidget>("LABEL");
|
||||||
@@ -100,7 +99,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
autoSaveSettings.AutoSaveMaxFileCount = o;
|
autoSaveSettings.AutoSaveMaxFileCount = o;
|
||||||
Game.Settings.Save();
|
autoSaveSettings.Save();
|
||||||
});
|
});
|
||||||
|
|
||||||
var deviceLabel = item.Get<LabelWidget>("LABEL");
|
var deviceLabel = item.Get<LabelWidget>("LABEL");
|
||||||
|
|||||||
@@ -60,17 +60,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
Widget emptyListMessage;
|
Widget emptyListMessage;
|
||||||
Widget remapDialog;
|
Widget remapDialog;
|
||||||
|
|
||||||
static HotkeysSettingsLogic() { }
|
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public HotkeysSettingsLogic(
|
public HotkeysSettingsLogic(ModData modData, SettingsLogic settingsLogic, string panelID, string label, Dictionary<string, MiniYaml> logicArgs)
|
||||||
Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>> registerPanel,
|
|
||||||
string panelID, string label, ModData modData, Dictionary<string, MiniYaml> logicArgs)
|
|
||||||
{
|
{
|
||||||
this.modData = modData;
|
this.modData = modData;
|
||||||
this.logicArgs = logicArgs;
|
this.logicArgs = logicArgs;
|
||||||
|
|
||||||
registerPanel(panelID, label, InitPanel, ResetPanel);
|
settingsLogic.RegisterSettingsPanel(panelID, label, InitPanel, ResetPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BindHotkeyPref(HotkeyDefinition hd, Widget template)
|
void BindHotkeyPref(HotkeyDefinition hd, Widget template)
|
||||||
|
|||||||
@@ -36,71 +36,70 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
[FluentReference]
|
[FluentReference]
|
||||||
const string Joystick = "options-mouse-scroll-type.joystick";
|
const string Joystick = "options-mouse-scroll-type.joystick";
|
||||||
|
|
||||||
static InputSettingsLogic() { }
|
|
||||||
|
|
||||||
readonly string classic;
|
readonly string classic;
|
||||||
readonly string modern;
|
readonly string modern;
|
||||||
|
readonly GameSettings gameSettings;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public InputSettingsLogic(Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>> registerPanel, string panelID, string label)
|
public InputSettingsLogic(ModData modData, SettingsLogic settingsLogic, string panelID, string label)
|
||||||
{
|
{
|
||||||
classic = FluentProvider.GetMessage(Classic);
|
classic = FluentProvider.GetMessage(Classic);
|
||||||
modern = FluentProvider.GetMessage(Modern);
|
modern = FluentProvider.GetMessage(Modern);
|
||||||
|
gameSettings = modData.GetSettings<GameSettings>();
|
||||||
|
|
||||||
registerPanel(panelID, label, InitPanel, ResetPanel);
|
settingsLogic.RegisterSettingsPanel(panelID, label, InitPanel, ResetPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Func<bool> InitPanel(Widget panel)
|
Func<bool> InitPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var gs = Game.Settings.Game;
|
|
||||||
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
|
||||||
|
|
||||||
SettingsUtils.BindCheckboxPref(panel, "ALTERNATE_SCROLL_CHECKBOX", gs, "UseAlternateScrollButton");
|
SettingsUtils.BindCheckboxPref(panel, "ALTERNATE_SCROLL_CHECKBOX", gameSettings, "UseAlternateScrollButton");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "EDGESCROLL_CHECKBOX", gs, "ViewportEdgeScroll");
|
SettingsUtils.BindCheckboxPref(panel, "EDGESCROLL_CHECKBOX", gameSettings, "ViewportEdgeScroll");
|
||||||
SettingsUtils.BindCheckboxPref(panel, "LOCKMOUSE_CHECKBOX", gs, "LockMouseWindow");
|
SettingsUtils.BindCheckboxPref(panel, "LOCKMOUSE_CHECKBOX", gameSettings, "LockMouseWindow");
|
||||||
SettingsUtils.BindSliderPref(panel, "ZOOMSPEED_SLIDER", gs, "ZoomSpeed");
|
SettingsUtils.BindSliderPref(panel, "ZOOMSPEED_SLIDER", gameSettings, "ZoomSpeed");
|
||||||
SettingsUtils.BindSliderPref(panel, "SCROLLSPEED_SLIDER", gs, "ViewportEdgeScrollStep");
|
SettingsUtils.BindSliderPref(panel, "SCROLLSPEED_SLIDER", gameSettings, "ViewportEdgeScrollStep");
|
||||||
SettingsUtils.BindSliderPref(panel, "UI_SCROLLSPEED_SLIDER", gs, "UIScrollSpeed");
|
SettingsUtils.BindSliderPref(panel, "UI_SCROLLSPEED_SLIDER", gameSettings, "UIScrollSpeed");
|
||||||
|
|
||||||
var mouseControlDropdown = panel.Get<DropDownButtonWidget>("MOUSE_CONTROL_DROPDOWN");
|
var mouseControlDropdown = panel.Get<DropDownButtonWidget>("MOUSE_CONTROL_DROPDOWN");
|
||||||
mouseControlDropdown.OnMouseDown = _ => ShowMouseControlDropdown(mouseControlDropdown, gs);
|
mouseControlDropdown.OnMouseDown = _ => ShowMouseControlDropdown(mouseControlDropdown, gameSettings);
|
||||||
mouseControlDropdown.GetText = () => gs.UseClassicMouseStyle ? classic : modern;
|
mouseControlDropdown.GetText = () => gameSettings.UseClassicMouseStyle ? classic : modern;
|
||||||
|
|
||||||
var mouseScrollDropdown = panel.Get<DropDownButtonWidget>("MOUSE_SCROLL_TYPE_DROPDOWN");
|
var mouseScrollDropdown = panel.Get<DropDownButtonWidget>("MOUSE_SCROLL_TYPE_DROPDOWN");
|
||||||
mouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(mouseScrollDropdown, gs);
|
mouseScrollDropdown.OnMouseDown = _ => ShowMouseScrollDropdown(mouseScrollDropdown, gameSettings);
|
||||||
|
|
||||||
// MouseScroll can change, must display latest value.
|
// MouseScroll can change, must display latest value.
|
||||||
#pragma warning disable IDE0200 // Remove unnecessary lambda expression
|
#pragma warning disable IDE0200 // Remove unnecessary lambda expression
|
||||||
mouseScrollDropdown.GetText = () => gs.MouseScroll.ToString();
|
mouseScrollDropdown.GetText = () => gameSettings.MouseScroll.ToString();
|
||||||
#pragma warning restore IDE0200
|
#pragma warning restore IDE0200
|
||||||
|
|
||||||
var mouseControlDescClassic = panel.Get("MOUSE_CONTROL_DESC_CLASSIC");
|
var mouseControlDescClassic = panel.Get("MOUSE_CONTROL_DESC_CLASSIC");
|
||||||
mouseControlDescClassic.IsVisible = () => gs.UseClassicMouseStyle;
|
mouseControlDescClassic.IsVisible = () => gameSettings.UseClassicMouseStyle;
|
||||||
|
|
||||||
var mouseControlDescModern = panel.Get("MOUSE_CONTROL_DESC_MODERN");
|
var mouseControlDescModern = panel.Get("MOUSE_CONTROL_DESC_MODERN");
|
||||||
mouseControlDescModern.IsVisible = () => !gs.UseClassicMouseStyle;
|
mouseControlDescModern.IsVisible = () => !gameSettings.UseClassicMouseStyle;
|
||||||
|
|
||||||
foreach (var container in new[] { mouseControlDescClassic, mouseControlDescModern })
|
foreach (var container in new[] { mouseControlDescClassic, mouseControlDescModern })
|
||||||
{
|
{
|
||||||
var classicScrollRight = container.Get("DESC_SCROLL_RIGHT");
|
var classicScrollRight = container.Get("DESC_SCROLL_RIGHT");
|
||||||
classicScrollRight.IsVisible = () => gs.UseClassicMouseStyle ^ gs.UseAlternateScrollButton;
|
classicScrollRight.IsVisible = () => gameSettings.UseClassicMouseStyle ^ gameSettings.UseAlternateScrollButton;
|
||||||
|
|
||||||
var classicScrollMiddle = container.Get("DESC_SCROLL_MIDDLE");
|
var classicScrollMiddle = container.Get("DESC_SCROLL_MIDDLE");
|
||||||
classicScrollMiddle.IsVisible = () => !gs.UseClassicMouseStyle ^ gs.UseAlternateScrollButton;
|
classicScrollMiddle.IsVisible = () => !gameSettings.UseClassicMouseStyle ^ gameSettings.UseAlternateScrollButton;
|
||||||
|
|
||||||
var zoomDesc = container.Get("DESC_ZOOM");
|
var zoomDesc = container.Get("DESC_ZOOM");
|
||||||
zoomDesc.IsVisible = () => gs.ZoomModifier == Modifiers.None;
|
zoomDesc.IsVisible = () => gameSettings.ZoomModifier == Modifiers.None;
|
||||||
|
|
||||||
var zoomDescModifier = container.Get<LabelWidget>("DESC_ZOOM_MODIFIER");
|
var zoomDescModifier = container.Get<LabelWidget>("DESC_ZOOM_MODIFIER");
|
||||||
zoomDescModifier.IsVisible = () => gs.ZoomModifier != Modifiers.None;
|
zoomDescModifier.IsVisible = () => gameSettings.ZoomModifier != Modifiers.None;
|
||||||
|
|
||||||
var zoomDescModifierTemplate = zoomDescModifier.GetText();
|
var zoomDescModifierTemplate = zoomDescModifier.GetText();
|
||||||
var zoomDescModifierLabel = new CachedTransform<Modifiers, string>(
|
var zoomDescModifierLabel = new CachedTransform<Modifiers, string>(
|
||||||
mod => zoomDescModifierTemplate.Replace("MODIFIER", mod.ToString()));
|
mod => zoomDescModifierTemplate.Replace("MODIFIER", mod.ToString()));
|
||||||
zoomDescModifier.GetText = () => zoomDescModifierLabel.Update(gs.ZoomModifier);
|
zoomDescModifier.GetText = () => zoomDescModifierLabel.Update(gameSettings.ZoomModifier);
|
||||||
|
|
||||||
var edgescrollDesc = container.Get<LabelWidget>("DESC_EDGESCROLL");
|
var edgescrollDesc = container.Get<LabelWidget>("DESC_EDGESCROLL");
|
||||||
edgescrollDesc.IsVisible = () => gs.ViewportEdgeScroll;
|
edgescrollDesc.IsVisible = () => gameSettings.ViewportEdgeScroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply mouse focus preferences immediately
|
// Apply mouse focus preferences immediately
|
||||||
@@ -112,15 +111,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
// applying the changes live.
|
// applying the changes live.
|
||||||
oldOnClick();
|
oldOnClick();
|
||||||
|
|
||||||
MakeMouseFocusSettingsLive();
|
MakeMouseFocusSettingsLive(gameSettings);
|
||||||
};
|
};
|
||||||
|
|
||||||
var zoomModifierDropdown = panel.Get<DropDownButtonWidget>("ZOOM_MODIFIER");
|
var zoomModifierDropdown = panel.Get<DropDownButtonWidget>("ZOOM_MODIFIER");
|
||||||
zoomModifierDropdown.OnMouseDown = _ => ShowZoomModifierDropdown(zoomModifierDropdown, gs);
|
zoomModifierDropdown.OnMouseDown = _ => ShowZoomModifierDropdown(zoomModifierDropdown, gameSettings);
|
||||||
|
|
||||||
// ZoomModifier can change, must display latest value.
|
// ZoomModifier can change, must display latest value.
|
||||||
#pragma warning disable IDE0200 // Remove unnecessary lambda expression
|
#pragma warning disable IDE0200 // Remove unnecessary lambda expression
|
||||||
zoomModifierDropdown.GetText = () => gs.ZoomModifier.ToString();
|
zoomModifierDropdown.GetText = () => gameSettings.ZoomModifier.ToString();
|
||||||
#pragma warning restore IDE0200
|
#pragma warning restore IDE0200
|
||||||
|
|
||||||
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
SettingsUtils.AdjustSettingsScrollPanelLayout(scrollPanel);
|
||||||
@@ -130,29 +129,28 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
Action ResetPanel(Widget panel)
|
Action ResetPanel(Widget panel)
|
||||||
{
|
{
|
||||||
var gs = Game.Settings.Game;
|
var defaultGameSettings = new GameSettings();
|
||||||
var dgs = new GameSettings();
|
|
||||||
|
|
||||||
return () =>
|
return () =>
|
||||||
{
|
{
|
||||||
gs.UseClassicMouseStyle = dgs.UseClassicMouseStyle;
|
gameSettings.UseClassicMouseStyle = defaultGameSettings.UseClassicMouseStyle;
|
||||||
gs.MouseScroll = dgs.MouseScroll;
|
gameSettings.MouseScroll = defaultGameSettings.MouseScroll;
|
||||||
gs.UseAlternateScrollButton = dgs.UseAlternateScrollButton;
|
gameSettings.UseAlternateScrollButton = defaultGameSettings.UseAlternateScrollButton;
|
||||||
gs.LockMouseWindow = dgs.LockMouseWindow;
|
gameSettings.LockMouseWindow = defaultGameSettings.LockMouseWindow;
|
||||||
gs.ViewportEdgeScroll = dgs.ViewportEdgeScroll;
|
gameSettings.ViewportEdgeScroll = defaultGameSettings.ViewportEdgeScroll;
|
||||||
gs.ViewportEdgeScrollStep = dgs.ViewportEdgeScrollStep;
|
gameSettings.ViewportEdgeScrollStep = defaultGameSettings.ViewportEdgeScrollStep;
|
||||||
gs.ZoomSpeed = dgs.ZoomSpeed;
|
gameSettings.ZoomSpeed = defaultGameSettings.ZoomSpeed;
|
||||||
gs.UIScrollSpeed = dgs.UIScrollSpeed;
|
gameSettings.UIScrollSpeed = defaultGameSettings.UIScrollSpeed;
|
||||||
gs.ZoomModifier = dgs.ZoomModifier;
|
gameSettings.ZoomModifier = defaultGameSettings.ZoomModifier;
|
||||||
|
|
||||||
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
|
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gameSettings.ViewportEdgeScrollStep;
|
||||||
panel.Get<SliderWidget>("UI_SCROLLSPEED_SLIDER").Value = gs.UIScrollSpeed;
|
panel.Get<SliderWidget>("UI_SCROLLSPEED_SLIDER").Value = gameSettings.UIScrollSpeed;
|
||||||
|
|
||||||
MakeMouseFocusSettingsLive();
|
MakeMouseFocusSettingsLive(gameSettings);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ShowMouseControlDropdown(DropDownButtonWidget dropdown, GameSettings s)
|
public static void ShowMouseControlDropdown(DropDownButtonWidget dropdown, GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
var options = new Dictionary<string, bool>()
|
var options = new Dictionary<string, bool>()
|
||||||
{
|
{
|
||||||
@@ -163,8 +161,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.UseClassicMouseStyle == options[o],
|
() => gameSettings.UseClassicMouseStyle == options[o],
|
||||||
() => s.UseClassicMouseStyle = options[o]);
|
() => gameSettings.UseClassicMouseStyle = options[o]);
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@@ -172,7 +170,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowMouseScrollDropdown(DropDownButtonWidget dropdown, GameSettings s)
|
static void ShowMouseScrollDropdown(DropDownButtonWidget dropdown, GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
var options = new Dictionary<string, MouseScrollType>()
|
var options = new Dictionary<string, MouseScrollType>()
|
||||||
{
|
{
|
||||||
@@ -185,8 +183,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.MouseScroll == options[o],
|
() => gameSettings.MouseScroll == options[o],
|
||||||
() => s.MouseScroll = options[o]);
|
() => gameSettings.MouseScroll = options[o]);
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@@ -194,7 +192,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowZoomModifierDropdown(DropDownButtonWidget dropdown, GameSettings s)
|
static void ShowZoomModifierDropdown(DropDownButtonWidget dropdown, GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
var options = new Dictionary<string, Modifiers>()
|
var options = new Dictionary<string, Modifiers>()
|
||||||
{
|
{
|
||||||
@@ -208,8 +206,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
ScrollItemWidget SetupItem(string o, ScrollItemWidget itemTemplate)
|
||||||
{
|
{
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
() => s.ZoomModifier == options[o],
|
() => gameSettings.ZoomModifier == options[o],
|
||||||
() => s.ZoomModifier = options[o]);
|
() => gameSettings.ZoomModifier = options[o]);
|
||||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@@ -217,10 +215,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, SetupItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MakeMouseFocusSettingsLive()
|
static void MakeMouseFocusSettingsLive(GameSettings gameSettings)
|
||||||
{
|
{
|
||||||
var gameSettings = Game.Settings.Game;
|
|
||||||
|
|
||||||
if (gameSettings.LockMouseWindow)
|
if (gameSettings.LockMouseWindow)
|
||||||
Game.Renderer.GrabWindowMouseFocus();
|
Game.Renderer.GrabWindowMouseFocus();
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -17,7 +17,12 @@ using OpenRA.Widgets;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Common.Widgets.Logic
|
namespace OpenRA.Mods.Common.Widgets.Logic
|
||||||
{
|
{
|
||||||
public class SettingsLogic : ChromeLogic
|
public interface ISettingsLogic
|
||||||
|
{
|
||||||
|
void RegisterSettingsPanel(string panelID, string label, Func<Widget, Func<bool>> init, Func<Widget, Action> reset);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SettingsLogic : ChromeLogic, ISettingsLogic
|
||||||
{
|
{
|
||||||
[FluentReference]
|
[FluentReference]
|
||||||
const string SettingsSaveTitle = "dialog-settings-save.title";
|
const string SettingsSaveTitle = "dialog-settings-save.title";
|
||||||
@@ -64,8 +69,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
bool needsRestart = false;
|
bool needsRestart = false;
|
||||||
|
|
||||||
static SettingsLogic() { }
|
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public SettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs, ModData modData)
|
public SettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer, Dictionary<string, MiniYaml> logicArgs, ModData modData)
|
||||||
{
|
{
|
||||||
@@ -92,7 +95,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
Game.LoadWidget(worldRenderer.World, panel.Key, container, new WidgetArgs()
|
Game.LoadWidget(worldRenderer.World, panel.Key, container, new WidgetArgs()
|
||||||
{
|
{
|
||||||
{ "registerPanel", (Action<string, string, Func<Widget, Func<bool>>, Func<Widget, Action>>)RegisterSettingsPanel },
|
{ "settingsLogic", this },
|
||||||
{ "panelID", panel.Key },
|
{ "panelID", panel.Key },
|
||||||
{ "label", panel.Value }
|
{ "label", panel.Value }
|
||||||
});
|
});
|
||||||
@@ -102,8 +105,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
|
widget.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
needsRestart |= leavePanelActions[activePanel]();
|
needsRestart |= leavePanelActions[activePanel]();
|
||||||
var current = Game.Settings;
|
Game.Settings.Save();
|
||||||
current.Save();
|
|
||||||
|
|
||||||
void CloseAndExit() { Ui.CloseWindow(); onExit(); }
|
void CloseAndExit() { Ui.CloseWindow(); onExit(); }
|
||||||
if (needsRestart)
|
if (needsRestart)
|
||||||
|
|||||||
Reference in New Issue
Block a user