Access sequences from Map.

This commit is contained in:
Paul Chote
2022-12-28 22:48:56 +13:00
committed by Gustas
parent 992ba1a9a2
commit 7cd4272350
21 changed files with 59 additions and 54 deletions

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Graphics
public string Name { get; private set; } public string Name { get; private set; }
public bool IsDecoration { get; set; } public bool IsDecoration { get; set; }
readonly SequenceProvider sequenceProvider; readonly SequenceProvider sequences;
readonly Func<WAngle> facingFunc; readonly Func<WAngle> facingFunc;
readonly Func<bool> paused; readonly Func<bool> paused;
@@ -43,7 +43,7 @@ namespace OpenRA.Graphics
public Animation(World world, string name, Func<WAngle> facingFunc, Func<bool> paused) public Animation(World world, string name, Func<WAngle> facingFunc, Func<bool> paused)
{ {
sequenceProvider = world.Map.Rules.Sequences; sequences = world.Map.Sequences;
Name = name.ToLowerInvariant(); Name = name.ToLowerInvariant();
this.facingFunc = facingFunc; this.facingFunc = facingFunc;
this.paused = paused; this.paused = paused;
@@ -236,11 +236,11 @@ namespace OpenRA.Graphics
} }
} }
public bool HasSequence(string seq) { return sequenceProvider.HasSequence(Name, seq); } public bool HasSequence(string seq) { return sequences.HasSequence(Name, seq); }
public ISpriteSequence GetSequence(string sequenceName) public ISpriteSequence GetSequence(string sequenceName)
{ {
return sequenceProvider.GetSequence(Name, sequenceName); return sequences.GetSequence(Name, sequenceName);
} }
public string GetRandomExistingSequence(string[] sequences, MersenneTwister random) public string GetRandomExistingSequence(string[] sequences, MersenneTwister random)

View File

@@ -218,6 +218,8 @@ namespace OpenRA
public string Uid { get; private set; } public string Uid { get; private set; }
public Ruleset Rules { get; private set; } public Ruleset Rules { get; private set; }
public SequenceProvider Sequences => Rules.Sequences;
public bool InvalidCustomRules { get; private set; } public bool InvalidCustomRules { get; private set; }
public Exception InvalidCustomRulesException { get; private set; } public Exception InvalidCustomRulesException { get; private set; }

View File

