public void OnCopyActivated() { SkinningCopyData skinningCopyData = null; var selectedSprite = skinningCache.selectedSprite; if (selectedSprite == null) { var sprites = skinningCache.GetSprites(); if (!skinningCache.character || sprites.Length > 1) { skinningCopyData = CopyAll(); } else if (sprites.Length == 1) { skinningCopyData = CopySingle(sprites[0]); } } else { skinningCopyData = CopySingle(selectedSprite); } if (skinningCopyData != null) { m_CopyToolStringStore.stringStore = SkinningCopyUtility.SerializeSkinningCopyDataToString(skinningCopyData); } skinningCache.events.copy.Invoke(); }
public string Serialize(SkinningCopyData skinningData) { XmlSerializer xmlSerializer = new XmlSerializer(skinningData.GetType()); using (StringWriter textWriter = new StringWriter()) { xmlSerializer.Serialize(textWriter, skinningData); return(textWriter.ToString()); } }
public SkinningCopyData CopyAll() { var skinningCopyData = new SkinningCopyData(); skinningCopyData.pixelsPerUnit = pixelsPerUnit; var sprites = skinningCache.GetSprites(); foreach (var sprite in sprites) { var skinningSpriteData = new SkinningCopySpriteData(); skinningSpriteData.spriteName = sprite.name; var skeleton = skinningCache.GetEffectiveSkeleton(sprite); if (skeleton != null && skeleton.BoneCount > 0) { if (skinningCache.hasCharacter) { // Order doesn't matter for character bones skinningSpriteData.spriteBones = skeleton.bones.ToSpriteBone(Matrix4x4.identity).Select(x => new SpriteBoneCopyData() { spriteBone = x, order = -1 }).ToList(); } else { skinningSpriteData.spriteBones = new List <SpriteBoneCopyData>(); var bones = skeleton.bones.FindRoots(); foreach (var bone in bones) { GetSpriteBoneDataRecursively(skinningSpriteData.spriteBones, bone, skeleton.bones.ToList()); } } } if (meshTool != null) { CopyMeshFromSpriteCache(sprite, skinningSpriteData); } skinningCopyData.copyData.Add(skinningSpriteData); } if (meshTool != null) { meshTool.SetupSprite(null); } return(skinningCopyData); }
public SkinningCopyData CopySingle(SpriteCache sprite) { var skinningCopyData = new SkinningCopyData(); skinningCopyData.pixelsPerUnit = pixelsPerUnit; // Mesh var skinningSpriteData = new SkinningCopySpriteData(); skinningCopyData.copyData.Add(skinningSpriteData); CopyMeshFromSpriteCache(sprite, skinningSpriteData); // Bones var rootBones = new List <BoneCache>(); BoneCache[] boneCache = null; if (skinningCache.hasCharacter) { var characterPart = skinningCache.GetCharacterPart(sprite); if (characterPart != null && characterPart.bones != null) { boneCache = characterPart.bones; var bones = characterPart.bones.FindRoots(); foreach (var bone in bones) { rootBones.Add(bone); } } } else { var skeleton = skinningCache.GetEffectiveSkeleton(sprite); if (skeleton != null && skeleton.BoneCount > 0) { boneCache = skeleton.bones; var bones = boneCache.FindRoots(); foreach (var bone in bones) { rootBones.Add(bone); } } } if (rootBones.Count > 0) { skinningSpriteData.spriteBones = new List <SpriteBoneCopyData>(); foreach (var rootBone in rootBones) { var rootBoneIndex = skinningSpriteData.spriteBones.Count; GetSpriteBoneDataRecursively(skinningSpriteData.spriteBones, rootBone, boneCache.ToList()); if (skinningCache.hasCharacter) { // Offset the bones based on the currently selected Sprite in Character mode var characterPart = sprite.GetCharacterPart(); if (characterPart != null) { var offset = characterPart.position; var rootSpriteBone = skinningSpriteData.spriteBones[rootBoneIndex]; rootSpriteBone.spriteBone.position = rootSpriteBone.spriteBone.position - offset; skinningSpriteData.spriteBones[rootBoneIndex] = rootSpriteBone; } } } } return(skinningCopyData); }
public string Serialize(SkinningCopyData skinningData) { return(JsonUtility.ToJson(skinningData)); }