private void AddAnimationFrameAtIndex(TileAnimation animation, List <string> row, int animationIndex, int indexOfLayerReferencingTileset, int tilesetIndex) { if (animation != null && animation.Frames != null && animation.Frames.Count > animationIndex) { // public int TileId // public int Duration var frame = animation.Frames[animationIndex]; int leftCoordinate = 0; int rightCoordinate = 16; int topCoordinate = 0; int bottomCoordinate = 16; var frameId = (uint)frame.TileId; // not sure why, but need to add 1: //frameId++; // Update - I know why, because the TileId // is relative to the Tileset. I didn't try // this with multiple tilesets, and the first // tileset has a starting ID of 1. frameId += this.Tilesets[tilesetIndex].Firstgid; GetPixelCoordinatesFromGid(frameId, this.Tilesets[tilesetIndex], out leftCoordinate, out topCoordinate, out rightCoordinate, out bottomCoordinate); row.Add(string.Format( "new FlatRedBall.Content.AnimationChain.AnimationFrameSaveBase(TextureName={0}, " + "FrameLength={1}, LeftCoordinate={2}, RightCoordinate={3}, TopCoordinate={4}, BottomCoordinate={5})", indexOfLayerReferencingTileset, (frame.Duration / 1000.0f).ToString(CultureInfo.InvariantCulture), leftCoordinate.ToString(CultureInfo.InvariantCulture), rightCoordinate.ToString(CultureInfo.InvariantCulture), topCoordinate.ToString(CultureInfo.InvariantCulture), bottomCoordinate.ToString(CultureInfo.InvariantCulture))); } else { row.Add(null); } }
private void WriteValuesFromDictionary(StringBuilder sb, IDictionary <string, string> pDictionary, IDictionary <string, string> iDictionary, IEnumerable <string> columnNames, TileAnimation animation, int tilesetIndex = 0) { ///////////////////// Early out ////////////////////// if (tilesetIndex >= Tilesets.Count) { return; } ////////////////// End early out //////////////////// uint startGid = Tilesets[tilesetIndex].Firstgid; string nameValue = GetNameValue(iDictionary); List <string> row = new List <string>(); row.Add(nameValue); int layerIndex = -1; uint endIdExclusive = uint.MaxValue; if (tilesetIndex < Tilesets.Count - 1) { endIdExclusive = Tilesets[tilesetIndex + 1].Firstgid; } for (int i = 0; i < Layers.Count; i++) { var layer = Layers[i]; // see if any layers reference this tile: foreach (var data in layer.data) { foreach (var tile in data.tiles) { if (tile >= startGid && tile < endIdExclusive) { layerIndex = i; break; } } if (layerIndex != -1) { break; } } if (layerIndex != -1) { break; } } bool hasAnimation = columnNames.Contains("EmbeddedAnimation"); if (hasAnimation) { AddAnimationFrameAtIndex(animation, row, 0, layerIndex, tilesetIndex); } AppendCustomProperties(pDictionary, iDictionary, columnNames, row, false); AppendRowToStringBuilder(sb, row); if (animation != null && animation.Frames != null) { for (int i = 1; i < animation.Frames.Count; i++) { row = new List <string>(); row.Add(""); // Name column if (hasAnimation) { AddAnimationFrameAtIndex(animation, row, i, layerIndex, tilesetIndex); } AppendCustomProperties(pDictionary, iDictionary, columnNames, row, true); AppendRowToStringBuilder(sb, row); } } }