@@ -93,8 +93,8 @@ namespace OpenRA.Mods.Cnc.Graphics
public IEnumerable<IFinalizedRenderable> GenerateRenderables(WorldRenderer wr) public IEnumerable<IFinalizedRenderable> GenerateRenderables(WorldRenderer wr)
{ {
var bright = wr.World.Map.Rules.Sequences.GetSequence(image, brightSequence); var bright = wr.World.Map.Sequences.GetSequence(image, brightSequence);
var dim = wr.World.Map.Rules.Sequences.GetSequence(image, dimSequence); var dim = wr.World.Map.Sequences.GetSequence(image, dimSequence);
var source = wr.ScreenPosition(pos); var source = wr.ScreenPosition(pos);
var target = wr.ScreenPosition(pos + length); var target = wr.ScreenPosition(pos + length);

View File

@@ -83,10 +83,11 @@ namespace OpenRA.Mods.Cnc.Traits
this.self = self; this.self = self;
var tileset = self.World.Map.Tileset.ToLowerInvariant(); var tileset = self.World.Map.Tileset.ToLowerInvariant();
if (self.World.Map.Rules.Sequences.HasSequence("overlay", $"{Info.TileValidName}-{tileset}")) var sequences = self.World.Map.Sequences;
Tile = self.World.Map.Rules.Sequences.GetSequence("overlay", $"{Info.TileValidName}-{tileset}").GetSprite(0); if (sequences.HasSequence("overlay", $"{Info.TileValidName}-{tileset}"))
Tile = sequences.GetSequence("overlay", $"{Info.TileValidName}-{tileset}").GetSprite(0);
else else
Tile = self.World.Map.Rules.Sequences.GetSequence("overlay", Info.TileValidName).GetSprite(0); Tile = sequences.GetSequence("overlay", Info.TileValidName).GetSprite(0);
} }
IEnumerable<IOrderTargeter> IIssueOrder.Orders IEnumerable<IOrderTargeter> IIssueOrder.Orders
@@ -221,41 +222,42 @@ namespace OpenRA.Mods.Cnc.Traits
minelayer = a.Trait<Minelayer>(); minelayer = a.Trait<Minelayer>();
var tileset = a.World.Map.Tileset.ToLowerInvariant(); var tileset = a.World.Map.Tileset.ToLowerInvariant();
if (a.World.Map.Rules.Sequences.HasSequence("overlay", $"{minelayer.Info.TileValidName}-{tileset}")) var sequences = a.World.Map.Sequences;
if (sequences.HasSequence("overlay", $"{minelayer.Info.TileValidName}-{tileset}"))
{ {
var validSequence = a.World.Map.Rules.Sequences.GetSequence("overlay", $"{minelayer.Info.TileValidName}-{tileset}"); var validSequence = sequences.GetSequence("overlay", $"{minelayer.Info.TileValidName}-{tileset}");
validTile = validSequence.GetSprite(0); validTile = validSequence.GetSprite(0);
validAlpha = validSequence.GetAlpha(0); validAlpha = validSequence.GetAlpha(0);
} }
else else
{ {
var validSequence = a.World.Map.Rules.Sequences.GetSequence("overlay", minelayer.Info.TileValidName); var validSequence = sequences.GetSequence("overlay", minelayer.Info.TileValidName);
validTile = validSequence.GetSprite(0); validTile = validSequence.GetSprite(0);
validAlpha = validSequence.GetAlpha(0); validAlpha = validSequence.GetAlpha(0);
} }
if (a.World.Map.Rules.Sequences.HasSequence("overlay", $"{minelayer.Info.TileUnknownName}-{tileset}")) if (sequences.HasSequence("overlay", $"{minelayer.Info.TileUnknownName}-{tileset}"))
{ {
var unknownSequence = a.World.Map.Rules.Sequences.GetSequence("overlay", $"{minelayer.Info.TileUnknownName}-{tileset}"); var unknownSequence = sequences.GetSequence("overlay", $"{minelayer.Info.TileUnknownName}-{tileset}");
unknownTile = unknownSequence.GetSprite(0); unknownTile = unknownSequence.GetSprite(0);
unknownAlpha = unknownSequence.GetAlpha(0); unknownAlpha = unknownSequence.GetAlpha(0);
} }
else else
{ {
var unknownSequence = a.World.Map.Rules.Sequences.GetSequence("overlay", minelayer.Info.TileUnknownName); var unknownSequence = sequences.GetSequence("overlay", minelayer.Info.TileUnknownName);
unknownTile = unknownSequence.GetSprite(0); unknownTile = unknownSequence.GetSprite(0);
unknownAlpha = unknownSequence.GetAlpha(0); unknownAlpha = unknownSequence.GetAlpha(0);
} }
if (a.World.Map.Rules.Sequences.HasSequence("overlay", $"{minelayer.Info.TileInvalidName}-{tileset}")) if (sequences.HasSequence("overlay", $"{minelayer.Info.TileInvalidName}-{tileset}"))
{ {
var blockedSequence = a.World.Map.Rules.Sequences.GetSequence("overlay", $"{minelayer.Info.TileInvalidName}-{tileset}"); var blockedSequence = sequences.GetSequence("overlay", $"{minelayer.Info.TileInvalidName}-{tileset}");
blockedTile = blockedSequence.GetSprite(0); blockedTile = blockedSequence.GetSprite(0);
blockedAlpha = blockedSequence.GetAlpha(0); blockedAlpha = blockedSequence.GetAlpha(0);
} }
else else
{ {
var blockedSequence = a.World.Map.Rules.Sequences.GetSequence("overlay", minelayer.Info.TileInvalidName); var blockedSequence = sequences.GetSequence("overlay", minelayer.Info.TileInvalidName);
blockedTile = blockedSequence.GetSprite(0); blockedTile = blockedSequence.GetSprite(0);
blockedAlpha = blockedSequence.GetAlpha(0); blockedAlpha = blockedSequence.GetAlpha(0);
} }

View File

