Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
                }
            }
        }