Replace ActorInfo.Traits.WithInterface with ActorInfo.TraitInfos<T>()

This commit is contained in:
atlimit8
2015-09-19 13:22:00 -05:00
parent 6e39a5e264
commit 9acf121eb1
48 changed files with 76 additions and 77 deletions

View File

@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Lint
this.emitError = emitError;
foreach (var actorInfo in rules.Actors)
foreach (var traitInfo in actorInfo.Value.Traits.WithInterface<ITraitInfo>())
foreach (var traitInfo in actorInfo.Value.TraitInfos<ITraitInfo>())
CheckTrait(actorInfo.Value, traitInfo, rules);
}

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Lint
{
foreach (var actorInfo in rules.Actors)
{
var animations = actorInfo.Value.Traits.WithInterface<WithDeathAnimationInfo>().ToList();
var animations = actorInfo.Value.TraitInfos<WithDeathAnimationInfo>().ToList();
if (!animations.Any())
continue;
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Lint
if (!deathTypes.Any())
continue;
var targetable = actorInfo.Value.Traits.WithInterface<ITargetableInfo>().SelectMany(x => x.GetTargetTypes()).ToList();
var targetable = actorInfo.Value.TraitInfos<ITargetableInfo>().SelectMany(x => x.GetTargetTypes()).ToList();
if (!targetable.Any())
continue;

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.Lint
if (actorInfo.Key.StartsWith("^"))
continue;
var count = actorInfo.Value.Traits.WithInterface<IDefaultVisibilityInfo>().Count();
var count = actorInfo.Value.TraitInfos<IDefaultVisibilityInfo>().Count();
if (count == 0)
emitError("Actor type `{0}` does not define a default visibility type!".F(actorInfo.Key));

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Mods.Common.Lint
var worldActor = map.Rules.Actors["world"];
var factions = worldActor.Traits.WithInterface<FactionInfo>().Select(f => f.InternalName).ToHashSet();
var factions = worldActor.TraitInfos<FactionInfo>().Select(f => f.InternalName).ToHashSet();
foreach (var player in players.Values)
if (!string.IsNullOrWhiteSpace(player.Faction) && !factions.Contains(player.Faction))
emitError("Invalid faction {0} chosen for player {1}.".F(player.Faction, player.Name));

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Lint
continue;
var ios = actorInfo.Value.TraitInfoOrDefault<IOccupySpaceInfo>();
foreach (var rsi in actorInfo.Value.Traits.WithInterface<RevealsShroudInfo>())
foreach (var rsi in actorInfo.Value.TraitInfos<RevealsShroudInfo>())
{
if (rsi.Type == VisibilityType.CenterPosition)
continue;

View File

@@ -36,12 +36,12 @@ namespace OpenRA.Mods.Common.Lint
Game.ModData.Manifest.Sequences.Select(MiniYaml.FromFile).Aggregate(MiniYaml.MergeLiberal));
var rules = map == null ? Game.ModData.DefaultRules : map.Rules;
var factions = rules.Actors["world"].Traits.WithInterface<FactionInfo>().Select(f => f.InternalName).ToArray();
var factions = rules.Actors["world"].TraitInfos<FactionInfo>().Select(f => f.InternalName).ToArray();
var sequenceProviders = map == null ? rules.Sequences.Values : new[] { rules.Sequences[map.Tileset] };
foreach (var actorInfo in rules.Actors)
{
foreach (var renderInfo in actorInfo.Value.Traits.WithInterface<RenderSpritesInfo>())
foreach (var renderInfo in actorInfo.Value.TraitInfos<RenderSpritesInfo>())
{
foreach (var faction in factions)
{
@@ -68,7 +68,7 @@ namespace OpenRA.Mods.Common.Lint
if (string.IsNullOrEmpty(sequence))
continue;
var renderInfo = actorInfo.Value.Traits.WithInterface<RenderSpritesInfo>().FirstOrDefault();
var renderInfo = actorInfo.Value.TraitInfos<RenderSpritesInfo>().FirstOrDefault();
if (renderInfo == null)
continue;

View File

@@ -111,14 +111,14 @@ namespace OpenRA.Mods.Common.Lint
}
// TODO: HACK because GainsExperience grants upgrades differently to most other sources.
var gainsExperience = rules.Actors.SelectMany(x => x.Value.Traits.WithInterface<GainsExperienceInfo>()
var gainsExperience = rules.Actors.SelectMany(x => x.Value.TraitInfos<GainsExperienceInfo>()
.SelectMany(y => y.Upgrades.SelectMany(z => z.Value)));
foreach (var upgrade in gainsExperience)
yield return upgrade;
// TODO: HACK because Pluggable grants upgrades differently to most other sources.
var pluggable = rules.Actors.SelectMany(x => x.Value.Traits.WithInterface<PluggableInfo>()
var pluggable = rules.Actors.SelectMany(x => x.Value.TraitInfos<PluggableInfo>()
.SelectMany(y => y.Upgrades.SelectMany(z => z.Value)));
foreach (var upgrade in pluggable)
@@ -143,7 +143,7 @@ namespace OpenRA.Mods.Common.Lint
// TODO: HACK because GainsExperience and GainsStatUpgrades do not play by the rules...
// We assume everything GainsExperience grants is used by GainsStatUpgrade
var gainsExperience = rules.Actors.SelectMany(x => x.Value.Traits.WithInterface<GainsExperienceInfo>()
var gainsExperience = rules.Actors.SelectMany(x => x.Value.TraitInfos<GainsExperienceInfo>()
.SelectMany(y => y.Upgrades.SelectMany(z => z.Value)));
foreach (var upgrade in gainsExperience)

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Lint
{
foreach (var actorInfo in rules.Actors)
{
foreach (var traitInfo in actorInfo.Value.Traits.WithInterface<ITraitInfo>())
foreach (var traitInfo in actorInfo.Value.TraitInfos<ITraitInfo>())
{
var fields = traitInfo.GetType().GetFields().Where(f => f.HasAttribute<VoiceSetReferenceAttribute>());
foreach (var field in fields)
@@ -43,7 +43,7 @@ namespace OpenRA.Mods.Common.Lint
{
var soundInfo = rules.Voices[voiceSet.ToLowerInvariant()];
foreach (var traitInfo in actorInfo.Traits.WithInterface<ITraitInfo>())
foreach (var traitInfo in actorInfo.TraitInfos<ITraitInfo>())
{
var fields = traitInfo.GetType().GetFields().Where(f => f.HasAttribute<VoiceReferenceAttribute>());
foreach (var field in fields)

View File

@@ -20,13 +20,12 @@ namespace OpenRA.Mods.Common.Lint
public void Run(Action<string> emitError, Action<string> emitWarning, Ruleset rules)
{
// ProvidesPrerequisite allows arbitrary prereq definitions
var customPrereqs = rules.Actors.SelectMany(a => a.Value.Traits
.WithInterface<ProvidesPrerequisiteInfo>().Select(p => p.Prerequisite ?? a.Value.Name));
var customPrereqs = rules.Actors.SelectMany(a => a.Value.TraitInfos<ProvidesPrerequisiteInfo>()
.Select(p => p.Prerequisite ?? a.Value.Name));
// ProvidesTechPrerequisite allows arbitrary prereq definitions
// (but only one group at a time during gameplay)
var techPrereqs = rules.Actors.SelectMany(a => a.Value.Traits
.WithInterface<ProvidesTechPrerequisiteInfo>())
var techPrereqs = rules.Actors.SelectMany(a => a.Value.TraitInfos<ProvidesTechPrerequisiteInfo>())
.SelectMany(p => p.Prerequisites);
var providedPrereqs = customPrereqs.Concat(techPrereqs);