@@ -161,7 +161,7 @@ namespace OpenRA.Mods.Cnc.Traits
this.power = power; this.power = power;
var info = (ChronoshiftPowerInfo)power.Info; var info = (ChronoshiftPowerInfo)power.Info;
var s = world.Map.Rules.Sequences.GetSequence(info.FootprintImage, info.SourceFootprintSequence); var s = world.Map.Sequences.GetSequence(info.FootprintImage, info.SourceFootprintSequence);
footprint = info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray(); footprint = info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray();
dimensions = info.Dimensions; dimensions = info.Dimensions;
tile = s.GetSprite(0); tile = s.GetSprite(0);
@@ -240,7 +240,7 @@ namespace OpenRA.Mods.Cnc.Traits
footprint = info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray(); footprint = info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray();
dimensions = info.Dimensions; dimensions = info.Dimensions;
var sequences = world.Map.Rules.Sequences; var sequences = world.Map.Sequences;
var tilesetValid = info.ValidFootprintSequence + "-" + world.Map.Tileset.ToLowerInvariant(); var tilesetValid = info.ValidFootprintSequence + "-" + world.Map.Tileset.ToLowerInvariant();
if (sequences.HasSequence(info.FootprintImage, tilesetValid)) if (sequences.HasSequence(info.FootprintImage, tilesetValid))
{ {

View File

@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Cnc.Traits
void LoadVariants(Dictionary<string, string[]> rampSequences, Dictionary<string, Dictionary<string, ISpriteSequence>> rampVariants) void LoadVariants(Dictionary<string, string[]> rampSequences, Dictionary<string, Dictionary<string, ISpriteSequence>> rampVariants)
{ {
var sequences = world.Map.Rules.Sequences; var sequences = world.Map.Sequences;
foreach (var kv in rampSequences) foreach (var kv in rampSequences)
{ {
if (!Info.ResourceTypes.TryGetValue(kv.Key, out var resourceInfo)) if (!Info.ResourceTypes.TryGetValue(kv.Key, out var resourceInfo))

View File

@@ -193,7 +193,7 @@ namespace OpenRA.Mods.Cnc.Traits
foreach (var a in w.Actors) foreach (var a in w.Actors)
ActorAddedToWorld(a); ActorAddedToWorld(a);
veinSequence = w.Map.Rules.Sequences.GetSequence(info.Image, info.Sequence); veinSequence = w.Map.Sequences.GetSequence(info.Image, info.Sequence);
veinPalette = wr.Palette(info.Palette); veinPalette = wr.Palette(info.Palette);
var first = veinSequence.GetSprite(0); var first = veinSequence.GetSprite(0);

View File

@@ -90,7 +90,7 @@ namespace OpenRA.Mods.Common.Traits
throw new InvalidOperationException("Actor type '" + self.Info.Name + "' does not define a quantized body orientation."); throw new InvalidOperationException("Actor type '" + self.Info.Name + "' does not define a quantized body orientation.");
} }
return qboi.QuantizedBodyFacings(self.Info, self.World.Map.Rules.Sequences, faction); return qboi.QuantizedBodyFacings(self.Info, self.World.Map.Sequences, faction);
}); });
} }

View File

