diff --git a/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs b/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs index 45b98b8306..dd12d3e8b7 100644 --- a/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs +++ b/OpenRA.Mods.Common/Traits/World/PaletteFromCurrentTileset.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Collections.Generic; using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Traits; @@ -26,7 +27,7 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new PaletteFromCurrentTileset(init.World, this); } } - class PaletteFromCurrentTileset : ILoadsPalettes + class PaletteFromCurrentTileset : ILoadsPalettes, IProvidesAssetBrowserPalettes { readonly World world; readonly PaletteFromCurrentTilesetInfo info; @@ -41,5 +42,7 @@ namespace OpenRA.Mods.Common.Traits { wr.AddPalette(info.Name, new ImmutablePalette(GlobalFileSystem.Open(world.TileSet.Palette), info.ShadowIndex), info.AllowModifiers); } + + public IEnumerable PaletteNames { get { yield return info.Name; } } } } diff --git a/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs b/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs index f81e54c4d1..f5fa5c7040 100644 --- a/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs +++ b/OpenRA.Mods.Common/Traits/World/PaletteFromFile.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Collections.Generic; using OpenRA.FileSystem; using OpenRA.Graphics; using OpenRA.Traits; @@ -29,7 +30,7 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new PaletteFromFile(init.World, this); } } - class PaletteFromFile : ILoadsPalettes + class PaletteFromFile : ILoadsPalettes, IProvidesAssetBrowserPalettes { readonly World world; readonly PaletteFromFileInfo info; @@ -45,14 +46,14 @@ namespace OpenRA.Mods.Common.Traits wr.AddPalette(info.Name, new ImmutablePalette(GlobalFileSystem.Open(info.Filename), info.ShadowIndex), info.AllowModifiers); } - public string Filename + public IEnumerable PaletteNames { - get { return info.Filename; } - } - - public string Name - { - get { return info.Name; } + get + { + // Only expose the palette if it is available for the shellmap's tileset (which is a requirement for its use). + if (info.Tileset == null || info.Tileset == world.TileSet.Id) + yield return info.Name; + } } } } diff --git a/OpenRA.Mods.Common/Traits/World/ShroudPalette.cs b/OpenRA.Mods.Common/Traits/World/ShroudPalette.cs index 083c59aa33..eca4002cbb 100644 --- a/OpenRA.Mods.Common/Traits/World/ShroudPalette.cs +++ b/OpenRA.Mods.Common/Traits/World/ShroudPalette.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Collections.Generic; using System.Drawing; using System.Linq; using OpenRA.Graphics; @@ -27,7 +28,7 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new ShroudPalette(this); } } - class ShroudPalette : ILoadsPalettes + class ShroudPalette : ILoadsPalettes, IProvidesAssetBrowserPalettes { readonly ShroudPaletteInfo info; @@ -58,5 +59,7 @@ namespace OpenRA.Mods.Common.Traits Color.FromArgb(128, 0, 0, 0), Color.FromArgb(64, 0, 0, 0) }; + + public IEnumerable PaletteNames { get { yield return info.Name; } } } } diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index 654b65021d..ec07d9d23a 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -71,4 +71,9 @@ namespace OpenRA.Mods.Common.Traits CVec DeliveryOffset { get; } bool AllowDocking { get; } } + + public interface IProvidesAssetBrowserPalettes + { + IEnumerable PaletteNames { get; } + } } diff --git a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs index 9c41b22b7c..5e91c1a117 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs @@ -369,9 +369,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic bool ShowPaletteDropdown(DropDownButtonWidget dropdown, World world) { - Func setupItem = (palette, itemTemplate) => + Func setupItem = (name, itemTemplate) => { - var name = palette.Name; var item = ScrollItemWidget.Setup(itemTemplate, () => currentPalette == name, () => currentPalette = name); @@ -380,7 +379,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic return item; }; - var palettes = world.WorldActor.TraitsImplementing(); + var palettes = world.WorldActor.TraitsImplementing() + .SelectMany(p => p.PaletteNames); dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 280, palettes, setupItem); return true; } diff --git a/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs index b5b0913b7d..df51a3b768 100644 --- a/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs +++ b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs @@ -8,9 +8,11 @@ */ #endregion +using System.Collections.Generic; using System.IO; using OpenRA.FileSystem; using OpenRA.Graphics; +using OpenRA.Mods.Common.Traits; using OpenRA.Traits; namespace OpenRA.Mods.D2k.Traits @@ -29,7 +31,7 @@ namespace OpenRA.Mods.D2k.Traits public object Create(ActorInitializer init) { return new FogPaletteFromR8(this); } } - class FogPaletteFromR8 : ILoadsPalettes + class FogPaletteFromR8 : ILoadsPalettes, IProvidesAssetBrowserPalettes { readonly FogPaletteFromR8Info info; public FogPaletteFromR8(FogPaletteFromR8Info info) { this.info = info; } @@ -55,5 +57,7 @@ namespace OpenRA.Mods.D2k.Traits wr.AddPalette(info.Name, new ImmutablePalette(colors), info.AllowModifiers); } + + public IEnumerable PaletteNames { get { yield return info.Name; } } } } diff --git a/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs index fd6c4637e4..6ef623db12 100644 --- a/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs +++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs @@ -8,9 +8,11 @@ */ #endregion +using System.Collections.Generic; using System.IO; using OpenRA.FileSystem; using OpenRA.Graphics; +using OpenRA.Mods.Common.Traits; using OpenRA.Traits; namespace OpenRA.Mods.D2k.Traits @@ -29,7 +31,7 @@ namespace OpenRA.Mods.D2k.Traits public object Create(ActorInitializer init) { return new PaletteFromR8(this); } } - class PaletteFromR8 : ILoadsPalettes + class PaletteFromR8 : ILoadsPalettes, IProvidesAssetBrowserPalettes { readonly PaletteFromR8Info info; public PaletteFromR8(PaletteFromR8Info info) { this.info = info; } @@ -53,5 +55,7 @@ namespace OpenRA.Mods.D2k.Traits wr.AddPalette(info.Name, new ImmutablePalette(colors), info.AllowModifiers); } + + public IEnumerable PaletteNames { get { yield return info.Name; } } } } diff --git a/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs index 99d0338134..d0609df4db 100644 --- a/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs +++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs @@ -8,8 +8,10 @@ */ #endregion +using System.Collections.Generic; using System.Drawing; using OpenRA.Graphics; +using OpenRA.Mods.Common.Traits; using OpenRA.Traits; namespace OpenRA.Mods.D2k.Traits @@ -35,7 +37,7 @@ namespace OpenRA.Mods.D2k.Traits public object Create(ActorInitializer init) { return new PaletteFromScaledPalette(this); } } - class PaletteFromScaledPalette : ILoadsPalettes + class PaletteFromScaledPalette : ILoadsPalettes, IProvidesAssetBrowserPalettes { readonly PaletteFromScaledPaletteInfo info; public PaletteFromScaledPalette(PaletteFromScaledPaletteInfo info) { this.info = info; } @@ -45,6 +47,8 @@ namespace OpenRA.Mods.D2k.Traits var remap = new ScaledPaletteRemap(info.Scale, info.Offset); wr.AddPalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers); } + + public IEnumerable PaletteNames { get { yield return info.Name; } } } class ScaledPaletteRemap : IPaletteRemap diff --git a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj index 8fc3330016..51b8a47797 100644 --- a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj +++ b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj @@ -65,8 +65,8 @@ - +