lint check player palette reference
and tell which actor is affected when a problem is found
This commit is contained in:
@@ -58,8 +58,9 @@ namespace OpenRA.Mods.Common.Effects
|
||||
[Desc("Delay in ticks until trail animaion is spawned.")]
|
||||
public readonly int TrailDelay = 1;
|
||||
|
||||
public readonly string TrailPalette = "effect";
|
||||
[PaletteReference("TrailUsePlayerPalette")] public readonly string TrailPalette = "effect";
|
||||
public readonly bool TrailUsePlayerPalette = false;
|
||||
|
||||
public readonly int ContrailLength = 0;
|
||||
public readonly Color ContrailColor = Color.White;
|
||||
public readonly bool ContrailUsePlayerColor = false;
|
||||
|
||||
@@ -59,10 +59,9 @@ namespace OpenRA.Mods.Common.Effects
|
||||
[Desc("Interval in ticks between each spawned Trail animation.")]
|
||||
public readonly int TrailInterval = 2;
|
||||
|
||||
// TODO: Re-add PaletteReference as soon as it handles player palettes
|
||||
public readonly string TrailPalette = "effect";
|
||||
|
||||
[PaletteReference("TrailUsePlayerPalette")] public readonly string TrailPalette = "effect";
|
||||
public readonly bool TrailUsePlayerPalette = false;
|
||||
|
||||
public readonly int ContrailLength = 0;
|
||||
public readonly Color ContrailColor = Color.White;
|
||||
public readonly bool ContrailUsePlayerColor = false;
|
||||
|
||||
@@ -18,9 +18,12 @@ namespace OpenRA.Mods.Common.Lint
|
||||
{
|
||||
class CheckPalettes : ILintRulesPass
|
||||
{
|
||||
List<string> palettes = new List<string>();
|
||||
List<string> playerPalettes = new List<string>();
|
||||
|
||||
public void Run(Action<string> emitError, Action<string> emitWarning, Ruleset rules)
|
||||
{
|
||||
var palettes = GetPalettes(emitError, rules).ToList();
|
||||
GetPalettes(emitError, rules);
|
||||
|
||||
foreach (var actorInfo in rules.Actors)
|
||||
{
|
||||
@@ -29,14 +32,36 @@ namespace OpenRA.Mods.Common.Lint
|
||||
var fields = traitInfo.GetType().GetFields();
|
||||
foreach (var field in fields.Where(x => x.HasAttribute<PaletteReferenceAttribute>()))
|
||||
{
|
||||
var isPlayerPalette = false;
|
||||
|
||||
var paletteReference = field.GetCustomAttributes<PaletteReferenceAttribute>(true).FirstOrDefault();
|
||||
if (paletteReference != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(paletteReference.PlayerPaletteReferenceSwitch))
|
||||
{
|
||||
var fieldInfo = fields.First(f => f.Name == paletteReference.PlayerPaletteReferenceSwitch);
|
||||
isPlayerPalette = (bool)fieldInfo.GetValue(traitInfo);
|
||||
}
|
||||
else
|
||||
isPlayerPalette = paletteReference.IsPlayerPalette;
|
||||
}
|
||||
|
||||
var references = LintExts.GetFieldValues(traitInfo, field, emitError);
|
||||
foreach (var reference in references)
|
||||
{
|
||||
if (string.IsNullOrEmpty(reference))
|
||||
continue;
|
||||
|
||||
if (!palettes.Contains(reference))
|
||||
emitError("Undefined palette reference {0} detected at {1}".F(reference, traitInfo));
|
||||
if (isPlayerPalette)
|
||||
{
|
||||
if (!playerPalettes.Contains(reference))
|
||||
emitError("Undefined player palette reference {0} detected at {1} for {2}".F(reference, traitInfo, actorInfo.Key));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!palettes.Contains(reference))
|
||||
emitError("Undefined palette reference {0} detected at {1} for {2}".F(reference, traitInfo, actorInfo.Key));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,16 +73,36 @@ namespace OpenRA.Mods.Common.Lint
|
||||
if (projectileInfo == null)
|
||||
continue;
|
||||
|
||||
foreach (var field in projectileInfo.GetType().GetFields())
|
||||
var fields = projectileInfo.GetType().GetFields();
|
||||
foreach (var field in fields.Where(x => x.HasAttribute<PaletteReferenceAttribute>()))
|
||||
{
|
||||
if (field.HasAttribute<PaletteReferenceAttribute>())
|
||||
{
|
||||
var references = LintExts.GetFieldValues(projectileInfo, field, emitError);
|
||||
foreach (var reference in references)
|
||||
{
|
||||
if (string.IsNullOrEmpty(reference))
|
||||
continue;
|
||||
var isPlayerPalette = false;
|
||||
|
||||
var paletteReference = field.GetCustomAttributes<PaletteReferenceAttribute>(true).First();
|
||||
if (paletteReference != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(paletteReference.PlayerPaletteReferenceSwitch))
|
||||
{
|
||||
var fieldInfo = fields.First(f => f.Name == paletteReference.PlayerPaletteReferenceSwitch);
|
||||
isPlayerPalette = (bool)fieldInfo.GetValue(projectileInfo);
|
||||
}
|
||||
else
|
||||
isPlayerPalette = paletteReference.IsPlayerPalette;
|
||||
}
|
||||
|
||||
var references = LintExts.GetFieldValues(projectileInfo, field, emitError);
|
||||
foreach (var reference in references)
|
||||
{
|
||||
if (string.IsNullOrEmpty(reference))
|
||||
continue;
|
||||
|
||||
if (isPlayerPalette)
|
||||
{
|
||||
if (!playerPalettes.Contains(reference))
|
||||
emitError("Undefined player palette reference {0} detected at weapon {1}.".F(reference, weaponInfo.Key));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!palettes.Contains(reference))
|
||||
emitError("Undefined palette reference {0} detected at weapon {1}.".F(reference, weaponInfo.Key));
|
||||
}
|
||||
@@ -66,7 +111,7 @@ namespace OpenRA.Mods.Common.Lint
|
||||
}
|
||||
}
|
||||
|
||||
static IEnumerable<string> GetPalettes(Action<string> emitError, Ruleset rules)
|
||||
void GetPalettes(Action<string> emitError, Ruleset rules)
|
||||
{
|
||||
foreach (var actorInfo in rules.Actors)
|
||||
{
|
||||
@@ -75,9 +120,15 @@ namespace OpenRA.Mods.Common.Lint
|
||||
var fields = traitInfo.GetType().GetFields();
|
||||
foreach (var field in fields.Where(x => x.HasAttribute<PaletteDefinitionAttribute>()))
|
||||
{
|
||||
var paletteDefinition = field.GetCustomAttributes<PaletteDefinitionAttribute>(true).First();
|
||||
var values = LintExts.GetFieldValues(traitInfo, field, emitError);
|
||||
foreach (var value in values)
|
||||
yield return value;
|
||||
{
|
||||
if (paletteDefinition.IsPlayerPalette)
|
||||
playerPalettes.Add(value);
|
||||
else
|
||||
palettes.Add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[SequenceReference("Image")] public readonly string CirclesSequence = "circles";
|
||||
|
||||
[Desc("Custom indicator palette name")]
|
||||
public readonly string Palette = "player";
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = "player";
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = true;
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly string CloakSound = null;
|
||||
public readonly string UncloakSound = null;
|
||||
|
||||
public readonly string Palette = "cloak";
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = "cloak";
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
public readonly HashSet<string> CloakTypes = new HashSet<string> { "Cloak" };
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[PaletteReference] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom PlayerColorPalette: BaseName")]
|
||||
public readonly string PlayerPalette = "player";
|
||||
[PaletteReference(true)] public readonly string PlayerPalette = "player";
|
||||
|
||||
[Desc("Change the sprite image size.")]
|
||||
public readonly float Scale = 1f;
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly WVec Offset = WVec.Zero;
|
||||
|
||||
[Desc("Custom palette name")]
|
||||
[PaletteReference] public readonly string Palette = null;
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[SequenceReference] public readonly string Sequence = "active";
|
||||
|
||||
[Desc("Custom palette name")]
|
||||
[PaletteReference] public readonly string Palette = null;
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[SequenceReference(null, true)] public readonly string DeathSequence = "die";
|
||||
|
||||
[Desc("The palette used for `DeathSequence`.")]
|
||||
public readonly string DeathSequencePalette = "player";
|
||||
[PaletteReference("DeathPaletteIsPlayerPalette")] public readonly string DeathSequencePalette = "player";
|
||||
|
||||
[Desc("Custom death animation palette is a player palette BaseName")]
|
||||
public readonly bool DeathPaletteIsPlayerPalette = true;
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[SequenceReference] public readonly string CrushedSequence = null;
|
||||
|
||||
[Desc("The palette used for `CrushedSequence`.")]
|
||||
public readonly string CrushedSequencePalette = "effect";
|
||||
[PaletteReference("CrushedPaletteIsPlayerPalette")] public readonly string CrushedSequencePalette = "effect";
|
||||
|
||||
[Desc("Custom crushed animation palette is a player palette BaseName")]
|
||||
public readonly bool CrushedPaletteIsPlayerPalette = false;
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly WVec Offset = WVec.Zero;
|
||||
|
||||
[Desc("Custom palette name")]
|
||||
public readonly string Palette = null;
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly WVec Offset = WVec.Zero;
|
||||
|
||||
[Desc("Custom palette name")]
|
||||
public readonly string Palette = null;
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly WVec Offset = WVec.Zero;
|
||||
|
||||
[Desc("Custom palette name")]
|
||||
[PaletteReference] public readonly string Palette = null;
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public readonly WVec Offset = WVec.Zero;
|
||||
|
||||
[Desc("Custom palette name")]
|
||||
public readonly string Palette = null;
|
||||
[PaletteReference("IsPlayerPalette")] public readonly string Palette = null;
|
||||
|
||||
[Desc("Custom palette is a player palette BaseName")]
|
||||
public readonly bool IsPlayerPalette = false;
|
||||
|
||||
@@ -21,11 +21,11 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
[FieldLoader.Require]
|
||||
[Desc("The prefix for the resulting player palettes")]
|
||||
public readonly string BaseName = null;
|
||||
[PaletteDefinition(true)] public readonly string BaseName = null;
|
||||
|
||||
[FieldLoader.Require]
|
||||
[Desc("The name of the player palette to base off.")]
|
||||
public readonly string BasePalette = null;
|
||||
[PaletteReference(true)] public readonly string BasePalette = null;
|
||||
|
||||
[Desc("Allow palette modifiers to change the palette.")]
|
||||
public readonly bool AllowModifiers = true;
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
class PlayerPaletteFromCurrentTilesetInfo : ITraitInfo
|
||||
{
|
||||
[FieldLoader.Require, PaletteDefinition]
|
||||
[FieldLoader.Require, PaletteDefinition(true)]
|
||||
[Desc("internal palette name")]
|
||||
public readonly string Name = null;
|
||||
[Desc("Map listed indices to shadow.")]
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.Common.Warheads
|
||||
public readonly string Explosion = null;
|
||||
|
||||
[Desc("Palette to use for explosion effect.")]
|
||||
public readonly string ExplosionPalette = "effect";
|
||||
[PaletteReference("UsePlayerPalette")] public readonly string ExplosionPalette = "effect";
|
||||
|
||||
[Desc("Remap explosion effect to player color, if art supports it.")]
|
||||
public readonly bool UsePlayerPalette = false;
|
||||
|
||||
Reference in New Issue
Block a user