@@ -65,20 +65,21 @@ namespace OpenRA.Mods.Common.Traits
topLeftScreenOffset = -wr.ScreenPxOffset(CenterOffset); topLeftScreenOffset = -wr.ScreenPxOffset(CenterOffset);
var tileset = world.Map.Tileset.ToLowerInvariant(); var tileset = world.Map.Tileset.ToLowerInvariant();
if (world.Map.Rules.Sequences.HasSequence("overlay", $"build-valid-{tileset}")) var sequences = world.Map.Sequences;
if (sequences.HasSequence("overlay", $"build-valid-{tileset}"))
{ {
var validSequence = world.Map.Rules.Sequences.GetSequence("overlay", $"build-valid-{tileset}"); var validSequence = sequences.GetSequence("overlay", $"build-valid-{tileset}");
validTile = validSequence.GetSprite(0); validTile = validSequence.GetSprite(0);
validAlpha = validSequence.GetAlpha(0); validAlpha = validSequence.GetAlpha(0);
} }
else else
{ {
var validSequence = world.Map.Rules.Sequences.GetSequence("overlay", "build-valid"); var validSequence = sequences.GetSequence("overlay", "build-valid");
validTile = validSequence.GetSprite(0); validTile = validSequence.GetSprite(0);
validAlpha = validSequence.GetAlpha(0); validAlpha = validSequence.GetAlpha(0);
} }
var blockedSequence = world.Map.Rules.Sequences.GetSequence("overlay", "build-invalid"); var blockedSequence = sequences.GetSequence("overlay", "build-invalid");
blockedTile = blockedSequence.GetSprite(0); blockedTile = blockedSequence.GetSprite(0);
blockedAlpha = blockedSequence.GetAlpha(0); blockedAlpha = blockedSequence.GetAlpha(0);
} }

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits.Render
public IEnumerable<IActorPreview> RenderPreview(ActorPreviewInitializer init) public IEnumerable<IActorPreview> RenderPreview(ActorPreviewInitializer init)
{ {
var sequenceProvider = init.World.Map.Rules.Sequences; var sequences = init.World.Map.Sequences;
var faction = init.GetValue<FactionInit, string>(this); var faction = init.GetValue<FactionInit, string>(this);
var ownerName = init.Get<OwnerInit>().InternalName; var ownerName = init.Get<OwnerInit>().InternalName;
var image = GetImage(init.Actor, faction); var image = GetImage(init.Actor, faction);
@@ -60,7 +60,7 @@ namespace OpenRA.Mods.Common.Traits.Render
if (facings == -1) if (facings == -1)
{ {
var qbo = init.Actor.TraitInfoOrDefault<IQuantizeBodyOrientationInfo>(); var qbo = init.Actor.TraitInfoOrDefault<IQuantizeBodyOrientationInfo>();
facings = qbo?.QuantizedBodyFacings(init.Actor, sequenceProvider, faction) ?? 1; facings = qbo?.QuantizedBodyFacings(init.Actor, sequences, faction) ?? 1;
} }
} }

View File

@@ -59,10 +59,10 @@ namespace OpenRA.Mods.Common.Traits.Render
var body = init.Actor.TraitInfo<BodyOrientationInfo>(); var body = init.Actor.TraitInfo<BodyOrientationInfo>();
var faction = init.GetValue<FactionInit, string>(this); var faction = init.GetValue<FactionInit, string>(this);
var ownerName = init.Get<OwnerInit>().InternalName; var ownerName = init.Get<OwnerInit>().InternalName;
var sequenceProvider = init.World.Map.Rules.Sequences; var sequences = init.World.Map.Sequences;
var image = Image ?? init.Actor.Name; var image = Image ?? init.Actor.Name;
var facings = body.QuantizedFacings == -1 ? var facings = body.QuantizedFacings == -1 ?
init.Actor.TraitInfo<IQuantizeBodyOrientationInfo>().QuantizedBodyFacings(init.Actor, sequenceProvider, faction) : init.Actor.TraitInfo<IQuantizeBodyOrientationInfo>().QuantizedBodyFacings(init.Actor, sequences, faction) :
body.QuantizedFacings; body.QuantizedFacings;
var palette = init.WorldRenderer.Palette(Palette ?? PlayerPalette + ownerName); var palette = init.WorldRenderer.Palette(Palette ?? PlayerPalette + ownerName);

View File

@@ -132,7 +132,7 @@ namespace OpenRA.Mods.Common.Traits
footprint = power.info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray(); footprint = power.info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray();
dimensions = power.info.Dimensions; dimensions = power.info.Dimensions;
var sequence = world.Map.Rules.Sequences.GetSequence(power.info.FootprintImage, power.info.FootprintSequence); var sequence = world.Map.Sequences.GetSequence(power.info.FootprintImage, power.info.FootprintSequence);
tile = sequence.GetSprite(0); tile = sequence.GetSprite(0);
alpha = sequence.GetAlpha(0); alpha = sequence.GetAlpha(0);
} }

View File

@@ -164,7 +164,7 @@ namespace OpenRA.Mods.Common.Traits
for (var i = 0; i < noOfDividingPoints; i++) for (var i = 0; i < noOfDividingPoints; i++)
{ {
var sprite = world.Map.Rules.Sequences.GetSequence(cursorAnimation, arrows[i]).GetSprite(0); var sprite = world.Map.Sequences.GetSequence(cursorAnimation, arrows[i]).GetSprite(0);
var angle = i * partAngle; var angle = i * partAngle;
var direction = WAngle.FromDegrees(angle); var direction = WAngle.FromDegrees(angle);

View File

@@ -59,8 +59,7 @@ namespace OpenRA.Mods.Common.Traits
this.info = info; this.info = info;
world = self.World; world = self.World;
var rules = self.World.Map.Rules; disabledSprite = self.World.Map.Sequences.GetSequence(info.Image, info.Sequence).GetSprite(0);
disabledSprite = rules.Sequences.GetSequence(info.Image, info.Sequence).GetSprite(0);
} }
void IWorldLoaded.WorldLoaded(World w, WorldRenderer wr) void IWorldLoaded.WorldLoaded(World w, WorldRenderer wr)

