public static IDictionary <string, FrameData[]> GetData(SpriterEntity entity, int interval) { IDictionary <string, FrameData[]> data = new Dictionary <string, FrameData[]>(); foreach (SpriterAnimation anim in entity.Animations) { int length = (int)Math.Ceiling(anim.Length / interval); FrameData[] animData = new FrameData[length]; for (int i = 0; i < animData.Length; ++i) { float time = i * interval; if (time > anim.Length) { time = anim.Length; } FrameData fd = new FrameData(); SpriterProcessor.UpdateFrameData(fd, anim, time); animData[i] = fd; } data[anim.Name] = animData; } return(data); }
public virtual FrameMetadata GetFrameMetadata(float time, float deltaTime, float factor, SpriterAnimation first, SpriterAnimation second = null) { metadata.Clear(); if (second == null) { SpriterProcessor.UpdateFrameMetadata(metadata, first, time, deltaTime); } else { SpriterProcessor.GetFrameMetadata(metadata, first, second, time, deltaTime, factor); } return(metadata); }
public static Dictionary <string, FrameMetadata[]> CalculateMetadata(SpriterEntity entity, int interval) { return(Calculate <FrameMetadata>(entity, interval, (d, a, t, i) => SpriterProcessor.UpdateFrameMetadata(d, a, t, i))); }
public CharacterModel Read(XDocument input, CharacterModel model, ContentManager content, GraphicsDevice graphics) { CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; model = new CharacterModel(); SpriterProcessor processor = new SpriterProcessor(); // pitäs lukea xml:stä yhen filun koko helevetti SpriterShadowData data = processor.Process(input, content, graphics); Dictionary <int, Dictionary <int, Vector2> > l_defaultPivot = new Dictionary <int, Dictionary <int, Vector2> >(); foreach (XElement l_folder in data.XML.Root.Descendants("folder")) { int l_folderId = ReadInt(l_folder, "id", -1); foreach (XElement l_file in l_folder.Descendants("file")) { int l_fileId = ReadInt(l_file, "id", -1); float l_tmpX = ReadFloat(l_file, "pivot_x", 0); float l_tmpY = ReadFloat(l_file, "pivot_y", 1); l_defaultPivot.GetOrCreate(l_folderId).Add(l_fileId, new Vector2(l_tmpX, l_tmpY)); } } model.Textures = data.Textures; model.Rectangles = data.Rectangles; #region Entities // ----------------------Entityt --------------------- foreach (var xEntity in input.Root.Elements("entity")) { Entity entity = new Entity(); entity.Name = xEntity.Attribute("name").Value; #region Animations // --------------- Animaatiot --------------------- foreach (var xAnimation in xEntity.Elements("animation")) { var animation = ParseAnimation(xAnimation); #region Mainline // --------------- Mainline ----------------------- foreach (var xMainlinekey in xAnimation.Element("mainline").Elements("key")) { var key = ParseMainlineKey(xMainlinekey); // ---------------- object refs ----------------------- foreach (var xObjectRef in xMainlinekey.Elements("object_ref")) { var body = ParseObjectRef(xObjectRef); key.Body.Add(body); } // ----------------- bone refs ---------------------- int i = 0; foreach (var xBoneRef in xMainlinekey.Elements("bone_ref")) { var bone = ParseBoneRef(xBoneRef, ref i); key.Bones.Add(bone); } animation.MainLine.Add(key); } // mainline end #endregion #region Timeline int vittu = 0; // ------------------ timeline ----------------------------- foreach (var xTimeline in xAnimation.Elements("timeline")) { var timeline = ParseTimeline(xTimeline); // ----------------------- frame ------------------ #region Frame float minw, maxw, minh, maxh; minh = maxh = minw = maxw = 0; foreach (var xTimelineKey in xTimeline.Elements("key")) { var key = ParseTimelineKey(model, xTimelineKey, l_defaultPivot); if (key.Type != TimelineType.Bone) { Rectangle r = model.Rectangles[key.Folder][key.File]; maxw = Math.Max(maxw, key.Location.X + r.Width); minw = Math.Min(minw, key.Location.X); maxh = Math.Max(maxh, key.Location.Y + r.Height); minh = Math.Min(minh, key.Location.Y); } timeline.Keys.Add(key); } #endregion Size size = new Size((int)(maxw - minw), (int)(maxh - minh)); timeline.Size = size; animation.TimeLines.Add(timeline); } #endregion entity.Add(animation); } #endregion model.Add(entity); } #endregion Thread.CurrentThread.CurrentCulture = currentCulture; return(model); }