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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 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)));
 }
Exemple #4
0
        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);
        }