View File

@@ -59,11 +59,11 @@ namespace OpenRA.Mods.Common.Traits
this.info = info; this.info = info;
map = self.World.Map; map = self.World.Map;
var copySequence = map.Rules.Sequences.GetSequence(info.Image, info.CopySequence); var copySequence = map.Sequences.GetSequence(info.Image, info.CopySequence);
copyTile = copySequence.GetSprite(0); copyTile = copySequence.GetSprite(0);
copyAlpha = copySequence.GetAlpha(0); copyAlpha = copySequence.GetAlpha(0);
var pasteSequence = map.Rules.Sequences.GetSequence(info.Image, info.PasteSequence); var pasteSequence = map.Sequences.GetSequence(info.Image, info.PasteSequence);
pasteTile = pasteSequence.GetSprite(0); pasteTile = pasteSequence.GetSprite(0);
pasteAlpha = pasteSequence.GetAlpha(0); pasteAlpha = pasteSequence.GetAlpha(0);
} }

View File

@@ -124,7 +124,7 @@ namespace OpenRA.Mods.Common.Traits
protected virtual void WorldLoaded(World w, WorldRenderer wr) protected virtual void WorldLoaded(World w, WorldRenderer wr)
{ {
var sequences = w.Map.Rules.Sequences; var sequences = w.Map.Sequences;
foreach (var kv in Info.ResourceTypes) foreach (var kv in Info.ResourceTypes)
{ {
var resourceInfo = kv.Value; var resourceInfo = kv.Value;
@@ -141,12 +141,13 @@ namespace OpenRA.Mods.Common.Traits
if (shadowLayer == null) if (shadowLayer == null)
{ {
var firstWithShadow = resourceVariants.Values.FirstOrDefault(v => v.ShadowStart > 0); var firstShadow = resourceVariants.Values
if (firstWithShadow != null) .Select(v => v.GetShadow(0, WAngle.Zero))
.FirstOrDefault(s => s != null);
if (firstShadow != null)
{ {
var first = firstWithShadow.GetShadow(0, WAngle.Zero); var emptySprite = new Sprite(firstShadow.Sheet, Rectangle.Empty, TextureChannel.Alpha);
var emptySprite = new Sprite(first.Sheet, Rectangle.Empty, TextureChannel.Alpha); shadowLayer = new TerrainSpriteLayer(w, wr, emptySprite, firstShadow.BlendMode, wr.World.Type != WorldType.Editor);
shadowLayer = new TerrainSpriteLayer(w, wr, emptySprite, first.BlendMode, wr.World.Type != WorldType.Editor);
} }
} }

View File

@@ -156,11 +156,11 @@ namespace OpenRA.Mods.Common.Traits
shroudSprites = new (Sprite, float, float)[variantCount * variantStride]; shroudSprites = new (Sprite, float, float)[variantCount * variantStride];
fogSprites = new (Sprite, float, float)[variantCount * variantStride]; fogSprites = new (Sprite, float, float)[variantCount * variantStride];
var sequenceProvider = map.Rules.Sequences; var sequences = map.Sequences;
for (var j = 0; j < variantCount; j++) for (var j = 0; j < variantCount; j++)
{ {
var shroudSequence = sequenceProvider.GetSequence(info.Sequence, info.ShroudVariants[j]); var shroudSequence = sequences.GetSequence(info.Sequence, info.ShroudVariants[j]);
var fogSequence = sequenceProvider.GetSequence(info.Sequence, info.FogVariants[j]); var fogSequence = sequences.GetSequence(info.Sequence, info.FogVariants[j]);
for (var i = 0; i < info.Index.Length; i++) for (var i = 0; i < info.Index.Length; i++)
{ {
shroudSprites[j * variantStride + i] = (shroudSequence.GetSprite(i), shroudSequence.Scale, shroudSequence.GetAlpha(i)); shroudSprites[j * variantStride + i] = (shroudSequence.GetSprite(i), shroudSequence.Scale, shroudSequence.GetAlpha(i));
@@ -170,8 +170,8 @@ namespace OpenRA.Mods.Common.Traits
if (info.OverrideFullShroud != null) if (info.OverrideFullShroud != null)
{ {
var i = (j + 1) * variantStride - 1; var i = (j + 1) * variantStride - 1;
shroudSequence = sequenceProvider.GetSequence(info.Sequence, info.OverrideFullShroud); shroudSequence = sequences.GetSequence(info.Sequence, info.OverrideFullShroud);
fogSequence = sequenceProvider.GetSequence(info.Sequence, info.OverrideFullFog); fogSequence = sequences.GetSequence(info.Sequence, info.OverrideFullFog);
shroudSprites[i] = (shroudSequence.GetSprite(0), shroudSequence.Scale, shroudSequence.GetAlpha(0)); shroudSprites[i] = (shroudSequence.GetSprite(0), shroudSequence.Scale, shroudSequence.GetAlpha(0));
fogSprites[i] = (fogSequence.GetSprite(0), fogSequence.Scale, fogSequence.GetAlpha(0)); fogSprites[i] = (fogSequence.GetSprite(0), fogSequence.Scale, fogSequence.GetAlpha(0));
} }

View File

@@ -106,10 +106,10 @@ namespace OpenRA.Mods.Common.Traits
world = self.World; world = self.World;
hasSmoke = !string.IsNullOrEmpty(info.SmokeImage) && info.SmokeSequences.Length > 0; hasSmoke = !string.IsNullOrEmpty(info.SmokeImage) && info.SmokeSequences.Length > 0;
var sequenceProvider = world.Map.Rules.Sequences; var sequences = world.Map.Sequences;
var types = sequenceProvider.Sequences(Info.Sequence); var types = sequences.Sequences(Info.Sequence);
foreach (var t in types) foreach (var t in types)
smudges.Add(t, sequenceProvider.GetSequence(Info.Sequence, t)); smudges.Add(t, sequences.GetSequence(Info.Sequence, t));
} }
public void WorldLoaded(World w, WorldRenderer wr) public void WorldLoaded(World w, WorldRenderer wr)

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
SequenceProvider sequences; SequenceProvider sequences;
var mapPackage = new Folder(Platform.EngineDir).OpenPackage(args[2], modData.ModFiles); var mapPackage = new Folder(Platform.EngineDir).OpenPackage(args[2], modData.ModFiles);
if (mapPackage != null) if (mapPackage != null)
sequences = new Map(modData, mapPackage).Rules.Sequences; sequences = new Map(modData, mapPackage).Sequences;
else if (!modData.DefaultSequences.TryGetValue(args[2], out sequences)) else if (!modData.DefaultSequences.TryGetValue(args[2], out sequences))
throw new InvalidOperationException($"{args[2]} is not a valid tileset or map path"); throw new InvalidOperationException($"{args[2]} is not a valid tileset or map path");

View File

@@ -505,7 +505,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var fileExtension = Path.GetExtension(filename.ToLowerInvariant()); var fileExtension = Path.GetExtension(filename.ToLowerInvariant());
if (allowedSpriteExtensions.Contains(fileExtension)) if (allowedSpriteExtensions.Contains(fileExtension))
{ {
currentSprites = world.Map.Rules.Sequences.SpriteCache[prefix + filename]; currentSprites = world.Map.Sequences.SpriteCache[prefix + filename];
currentFrame = 0; currentFrame = 0;
if (frameSlider != null && currentSprites?.Length > 0) if (frameSlider != null && currentSprites?.Length > 0)

View File

@@ -72,7 +72,7 @@ namespace OpenRA.Mods.D2k.Traits
this.info = info; this.info = info;
var world = wr.World; var world = wr.World;
var sequences = world.Map.Rules.Sequences; var sequences = world.Map.Sequences;
var techTree = init.Get<OwnerInit>().Value(world).PlayerActor.Trait<TechTree>(); var techTree = init.Get<OwnerInit>().Value(world).PlayerActor.Trait<TechTree>();
checkUnsafeTiles = info.RequiresPrerequisites.Length > 0 && techTree.HasPrerequisites(info.RequiresPrerequisites); checkUnsafeTiles = info.RequiresPrerequisites.Length > 0 && techTree.HasPrerequisites(info.RequiresPrerequisites);