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(); }
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; }
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); } } } }