//import Com.Brashmonkey.Spriter.converters.SpriterObjectConverter; //import AnimationObject; //final private SpriterObjectConverter objectConverter = new SpriterObjectConverter(); public virtual SpriterAnimation buildAnimation( Animation animation) { MainLine mainline = animation.getMainline(); IList<TimeLine> timeLines = animation.getTimeline(); IList<Key> keyFrames = mainline .getKey(); bonesToTween = new Dictionary<SpriterBone , int>(); objectsToTween = new Dictionary<SpriterObject , int>(); SpriterAnimation spriterAnimation = new SpriterAnimation(animation.getId(), animation.getName(), animation.getLength()); for (int k = 0; k < keyFrames.Count; k++) { Key mainlineKey = keyFrames[k]; IList<SpriterObject> tempObjects = new List<SpriterObject >(); IList<SpriterBone> tempBones = new List<SpriterBone >(); SpriterKeyFrame frame = new SpriterKeyFrame (); frame.setTime(mainlineKey.getTime()); frame.setId(mainlineKey.getId()); foreach (BoneRef boneRef in mainlineKey.getBoneRef()) { TimeLine timeline = timeLines[boneRef.getTimeline()]; Key timelineKey = timeline.getKey()[boneRef.getKey()]; SpriterBone bone = boneMerger.merge(boneRef, timelineKey ); bone.setName(timeline.getName()); if (mainlineKey.getTime() != timelineKey.getTime()) { bonesToTween.Add(bone, k); } else { tempBones.Add(bone); } } //} foreach (AnimationObjectRef objectRef in mainlineKey.getObjectRef ()) { TimeLine timeline = timeLines[objectRef.getTimeline()]; Key timelineKey = timeline.getKey()[objectRef.getKey() ]; SpriterObject @object = objectMerger.merge(objectRef , timelineKey); @object.setName(timeline.getName()); if (mainlineKey.getTime() != timelineKey.getTime()) { objectsToTween.Add(@object, k); } else { tempObjects.Add(@object); } } //} SpriterObject[] objArray = new SpriterObject[tempObjects.Count]; tempObjects.CopyTo(objArray,0); frame.setObjects(objArray); SpriterBone[] boneArray = new SpriterBone[tempBones.Count]; tempBones.CopyTo(boneArray, 0); frame.setBones(boneArray); spriterAnimation.frames.Add(frame); } this.tweenBones(spriterAnimation); this.tweenObjects(spriterAnimation); return spriterAnimation; }
/// <summary>Generates all needed keyframes from the given spriter data.</summary> /// <remarks>Generates all needed keyframes from the given spriter data. This method sorts all objects by its z_index value to draw them in a proper way. /// </remarks> /// <param name="spriterData">SpriterData to generate from.</param> /// <returns>generated keyframe list.</returns> public static IList<SpriterAnimation> generateKeyFramePool(com.discobeard.spriter.dom.SpriterData data, com.discobeard.spriter.dom.Entity entity) { IList<SpriterAnimation > spriterAnimations = new List<SpriterAnimation >(); IList<com.discobeard.spriter.dom.Animation> animations = entity.getAnimation(); Com.Brashmonkey.Spriter.mergers.SpriterAnimationBuilder frameBuilder = new Com.Brashmonkey.Spriter.mergers.SpriterAnimationBuilder (); foreach (com.discobeard.spriter.dom.Animation anim in animations) { SpriterAnimation spriterAnimation = frameBuilder .buildAnimation(anim); bool found = false; foreach (SpriterKeyFrame key in spriterAnimation .frames) { if (!found) { found = key.getTime() == anim.getLength(); } sort(key.getObjects()); foreach (SpriterBone bone in key.getBones()) { foreach (SpriterBone bone2 in key.getBones()) { if (bone2.hasParent()) { if (!bone2.equals(bone) && bone2.getParentId() == bone.getId()) { bone.addChildBone(bone2); } } } foreach (SpriterObject @object in key.getObjects( )) { Com.Brashmonkey.Spriter.file.Reference @ref = @object.getRef(); com.discobeard.spriter.dom.File f = data.getFolder()[@ref.folder].getFile()[@ref. file]; @ref.dimensions = new Com.Brashmonkey.Spriter.SpriterRectangle(0, f.getHeight(), f.getWidth(), 0f); if (bone.getId() == @object.getParentId()) { bone.addChildObject(@object); } } } } if (!found) { SpriterKeyFrame firstFrame = spriterAnimation.frames [0]; SpriterKeyFrame lastFrame = new SpriterKeyFrame (); lastFrame.setId(spriterAnimation.keyframes()); lastFrame.setBones(new SpriterBone[firstFrame.getBones ().Length]); lastFrame.setObjects(new SpriterObject[firstFrame .getObjects().Length]); for (int j = 0; j < lastFrame.getBones().Length; j++) { SpriterBone bone = new SpriterBone (); firstFrame.getBones()[j].copyValuesTo(bone); lastFrame.getBones()[j] = bone; } for (int j_1 = 0; j_1 < lastFrame.getObjects().Length; j_1++) { SpriterObject @object = new SpriterObject (); firstFrame.getObjects()[j_1].copyValuesTo(@object); lastFrame.getObjects()[j_1] = @object; } lastFrame.setTime(anim.getLength()); spriterAnimation.frames.Add(lastFrame); } spriterAnimations.Add(spriterAnimation); } return spriterAnimations; }