private void GenerateSpriteSequenceTargets(StaticTextureSource source) { if (!source.HasVariants) { throw new ArgumentException(string.Format("SpriteSequence {0} cannot be dynamically mapped without at least one source rectangle.", source.SpriteSequence)); } int i = _level.SpriteSequences.ToList().FindIndex(s => s.SpriteID == (int)source.SpriteSequence); if (i == -1) { return; } TRSpriteSequence sequence = _level.SpriteSequences[i]; StaticMapping[source] = new List <StaticTextureTarget>(); // An assumption is made here that each variant in the source will have the same number // of rectangles. We only want to define targets for the number of source rectangles, rather // than the total number of sprites. int numTargets = source.VariantMap[source.Variants[0]].Count; for (int j = 0; j < numTargets; j++) { TRSpriteTexture sprite = _level.SpriteTextures[sequence.Offset + j]; StaticMapping[source].Add(new StaticTextureTarget { Segment = j, Tile = sprite.Atlas, X = sprite.X, Y = sprite.Y }); } }
// See TextureTransportHandler.ResetUnusedTextures public static bool IsValid(this TRSpriteTexture texture) { if (texture.Atlas == 0) { if (texture.X == 0 && texture.Y == 0 && texture.Width == 1 && texture.Height == 1) { return(false); } } return(texture.Atlas != ushort.MaxValue); }
private List <IndexedTRSpriteTexture> LoadSpriteTextures() { List <IndexedTRSpriteTexture> textures = new List <IndexedTRSpriteTexture>((int)Level.NumSpriteTextures); for (int i = 0; i < Level.NumSpriteTextures; i++) { TRSpriteTexture texture = Level.SpriteTextures[i]; if (texture.IsValid()) { textures.Add(new IndexedTRSpriteTexture { Index = i, Classification = _levelClassifier, Texture = texture }); } } return(textures); }
public static void Invalidate(this TRSpriteTexture texture) { texture.Atlas = 0; texture.X = texture.Y = 0; texture.Width = texture.Height = 1; }