Skip to content

Commit

Permalink
Added ITilesetSpecificPaletteInfo for linting
Browse files Browse the repository at this point in the history
  • Loading branch information
penev92 authored and pchote committed Jan 10, 2023
1 parent a7ca0f0 commit d5dd6a9
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 9 deletions.
6 changes: 6 additions & 0 deletions OpenRA.Game/Traits/TraitsInterfaces.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,12 @@ public interface IRenderModifier
IEnumerable<Rectangle> ModifyScreenBounds(Actor self, WorldRenderer wr, IEnumerable<Rectangle> r);
}

[RequireExplicitImplementation]
public interface ITilesetSpecificPaletteInfo : ITraitInfoInterface
{
string Tileset { get; }
}

[RequireExplicitImplementation]
public interface IProvidesCursorPaletteInfo : ITraitInfoInterface
{
Expand Down
9 changes: 4 additions & 5 deletions OpenRA.Mods.Common/Lint/CheckPalettes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.Common.Traits;
using OpenRA.Server;
using OpenRA.Traits;

Expand Down Expand Up @@ -146,11 +145,11 @@ void GetPalettes(Ruleset rules, List<string> palettes, List<string> playerPalett
}
else
{
// PaletteFromFile might only be active for a single tileset
// So ignore any duplicate palette names as long as they are on different tilesets
if (traitInfo is PaletteFromFileInfo paletteFromFileInfo && paletteFromFileInfo.Tileset != null)
// Tileset-specific palettes can share a name, so check combinations.
// NOTE: This does not check PaletteFromGimpOrJascFile!
if (traitInfo is ITilesetSpecificPaletteInfo tilesetSpecificPaletteInfo && tilesetSpecificPaletteInfo.Tileset != null)
{
var tilesetPalette = (paletteFromFileInfo.Tileset, value);
var tilesetPalette = (tilesetSpecificPaletteInfo.Tileset, value);
if (tilesetPalettes.Contains(tilesetPalette))
emitError($"Duplicate palette definition for palette name {value}");
else
Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Traits/Palettes/PaletteFromFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Traits
{
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
[Desc("Load VGA palette (.pal) registers.")]
class PaletteFromFileInfo : TraitInfo, IProvidesCursorPaletteInfo
class PaletteFromFileInfo : TraitInfo, ITilesetSpecificPaletteInfo, IProvidesCursorPaletteInfo
{
[PaletteDefinition]
[FieldLoader.Require]
Expand All @@ -46,6 +46,8 @@ class PaletteFromFileInfo : TraitInfo, IProvidesCursorPaletteInfo

public override object Create(ActorInitializer init) { return new PaletteFromFile(init.World, this); }

string ITilesetSpecificPaletteInfo.Tileset => Tileset;

string IProvidesCursorPaletteInfo.Palette => CursorPalette ? Name : null;

ImmutablePalette IProvidesCursorPaletteInfo.ReadPalette(IReadOnlyFileSystem fileSystem)
Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Traits/Palettes/PaletteFromGrayscale.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Traits
{
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
[Desc("Creates a greyscale palette without any base palette file.")]
class PaletteFromGrayscaleInfo : TraitInfo
class PaletteFromGrayscaleInfo : TraitInfo, ITilesetSpecificPaletteInfo
{
[PaletteDefinition]
[FieldLoader.Require]
Expand All @@ -34,6 +34,8 @@ class PaletteFromGrayscaleInfo : TraitInfo
[Desc("Index set to be fully transparent/invisible.")]
public readonly int TransparentIndex = 0;

string ITilesetSpecificPaletteInfo.Tileset => Tileset;

public override object Create(ActorInitializer init) { return new PaletteFromGrayscale(init.World, this); }
}

Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Traits/Palettes/PaletteFromPng.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Traits
{
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
[Desc("Load a PNG and use its embedded palette.")]
class PaletteFromPngInfo : TraitInfo, IProvidesCursorPaletteInfo
class PaletteFromPngInfo : TraitInfo, ITilesetSpecificPaletteInfo, IProvidesCursorPaletteInfo
{
[PaletteDefinition]
[FieldLoader.Require]
Expand All @@ -44,6 +44,8 @@ class PaletteFromPngInfo : TraitInfo, IProvidesCursorPaletteInfo

public override object Create(ActorInitializer init) { return new PaletteFromPng(init.World, this); }

string ITilesetSpecificPaletteInfo.Tileset => Tileset;

string IProvidesCursorPaletteInfo.Palette => CursorPalette ? Name : null;

ImmutablePalette IProvidesCursorPaletteInfo.ReadPalette(IReadOnlyFileSystem fileSystem)
Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Traits/Palettes/PaletteFromRGBA.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Traits
{
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
[Desc("Creates a single color palette without any base palette file.")]
class PaletteFromRGBAInfo : TraitInfo
class PaletteFromRGBAInfo : TraitInfo, ITilesetSpecificPaletteInfo
{
[PaletteDefinition]
[FieldLoader.Require]
Expand All @@ -46,6 +46,8 @@ class PaletteFromRGBAInfo : TraitInfo
[Desc("Index set to be fully transparent/invisible.")]
public readonly int TransparentIndex = 0;

string ITilesetSpecificPaletteInfo.Tileset => Tileset;

public override object Create(ActorInitializer init) { return new PaletteFromRGBA(init.World, this); }
}

Expand Down

0 comments on commit d5dd6a9

Please sign in to comment.