Don’t switch mods from inside button click handlers.
Fixes screen flickering and desyncs when returning to the mod chooser.
This commit is contained in:
@@ -48,7 +48,8 @@ namespace OpenRA.Mods.Common.LoadScreens
|
|||||||
{
|
{
|
||||||
var widgetArgs = new WidgetArgs()
|
var widgetArgs = new WidgetArgs()
|
||||||
{
|
{
|
||||||
{ "continueLoading", () => Game.InitializeMod(Game.Settings.Game.Mod, args) },
|
{ "continueLoading", () => Game.RunAfterTick(() =>
|
||||||
|
Game.InitializeMod(Game.Settings.Game.Mod, args)) },
|
||||||
};
|
};
|
||||||
|
|
||||||
if (installData.BackgroundWidget != null)
|
if (installData.BackgroundWidget != null)
|
||||||
|
|||||||
@@ -36,8 +36,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
|
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
Game.Settings.Game.PreviousMod = Game.ModData.Manifest.Mod.Id;
|
Game.RunAfterTick(() =>
|
||||||
Game.InitializeMod("modchooser", null);
|
{
|
||||||
|
Game.Settings.Game.PreviousMod = Game.ModData.Manifest.Mod.Id;
|
||||||
|
Game.InitializeMod("modchooser", null);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
var installMusicContainer = widget.Get("INSTALL_MUSIC_PANEL");
|
var installMusicContainer = widget.Get("INSTALL_MUSIC_PANEL");
|
||||||
|
|
||||||
|
Action loadDefaultMod = () => Game.RunAfterTick(() =>
|
||||||
|
Game.InitializeMod(Game.Settings.Game.Mod, null));
|
||||||
|
|
||||||
var cancelButton = installMusicContainer.GetOrNull<ButtonWidget>("CANCEL_BUTTON");
|
var cancelButton = installMusicContainer.GetOrNull<ButtonWidget>("CANCEL_BUTTON");
|
||||||
if (cancelButton != null)
|
if (cancelButton != null)
|
||||||
cancelButton.OnClick = () => Game.InitializeMod(Game.Settings.Game.Mod, null);
|
cancelButton.OnClick = loadDefaultMod;
|
||||||
|
|
||||||
var copyFromDiscButton = installMusicContainer.GetOrNull<ButtonWidget>("COPY_FROM_CD_BUTTON");
|
var copyFromDiscButton = installMusicContainer.GetOrNull<ButtonWidget>("COPY_FROM_CD_BUTTON");
|
||||||
if (copyFromDiscButton != null)
|
if (copyFromDiscButton != null)
|
||||||
@@ -34,7 +37,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
copyFromDiscButton.OnClick = () =>
|
copyFromDiscButton.OnClick = () =>
|
||||||
{
|
{
|
||||||
Ui.OpenWindow("INSTALL_FROMCD_PANEL", new WidgetArgs() {
|
Ui.OpenWindow("INSTALL_FROMCD_PANEL", new WidgetArgs() {
|
||||||
{ "continueLoading", () => Game.InitializeMod(Game.Settings.Game.Mod, null) },
|
{ "continueLoading", loadDefaultMod },
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -47,7 +50,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
downloadButton.OnClick = () =>
|
downloadButton.OnClick = () =>
|
||||||
{
|
{
|
||||||
Ui.OpenWindow("INSTALL_DOWNLOAD_PANEL", new WidgetArgs() {
|
Ui.OpenWindow("INSTALL_DOWNLOAD_PANEL", new WidgetArgs() {
|
||||||
{ "afterInstall", () => Game.InitializeMod(Game.Settings.Game.Mod, null) },
|
{ "afterInstall", loadDefaultMod },
|
||||||
{ "mirrorListUrl", installData.MusicPackageMirrorList },
|
{ "mirrorListUrl", installData.MusicPackageMirrorList },
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -54,8 +54,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
mainMenu.Get<ButtonWidget>("MODS_BUTTON").OnClick = () =>
|
mainMenu.Get<ButtonWidget>("MODS_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
Game.Settings.Game.PreviousMod = Game.ModData.Manifest.Mod.Id;
|
// Switching mods changes the world state (by disposing it),
|
||||||
Game.InitializeMod("modchooser", null);
|
// so we can't do this inside the input handler.
|
||||||
|
Game.RunAfterTick(() =>
|
||||||
|
{
|
||||||
|
Game.Settings.Game.PreviousMod = Game.ModData.Manifest.Mod.Id;
|
||||||
|
Game.InitializeMod("modchooser", null);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
mainMenu.Get<ButtonWidget>("SETTINGS_BUTTON").OnClick = () =>
|
mainMenu.Get<ButtonWidget>("SETTINGS_BUTTON").OnClick = () =>
|
||||||
|
|||||||
@@ -87,10 +87,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
installButton.IsDisabled = () => world == null || world.Type != WorldType.Shellmap;
|
installButton.IsDisabled = () => world == null || world.Type != WorldType.Shellmap;
|
||||||
var args = new string[] { "Install.Music=true" };
|
var args = new string[] { "Install.Music=true" };
|
||||||
installButton.OnClick = () =>
|
installButton.OnClick = () =>
|
||||||
{
|
Game.RunAfterTick(() =>
|
||||||
Game.ModData.LoadScreen.Display(); // HACK: prevent a flicker when transitioning to the installation dialog
|
Game.InitializeMod(Game.Settings.Game.Mod, new Arguments(args)));
|
||||||
Game.InitializeMod(Game.Settings.Game.Mod, new Arguments(args));
|
|
||||||
};
|
|
||||||
|
|
||||||
var installData = Game.ModData.Manifest.Get<ContentInstaller>();
|
var installData = Game.ModData.Manifest.Get<ContentInstaller>();
|
||||||
installButton.IsVisible = () => modRules.InstalledMusic.ToArray().Length <= installData.ShippedSoundtracks;
|
installButton.IsVisible = () => modRules.InstalledMusic.ToArray().Length <= installData.ShippedSoundtracks;
|
||||||
|
|||||||
Reference in New Issue
Block a user