From 6fe039f62e7a0b28434686b0a9e6ea719738b58c Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:35:37 +0200 Subject: [PATCH] Add cursors to dump sheets command --- OpenRA.Game/Graphics/CursorManager.cs | 18 +++++++++++------- .../DumpSequenceSheetsCommand.cs | 5 +++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/OpenRA.Game/Graphics/CursorManager.cs b/OpenRA.Game/Graphics/CursorManager.cs index 253416db99..c022edf6d6 100644 --- a/OpenRA.Game/Graphics/CursorManager.cs +++ b/OpenRA.Game/Graphics/CursorManager.cs @@ -30,7 +30,7 @@ namespace OpenRA.Graphics } readonly Dictionary cursors = []; - readonly SheetBuilder sheetBuilder; + public readonly SheetBuilder SheetBuilder; readonly GraphicSettings graphicSettings; Cursor cursor; @@ -44,7 +44,7 @@ namespace OpenRA.Graphics hardwareCursorsDisabled = Game.Settings.Graphics.DisableHardwareCursors; graphicSettings = Game.Settings.Graphics; - sheetBuilder = new SheetBuilder(SheetType.BGRA, cursorSheetSize); + SheetBuilder = new SheetBuilder(SheetType.BGRA, cursorSheetSize); // Sort the cursors for better packing onto the sheet. foreach (var kv in cursorProvider.Cursors @@ -82,7 +82,7 @@ namespace OpenRA.Graphics type = SpriteFrameType.Bgra32; } - c.Sprites[c.Length++] = sheetBuilder.Add(data, type, f.Size, 0, hotspot); + c.Sprites[c.Length++] = SheetBuilder.Add(data, type, f.Size, 0, hotspot); // Bounds relative to the hotspot c.Bounds = Rectangle.Union(c.Bounds, new Rectangle(hotspot, f.Size)); @@ -94,8 +94,12 @@ namespace OpenRA.Graphics cursors.Add(kv.Key, c); } - CreateOrUpdateHardwareCursors(); - Update(); + // Allow the utility to create a cursor manager. + if (Game.Renderer != null) + { + CreateOrUpdateHardwareCursors(); + Update(); + } } void CreateOrUpdateHardwareCursors() @@ -128,7 +132,7 @@ namespace OpenRA.Graphics } } - sheetBuilder.Current?.ReleaseBuffer(); + SheetBuilder.Current?.ReleaseBuffer(); hardwareCursorsDoubled = graphicSettings.CursorDouble; } @@ -293,7 +297,7 @@ namespace OpenRA.Graphics ClearHardwareCursors(); cursors.Clear(); - sheetBuilder.Dispose(); + SheetBuilder.Dispose(); } } } diff --git a/OpenRA.Mods.Common/UtilityCommands/DumpSequenceSheetsCommand.cs b/OpenRA.Mods.Common/UtilityCommands/DumpSequenceSheetsCommand.cs index 5bcf667f73..f06789ee41 100644 --- a/OpenRA.Mods.Common/UtilityCommands/DumpSequenceSheetsCommand.cs +++ b/OpenRA.Mods.Common/UtilityCommands/DumpSequenceSheetsCommand.cs @@ -62,6 +62,11 @@ namespace OpenRA.Mods.Common.UtilityCommands } var sheetCount = 1; + var cursorProvider = new CursorProvider(modData); + using (var cursor = new CursorManager(cursorProvider, modData.Manifest.CursorSheetSize)) + foreach (var sheet in cursor.SheetBuilder.AllSheets) + CommitSheet(null, sheet, "cursors", palette, ref sheetCount); + foreach (var sequence in sequences) { sequence.LoadSprites();