Пример #1
0
        private void SaveKeyframe(ScreenLayerKeyframe frame, XmlTextWriter writer)
        {
            writer.WriteStartElement("Keyframe");

            writer.WriteAttributeString("frame", frame.Frame.ToString());

            if (frame.Move != null)
            {
                writer.WriteStartElement("Move");
                writer.WriteAttributeString("x", frame.Move.X.ToString());
                writer.WriteAttributeString("y", frame.Move.Y.ToString());
                writer.WriteAttributeString("duration", frame.Move.Duration.ToString());
                writer.WriteEndElement();
            }

            if (frame.Reset)
                writer.WriteElementString("Reset", "");

            writer.WriteEndElement();
        }
Пример #2
0
        private static ScreenLayerKeyframe LoadScreenLayerKeyFrame(XElement node)
        {
            var frameNumber = node.GetAttribute<int>("frame");

            var keyframe = new ScreenLayerKeyframe();
            keyframe.Frame = frameNumber;

            var moveNode = node.Element("Move");
            if (moveNode != null)
            {
                var moveInfo = new ScreenLayerMoveCommand();
                moveInfo.X = moveNode.GetAttribute<int>("x");
                moveInfo.Y = moveNode.GetAttribute<int>("y");
                moveInfo.Duration = moveNode.GetAttribute<int>("duration");

                keyframe.Move = moveInfo;
            }

            keyframe.Reset = node.Elements("Reset").Any();

            return keyframe;
        }
Пример #3
0
        private void RunKeyframe(ScreenLayerKeyframe keyframe)
        {
            if (keyframe.Move != null)
            {
                var currentX = this._info.Tiles.BaseX + _locationOffsetX;
                var currentY = this._info.Tiles.BaseY + _locationOffsetY;

                _stopX = keyframe.Move.X;
                _stopY = keyframe.Move.Y;
                _stopFrame = _updateFrame + keyframe.Move.Duration;
                _moveSpeedX = (_stopX - currentX) / keyframe.Move.Duration;
                _moveSpeedY = (_stopY - currentY) / keyframe.Move.Duration;
            }

            if (keyframe.Reset && _updateFrame > 0)
            {
                _updateFrame = 0;

                foreach (var resetframe in _info.Keyframes)
                {
                    if (resetframe.Frame == 0)
                    {
                        RunKeyframe(resetframe);
                    }
                }
            }
        }