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

View File

@@ -218,6 +218,8 @@ namespace OpenRA
public string Uid { get; private set; }
public Ruleset Rules { get; private set; }
public SequenceProvider Sequences => Rules.Sequences;
public bool InvalidCustomRules { 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)
{
var bright = wr.World.Map.Rules.Sequences.GetSequence(image, brightSequence);
var dim = wr.World.Map.Rules.Sequences.GetSequence(image, dimSequence);
var bright = wr.World.Map.Sequences.GetSequence(image, brightSequence);
var dim = wr.World.Map.Sequences.GetSequence(image, dimSequence);
var source = wr.ScreenPosition(pos);
var target = wr.ScreenPosition(pos + length);

View File

@@ -83,10 +83,11 @@ namespace OpenRA.Mods.Cnc.Traits
this.self = self;
var tileset = self.World.Map.Tileset.ToLowerInvariant();
if (self.World.Map.Rules.Sequences.HasSequence("overlay", $"{Info.TileValidName}-{tileset}"))
Tile = self.World.Map.Rules.Sequences.GetSequence("overlay", $"{Info.TileValidName}-{tileset}").GetSprite(0);
var sequences = self.World.Map.Sequences;
if (sequences.HasSequence("overlay", $"{Info.TileValidName}-{tileset}"))
Tile = sequences.GetSequence("overlay", $"{Info.TileValidName}-{tileset}").GetSprite(0);
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
@@ -221,41 +222,42 @@ namespace OpenRA.Mods.Cnc.Traits
minelayer = a.Trait<Minelayer>();
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);
validAlpha = validSequence.GetAlpha(0);
}
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);
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);
unknownAlpha = unknownSequence.GetAlpha(0);
}
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);
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);
blockedAlpha = blockedSequence.GetAlpha(0);
}
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);
blockedAlpha = blockedSequence.GetAlpha(0);
}

View File

@@ -161,7 +161,7 @@ namespace OpenRA.Mods.Cnc.Traits
this.power = power;
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();
dimensions = info.Dimensions;
tile = s.GetSprite(0);
@@ -240,7 +240,7 @@ namespace OpenRA.Mods.Cnc.Traits
footprint = info.Footprint.Where(c => !char.IsWhiteSpace(c)).ToArray();
dimensions = info.Dimensions;
var sequences = world.Map.Rules.Sequences;
var sequences = world.Map.Sequences;
var tilesetValid = info.ValidFootprintSequence + "-" + world.Map.Tileset.ToLowerInvariant();
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)
{
var sequences = world.Map.Rules.Sequences;
var sequences = world.Map.Sequences;
foreach (var kv in rampSequences)
{
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)
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);
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.");
}
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);
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);
validAlpha = validSequence.GetAlpha(0);
}
else
{
var validSequence = world.Map.Rules.Sequences.GetSequence("overlay", "build-valid");
var validSequence = sequences.GetSequence("overlay", "build-valid");
validTile = validSequence.GetSprite(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);
blockedAlpha = blockedSequence.GetAlpha(0);
}

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits.Render
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 ownerName = init.Get<OwnerInit>().InternalName;
var image = GetImage(init.Actor, faction);
@@ -60,7 +60,7 @@ namespace OpenRA.Mods.Common.Traits.Render
if (facings == -1)
{
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 faction = init.GetValue<FactionInit, string>(this);
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 facings = body.QuantizedFacings == -1 ?
init.Actor.TraitInfo<IQuantizeBodyOrientationInfo>().QuantizedBodyFacings(init.Actor, sequenceProvider, faction) :
init.Actor.TraitInfo<IQuantizeBodyOrientationInfo>().QuantizedBodyFacings(init.Actor, sequences, faction) :
body.QuantizedFacings;
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();
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);
alpha = sequence.GetAlpha(0);
}

View File

@@ -164,7 +164,7 @@ namespace OpenRA.Mods.Common.Traits
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 direction = WAngle.FromDegrees(angle);

View File

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

View File

@@ -59,11 +59,11 @@ namespace OpenRA.Mods.Common.Traits
this.info = info;
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);
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);
pasteAlpha = pasteSequence.GetAlpha(0);
}

View File

@@ -124,7 +124,7 @@ namespace OpenRA.Mods.Common.Traits
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)
{
var resourceInfo = kv.Value;
@@ -141,12 +141,13 @@ namespace OpenRA.Mods.Common.Traits
if (shadowLayer == null)
{
var firstWithShadow = resourceVariants.Values.FirstOrDefault(v => v.ShadowStart > 0);
if (firstWithShadow != null)
var firstShadow = resourceVariants.Values
.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(first.Sheet, Rectangle.Empty, TextureChannel.Alpha);
shadowLayer = new TerrainSpriteLayer(w, wr, emptySprite, first.BlendMode, wr.World.Type != WorldType.Editor);
var emptySprite = new Sprite(firstShadow.Sheet, Rectangle.Empty, TextureChannel.Alpha);
shadowLayer = new TerrainSpriteLayer(w, wr, emptySprite, firstShadow.BlendMode, wr.World.Type != WorldType.Editor);
}
}

View File

@@ -156,11 +156,11 @@ namespace OpenRA.Mods.Common.Traits
shroudSprites = 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++)
{
var shroudSequence = sequenceProvider.GetSequence(info.Sequence, info.ShroudVariants[j]);
var fogSequence = sequenceProvider.GetSequence(info.Sequence, info.FogVariants[j]);
var shroudSequence = sequences.GetSequence(info.Sequence, info.ShroudVariants[j]);
var fogSequence = sequences.GetSequence(info.Sequence, info.FogVariants[j]);
for (var i = 0; i < info.Index.Length; 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)
{
var i = (j + 1) * variantStride - 1;
shroudSequence = sequenceProvider.GetSequence(info.Sequence, info.OverrideFullShroud);
fogSequence = sequenceProvider.GetSequence(info.Sequence, info.OverrideFullFog);
shroudSequence = sequences.GetSequence(info.Sequence, info.OverrideFullShroud);
fogSequence = sequences.GetSequence(info.Sequence, info.OverrideFullFog);
shroudSprites[i] = (shroudSequence.GetSprite(0), shroudSequence.Scale, shroudSequence.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;
hasSmoke = !string.IsNullOrEmpty(info.SmokeImage) && info.SmokeSequences.Length > 0;
var sequenceProvider = world.Map.Rules.Sequences;
var types = sequenceProvider.Sequences(Info.Sequence);
var sequences = world.Map.Sequences;
var types = sequences.Sequences(Info.Sequence);
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)

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
SequenceProvider sequences;
var mapPackage = new Folder(Platform.EngineDir).OpenPackage(args[2], modData.ModFiles);
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))
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());
if (allowedSpriteExtensions.Contains(fileExtension))
{
currentSprites = world.Map.Rules.Sequences.SpriteCache[prefix + filename];
currentSprites = world.Map.Sequences.SpriteCache[prefix + filename];
currentFrame = 0;
if (frameSlider != null && currentSprites?.Length > 0)

View File

@@ -72,7 +72,7 @@ namespace OpenRA.Mods.D2k.Traits
this.info = info;
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>();
checkUnsafeTiles = info.RequiresPrerequisites.Length > 0 && techTree.HasPrerequisites(info.RequiresPrerequisites);