diff --git a/Assets/Editor/bread2unity/AssetGenerators/AnimationCreator.cs b/Assets/Editor/bread2unity/AssetGenerators/AnimationCreator.cs index a27b1c709..3a092bf4d 100644 --- a/Assets/Editor/bread2unity/AssetGenerators/AnimationCreator.cs +++ b/Assets/Editor/bread2unity/AssetGenerators/AnimationCreator.cs @@ -2,37 +2,14 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using Bread2Unity; using UnityEditor; using UnityEditor.Animations; -using UnityEditor.Graphs; using UnityEngine; -using Animation = Bread2Unity.Animation; namespace Bread2Unity { public static class AnimationCreator { - private class BccadCurve : AnimationCurve - { - private float _prev; - - public new void AddKey(float time, float value) - { - if (keys.Length != 0 && !(Math.Abs(value - _prev) > 0.000001)) return; - AddKey(new Keyframe(time, value, float.PositiveInfinity, float.PositiveInfinity)); - _prev = value; - } - - public void CopyLastKey(float time) - { - Keyframe lastKey = keys.LastOrDefault(); - - base.AddKey(new Keyframe(time, keys.Length > 0 ? lastKey.value : 1, float.PositiveInfinity, - float.PositiveInfinity)); - } - } - public static void CreateAnimation(BccadPrefab bccadPrefab, BCCAD bccad, PrefabData prefabData, List sprites) { @@ -42,10 +19,7 @@ namespace Bread2Unity $"Assets\\Resources\\Sprites\\Games\\{char.ToUpperInvariant(rootPrefabName[0]) + rootPrefabName.Substring(1)}"; var animationsFolderPath = spritesFolderPath + $"/Animations/{prefabData.Name}"; - if (!Directory.Exists(animationsFolderPath)) - { - Directory.CreateDirectory(animationsFolderPath); - } + if (!Directory.Exists(animationsFolderPath)) Directory.CreateDirectory(animationsFolderPath); var controller = AnimatorController.CreateAnimatorControllerAtPath( @@ -77,7 +51,7 @@ namespace Bread2Unity { var animationClip = new AnimationClip(); var prefab = bccadPrefab.ParentObject; - for (int childIndex = 0; childIndex < prefab.transform.childCount; childIndex++) + for (var childIndex = 0; childIndex < prefab.transform.childCount; childIndex++) { var child = prefab.transform.GetChild(childIndex).gameObject; @@ -87,7 +61,7 @@ namespace Bread2Unity var stepScaleX = new BccadCurve(); var stepScaleY = new BccadCurve(); var stepRotation = new BccadCurve(); - + var enabledCurve = new BccadCurve(); var xTransformCurve = new BccadCurve(); @@ -116,7 +90,7 @@ namespace Bread2Unity stepRotation.AddKey(currentTime, currentStep.Rotation); stepScaleX.AddKey(currentTime, currentStep.StretchX); stepScaleY.AddKey(currentTime, currentStep.StretchY); - + var bccadSprite = currentStep.BccadSprite; // Find the index of part of the game object var partIndex = bccadSprite.parts.Select((value, index) => new { value, index }) @@ -180,11 +154,8 @@ namespace Bread2Unity if (animation.Steps.Select(step => step.Rotation).Distinct().Count() > 1) animationClip.SetCurve("", typeof(Transform), "localEulerAngles.z", stepRotation); - - if (childIndex == 0) - { - enabledCurve.CopyLastKey(currentTime); - } + + if (childIndex == 0) enabledCurve.CopyLastKey(currentTime); var spriteBinding = new EditorCurveBinding { @@ -207,15 +178,13 @@ namespace Bread2Unity //Check if there is any need for z animation var setOfZIndexes = new HashSet(); foreach (var sprite in spritesAssociatedWithPrefab) - { - for (int i = 0; i < sprite.parts.Count && setOfZIndexes.Count < 2; i++) + for (var i = 0; i < sprite.parts.Count && setOfZIndexes.Count < 2; i++) { var part = sprite.parts[i]; if (bccadPrefab.RegionToChild[part.RegionIndex] != child) continue; setOfZIndexes.Add(i); } - } if ((from part in partsOfGameObject select part.PosX).Distinct().Count() > 1 || (from part in partsOfGameObject select part.PosY).Distinct().Count() > 1 || @@ -229,9 +198,7 @@ namespace Bread2Unity } if ((from part in partsOfGameObject select part.Rotation).Distinct().Count() > 1) - { animationClip.SetCurve(child.name, typeof(Transform), "localEulerAngles.z", rotationCurve); - } if ((from part in partsOfGameObject select part.StretchX).Distinct().Count() > 1 || (from part in partsOfGameObject select part.StretchY).Distinct().Count() > 1) @@ -257,5 +224,25 @@ namespace Bread2Unity return animationClip; } + + private class BccadCurve : AnimationCurve + { + private float _prev; + + public new void AddKey(float time, float value) + { + if (keys.Length != 0 && !(Math.Abs(value - _prev) > 0.000001)) return; + AddKey(new Keyframe(time, value, float.PositiveInfinity, float.PositiveInfinity)); + _prev = value; + } + + public void CopyLastKey(float time) + { + var lastKey = keys.LastOrDefault(); + + base.AddKey(new Keyframe(time, keys.Length > 0 ? lastKey.value : 1, float.PositiveInfinity, + float.PositiveInfinity)); + } + } } } \ No newline at end of file diff --git a/Assets/Editor/bread2unity/AssetGenerators/BccadPrefab.cs b/Assets/Editor/bread2unity/AssetGenerators/BccadPrefab.cs index 30ec32aeb..9753e305b 100644 --- a/Assets/Editor/bread2unity/AssetGenerators/BccadPrefab.cs +++ b/Assets/Editor/bread2unity/AssetGenerators/BccadPrefab.cs @@ -1,34 +1,34 @@ using System; using System.Collections.Generic; using System.Linq; -using Bread2Unity; using UnityEngine; namespace Bread2Unity { public class BccadPrefab { - public GameObject ParentObject { get; } - public readonly Dictionary RegionToChild = new Dictionary(); + private readonly BCCAD _bccad; private readonly List _children = new List(); private readonly PrefabData _data; - private readonly BCCAD _bccad; - public float HeightRatio { get; } - public float WidthRatio { get; } + public readonly Dictionary RegionToChild = new Dictionary(); public BccadPrefab(PrefabData data, BCCAD bccad, Texture2D texture) { ParentObject = new GameObject(data.Name); _data = data; - HeightRatio = (float)texture.height / bccad.sheetH; - WidthRatio = (float)texture.width / bccad.sheetW; + HeightRatio = (float)texture.height / bccad.SheetH; + WidthRatio = (float)texture.width / bccad.SheetW; _bccad = bccad; CalculateParts(); } + public GameObject ParentObject { get; } + public float HeightRatio { get; } + public float WidthRatio { get; } + private void CalculateParts() { - var defaultSprite = _bccad.sprites[_data.SpriteIndex]; + var defaultSprite = _bccad.Sprites[_data.SpriteIndex]; if (_data.Animations.Count == 0) { for (var index = 0; index < defaultSprite.parts.Count; index++) @@ -74,10 +74,7 @@ namespace Bread2Unity } } - foreach (var r in regionsList) - { - RegionToChild.Add(r, child); - } + foreach (var r in regionsList) RegionToChild.Add(r, child); childIndex++; } @@ -91,12 +88,8 @@ namespace Bread2Unity { var regionsOfSprite = sprite.parts.Select(part => part.RegionIndex).ToArray(); if (regionsOfSprite.Intersect(regions).Any()) - { foreach (var r in regionsOfSprite) - { notAdjacentRegions.Remove(r); - } - } } return notAdjacentRegions; @@ -104,7 +97,7 @@ namespace Bread2Unity public List> GetHiddenParts() { - var sprite = _bccad.sprites[_data.SpriteIndex]; + var sprite = _bccad.Sprites[_data.SpriteIndex]; // index, part, game object var hiddenParts = new List>(); var gameObjects = new List(_children); @@ -120,12 +113,13 @@ namespace Bread2Unity var region = RegionToChild.FirstOrDefault(keyValuePair => keyValuePair.Value == gameObject) .Key; var partIndexPairs = _data.Animations.SelectMany(anim => anim.Steps).Select(s => s.BccadSprite) - .SelectMany(bccadSprite => bccadSprite.parts.Select((part, index) => new {part, index})); - + .SelectMany(bccadSprite => bccadSprite.parts.Select((part, index) => new { part, index })); + // Get the first possible part that the game object can have. var partIndexPair = partIndexPairs .First(pair => pair.part.RegionIndex.Equals(region)); - hiddenParts.Add(new Tuple(partIndexPair.index, partIndexPair.part, gameObject)); + hiddenParts.Add( + new Tuple(partIndexPair.index, partIndexPair.part, gameObject)); } return hiddenParts; diff --git a/Assets/Editor/bread2unity/AssetGenerators/PrefabCreator.cs b/Assets/Editor/bread2unity/AssetGenerators/PrefabCreator.cs index 396c16771..7397d6e03 100644 --- a/Assets/Editor/bread2unity/AssetGenerators/PrefabCreator.cs +++ b/Assets/Editor/bread2unity/AssetGenerators/PrefabCreator.cs @@ -1,11 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; -using Bread2Unity; -using NUnit.Framework; using UnityEditor; using UnityEngine; -using Animation = Bread2Unity.Animation; namespace Bread2Unity { @@ -21,7 +18,7 @@ namespace Bread2Unity var root = PrefabUtility.LoadPrefabContents(prefabAssetPath); foreach (var prefabData in prefabDataList) { - var defaultSprite = bccad.sprites[prefabData.SpriteIndex]; + var defaultSprite = bccad.Sprites[prefabData.SpriteIndex]; var bccadPrefab = new BccadPrefab(prefabData, bccad, texture); var newPrefab = bccadPrefab.ParentObject; newPrefab.transform.SetParent(root.transform); diff --git a/Assets/Editor/bread2unity/AssetGenerators/SpriteCreator.cs b/Assets/Editor/bread2unity/AssetGenerators/SpriteCreator.cs index b08216600..5b1818e60 100644 --- a/Assets/Editor/bread2unity/AssetGenerators/SpriteCreator.cs +++ b/Assets/Editor/bread2unity/AssetGenerators/SpriteCreator.cs @@ -1,37 +1,33 @@ -using System; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; -using Bread2Unity; - namespace Bread2Unity { public class SpriteCreator : MonoBehaviour { public const int PixelsPerUnit = 100; - public static Texture2D ComputeSprites(BCCAD bccad, string texturePath, string prefabName, bool shouldRotate = false) + + public static Texture2D ComputeSprites(BCCAD bccad, string texturePath, string prefabName, + bool shouldRotate = false) { var textureName = Path.GetFileName(texturePath); var spritesFolder = $"Assets\\Resources\\Sprites\\Games\\{char.ToUpperInvariant(prefabName[0]) + prefabName.Substring(1)}\\"; - if (!Directory.Exists(spritesFolder)) - { - Directory.CreateDirectory(spritesFolder); - } + if (!Directory.Exists(spritesFolder)) Directory.CreateDirectory(spritesFolder); var destTexturePath = spritesFolder + $"{textureName}"; - var newTexture = new Texture2D(bccad.sheetW, bccad.sheetH); + var newTexture = new Texture2D(bccad.SheetW, bccad.SheetH); newTexture.LoadImage(File.ReadAllBytes(texturePath)); var finalTexture = shouldRotate ? RotateTexture(newTexture) : newTexture; finalTexture.name = textureName.Substring(0, textureName.Length - ".png".Length); File.WriteAllBytes(destTexturePath, finalTexture.EncodeToPNG()); AssetDatabase.ImportAsset(destTexturePath); var ti = AssetImporter.GetAtPath(destTexturePath) as TextureImporter; - + if (ti != null) { ti.isReadable = true; @@ -43,18 +39,18 @@ namespace Bread2Unity ti.textureCompression = TextureImporterCompression.Uncompressed; var newData = new List(); var rectCtr = 0; - var heightRatio = (float)finalTexture.height / bccad.sheetH; - var widthRatio = (float)finalTexture.width / bccad.sheetW; - foreach (var r in bccad.regions) + var heightRatio = (float)finalTexture.height / bccad.SheetH; + var widthRatio = (float)finalTexture.width / bccad.SheetW; + foreach (var r in bccad.Regions) { var smd = new SpriteMetaData { pivot = new Vector2(0.5f, 0.5f), alignment = 0, name = finalTexture.name + "_" + rectCtr, - rect = new Rect(r.regionX * widthRatio, - finalTexture.height - (r.regionH + r.regionY) * heightRatio, r.regionW * widthRatio, - r.regionH * heightRatio) + rect = new Rect(r.RegionX * widthRatio, + finalTexture.height - (r.RegionH + r.RegionY) * heightRatio, r.RegionW * widthRatio, + r.RegionH * heightRatio) }; newData.Add(smd); @@ -70,11 +66,11 @@ namespace Bread2Unity public static Texture2D RotateTexture(Texture2D image) { - Texture2D + var target = new Texture2D(image.height, image.width, image.format, false); //flip image width<>height, as we rotated the image, it might be a rect. not a square image - Color32[] pixels = image.GetPixels32(0); + var pixels = image.GetPixels32(0); pixels = RotateTextureGrid(pixels, image.width, image.height); target.SetPixels32(pixels); target.Apply(); @@ -87,15 +83,11 @@ namespace Bread2Unity private static Color32[] RotateTextureGrid(Color32[] tex, int wid, int hi) { - Color32[] ret = new Color32[wid * hi]; //reminder we are flipping these in the target + var ret = new Color32[wid * hi]; //reminder we are flipping these in the target - for (int y = 0; y < hi; y++) - { - for (int x = 0; x < wid; x++) - { - ret[(hi - 1) - y + x * hi] = tex[x + y * wid]; //juggle the pixels around - } - } + for (var y = 0; y < hi; y++) + for (var x = 0; x < wid; x++) + ret[hi - 1 - y + x * hi] = tex[x + y * wid]; //juggle the pixels around return ret; } diff --git a/Assets/Editor/bread2unity/BCCAD.cs b/Assets/Editor/bread2unity/BCCAD.cs index c7fab285d..ebe4a772b 100644 --- a/Assets/Editor/bread2unity/BCCAD.cs +++ b/Assets/Editor/bread2unity/BCCAD.cs @@ -1,10 +1,7 @@ using System; using System.Linq; -using System.Runtime.CompilerServices; using System.Text; -using Bread2Unity; using UnityEngine; -using Animation = Bread2Unity.Animation; namespace Bread2Unity { @@ -12,39 +9,39 @@ namespace Bread2Unity { public static BCCAD Read(byte[] bytes) { - BCCAD bccad = new BCCAD(); + var bccad = new BCCAD(); var byteBuffer = new ByteBuffer(bytes); byteBuffer.ReadInt(); //timestamp - bccad.sheetW = byteBuffer.ReadUShort(); - bccad.sheetH = byteBuffer.ReadUShort(); + bccad.SheetW = byteBuffer.ReadUShort(); + bccad.SheetH = byteBuffer.ReadUShort(); // Sprites var spritesNum = byteBuffer.ReadInt(); - for (int i = 0; i < spritesNum; i++) + for (var i = 0; i < spritesNum; i++) { - BccadSprite bccadSprite = new BccadSprite(); + var bccadSprite = new BccadSprite(); var partsNum = byteBuffer.ReadInt(); - for (int j = 0; j < partsNum; j++) + for (var j = 0; j < partsNum; j++) { - SpritePart part = new SpritePart(); + var part = new SpritePart(); var region = new Region { - regionX = byteBuffer.ReadUShort(), - regionY = byteBuffer.ReadUShort(), - regionW = byteBuffer.ReadUShort(), - regionH = byteBuffer.ReadUShort() + RegionX = byteBuffer.ReadUShort(), + RegionY = byteBuffer.ReadUShort(), + RegionW = byteBuffer.ReadUShort(), + RegionH = byteBuffer.ReadUShort() }; - var result = bccad.regions.FindIndex(x => Equals(x, region)); + var result = bccad.Regions.FindIndex(x => Equals(x, region)); if (result == -1) { - bccad.regions.Add(region); - part.RegionIndex = new RegionIndex(bccad.regions.Count - 1, 0); + bccad.Regions.Add(region); + part.RegionIndex = new RegionIndex(bccad.Regions.Count - 1, 0); } else { var repeatedNumber = bccadSprite.parts.Count(p => p.RegionIndex.Index == result); part.RegionIndex = new RegionIndex(result, repeatedNumber); - } + part.PosX = byteBuffer.ReadShort(); part.PosY = byteBuffer.ReadShort(); part.StretchX = byteBuffer.ReadFloat(); @@ -61,11 +58,8 @@ namespace Bread2Unity Convert.ToInt32(byteBuffer.ReadByte() & 0xff) / 255f); part.Multicolor.a = byteBuffer.ReadByte() / 255f; - - for (int k = 0; k < 12; k++) - { - byteBuffer.ReadByte(); - } + + for (var k = 0; k < 12; k++) byteBuffer.ReadByte(); part.designation = byteBuffer.ReadByte(); part.unknown = byteBuffer.ReadShort(); @@ -76,30 +70,24 @@ namespace Bread2Unity bccadSprite.parts.Add(part); } - bccad.sprites.Add(bccadSprite); + bccad.Sprites.Add(bccadSprite); } - + // Animations var animationsNum = byteBuffer.ReadInt(); - for (int i = 0; i < animationsNum; i++) + for (var i = 0; i < animationsNum; i++) { var anim = new Animation(); var nameBuilder = new StringBuilder(); var length = Convert.ToInt32(byteBuffer.ReadByte()); - for (int j = 0; j < length; j++) - { - nameBuilder.Append(Convert.ToChar(byteBuffer.ReadByte())); - } + for (var j = 0; j < length; j++) nameBuilder.Append(Convert.ToChar(byteBuffer.ReadByte())); + + for (var j = 0; j < 4 - (length + 1) % 4; j++) byteBuffer.ReadByte(); - for (int j = 0; j < 4 - ((length + 1) % 4); j++) - { - byteBuffer.ReadByte(); - } - anim.Name = nameBuilder.ToString(); anim.InterpolationInt = byteBuffer.ReadInt(); var stepsNum = byteBuffer.ReadInt(); - for (int j = 0; j < stepsNum; j++) + for (var j = 0; j < stepsNum; j++) { var spriteIndex = byteBuffer.ReadUShort(); var step = new AnimationStep @@ -114,7 +102,7 @@ namespace Bread2Unity Color = new Color(Convert.ToInt32(byteBuffer.ReadByte() & 0xff) / 255f, Convert.ToInt32(byteBuffer.ReadByte() & 0xff) / 255f, Convert.ToInt32(byteBuffer.ReadByte() & 0xff) / 255f), - BccadSprite = bccad.sprites[spriteIndex] + BccadSprite = bccad.Sprites[spriteIndex] }; byteBuffer.ReadByte(); byteBuffer.ReadByte(); @@ -123,7 +111,7 @@ namespace Bread2Unity anim.Steps.Add(step); } - bccad.animations.Add(anim); + bccad.Animations.Add(anim); } return bccad; diff --git a/Assets/Editor/bread2unity/Bread2Unity.cs b/Assets/Editor/bread2unity/Bread2Unity.cs index d7a006a9d..5d7d994bd 100644 --- a/Assets/Editor/bread2unity/Bread2Unity.cs +++ b/Assets/Editor/bread2unity/Bread2Unity.cs @@ -1,10 +1,8 @@ -using System; using System.Collections.Generic; using System.IO; using System.Linq; -using UnityEngine; using UnityEditor; -using Bread2Unity; +using UnityEngine; namespace Bread2Unity { @@ -13,38 +11,22 @@ namespace Bread2Unity private const string EditorFolderName = "bread2unity"; private const float Width = 657; private const float Height = 442; - private GameObject _prefab; + private readonly List _animationsIndexes = new List(); + private readonly List _prefabDataList = new List(); private DataModel _animation; - private List _prefabDataList = new List(); - private List _animationsIndexes = new List (); - private bool _shouldRotate; + private GameObject _prefab; private Vector2 _scrollPosition; - - - [MenuItem("Tools/bread2unity")] - public static void ShowWindow() - { - var window = GetWindow("bread2unity"); - var x = Screen.currentResolution.width / 2f - Width; - var y = Screen.currentResolution.height / 2f - Height; - window.position = new Rect(x,y,Width,Height); - } - - public void CreateGUI() - { - _animationsIndexes.Add(""); - _prefabDataList.Add(new PrefabData("", 0)); - } + private bool _shouldRotate; public void OnGUI() { // Logo - Texture logo = + var logo = (Texture)AssetDatabase.LoadAssetAtPath($"Assets/Editor/{EditorFolderName}/logo.png", typeof(Texture)); GUILayout.Box(logo, GUILayout.ExpandWidth(true), GUILayout.Height(60)); GUILayout.Space(30); - GUIStyle desc = EditorStyles.label; + var desc = EditorStyles.label; desc.wordWrap = true; desc.fontStyle = FontStyle.BoldAndItalic; // Description @@ -110,7 +92,7 @@ namespace Bread2Unity _shouldRotate = GUILayout.Toggle(_shouldRotate, "Rotate Spritesheet"); GUILayout.Space(12f); - + // Create button if (GUILayout.Button("Generate Assets") && _prefab != null) { @@ -123,9 +105,10 @@ namespace Bread2Unity if (!string.IsNullOrEmpty(pngFilePath)) { var bccad = BCCAD.Read(File.ReadAllBytes(bccadFilePath)); - var spriteTexture = SpriteCreator.ComputeSprites(bccad, pngFilePath, _prefab.name, _shouldRotate); + var spriteTexture = + SpriteCreator.ComputeSprites(bccad, pngFilePath, _prefab.name, _shouldRotate); //Create prefab from prefab data - for (int i = 0; i < _prefabDataList.Count; i++) + for (var i = 0; i < _prefabDataList.Count; i++) { List animationIndexes; var prefabData = _prefabDataList[i]; @@ -134,7 +117,7 @@ namespace Bread2Unity else animationIndexes = _animationsIndexes[i].Split(',').Select(int.Parse).ToList(); prefabData.Animations = - animationIndexes.Select(index => bccad.animations[index]).ToList(); + animationIndexes.Select(index => bccad.Animations[index]).ToList(); } PrefabCreator.CreatePrefab(_prefab, bccad, _prefabDataList, spriteTexture); @@ -143,14 +126,28 @@ namespace Bread2Unity } GUILayout.Space(12f); - + GUILayout.BeginHorizontal(); if (GUILayout.Button("Bread Download", GUILayout.Height(40))) - { Application.OpenURL("https://github.com/rhmodding/bread"); - } GUILayout.EndHorizontal(); } + + public void CreateGUI() + { + _animationsIndexes.Add(""); + _prefabDataList.Add(new PrefabData("", 0)); + } + + + [MenuItem("Tools/bread2unity")] + public static void ShowWindow() + { + var window = GetWindow("bread2unity"); + var x = Screen.currentResolution.width / 2f - Width; + var y = Screen.currentResolution.height / 2f - Height; + window.position = new Rect(x, y, Width, Height); + } } } \ No newline at end of file diff --git a/Assets/Editor/bread2unity/ByteBuffer.cs b/Assets/Editor/bread2unity/ByteBuffer.cs index ca54127b1..13fb91815 100644 --- a/Assets/Editor/bread2unity/ByteBuffer.cs +++ b/Assets/Editor/bread2unity/ByteBuffer.cs @@ -6,14 +6,14 @@ namespace Bread2Unity { private readonly byte[] _bytes; - public int ReadPoint{ get; private set; } - public ByteBuffer(byte[] bytes) { _bytes = bytes; ReadPoint = 0; } + public int ReadPoint { get; private set; } + public ushort ReadUShort() { var result = BitConverter.ToUInt16(_bytes, ReadPoint); @@ -30,21 +30,21 @@ namespace Bread2Unity public float ReadFloat() { - float result = BitConverter.ToSingle(_bytes, ReadPoint); + var result = BitConverter.ToSingle(_bytes, ReadPoint); ReadPoint += sizeof(float); return result; } public byte ReadByte() { - byte result = _bytes[ReadPoint]; + var result = _bytes[ReadPoint]; ReadPoint += sizeof(byte); return result; } public int ReadInt() { - int result = BitConverter.ToInt32(_bytes, ReadPoint); + var result = BitConverter.ToInt32(_bytes, ReadPoint); ReadPoint += sizeof(int); return result; } diff --git a/Assets/Editor/bread2unity/Model/Animation.cs b/Assets/Editor/bread2unity/Model/Animation.cs index 415b903c9..7ea306681 100644 --- a/Assets/Editor/bread2unity/Model/Animation.cs +++ b/Assets/Editor/bread2unity/Model/Animation.cs @@ -1,4 +1,3 @@ -using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -6,30 +5,29 @@ namespace Bread2Unity { public class Animation { - public List Steps = new List(); - public string Name; public int InterpolationInt = 0; + public string Name; + public List Steps = new List(); public bool Interpolated => (InterpolationInt & 0b1) > 0; } public class AnimationStep { + public BccadSprite BccadSprite; + public Color Color; //needs to add public ushort Delay; - public BccadSprite BccadSprite; - - public short TranslateX; - public short TranslateY; - public float Depth; - - public float StretchX;//needs to add - public float StretchY; //needs to add + + public byte Opacity; //needs to add public float Rotation; //needs to add - public byte Opacity;//needs to add - public Color Color;//needs to add + public float StretchX; //needs to add + public float StretchY; //needs to add + + public short TranslateX; + public short TranslateY; } } \ No newline at end of file diff --git a/Assets/Editor/bread2unity/Model/BCCADSprite.cs b/Assets/Editor/bread2unity/Model/BCCADSprite.cs index 0c63d5f05..2618adb4d 100644 --- a/Assets/Editor/bread2unity/Model/BCCADSprite.cs +++ b/Assets/Editor/bread2unity/Model/BCCADSprite.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -12,28 +10,29 @@ namespace Bread2Unity public class SpritePart { - public RegionIndex RegionIndex; + public float blDepth; + public float brDepth; - public short PosX; - public short PosY; - public float StretchX; - public float StretchY; - - public float Rotation; + public byte designation; public bool FlipX; public bool FlipY; - - - public byte designation; - public short unknown; - public float tlDepth; - public float blDepth; - public float trDepth; - public float brDepth; public Color Multicolor; + + public short PosX; + public short PosY; + public RegionIndex RegionIndex; + + public float Rotation; public Color ScreenColor; + + public float StretchX; + public float StretchY; + public float tlDepth; + public float trDepth; + + public short unknown; // public Color GetColor() => new Color(Multicolor.r, Multicolor.g, Multicolor.b, Multicolor.a); } @@ -60,7 +59,7 @@ namespace Bread2Unity public override int GetHashCode() { - int hash = 23; + var hash = 23; hash = hash * 31 + Index; hash = hash * 31 + RepeatedNumber; return hash; diff --git a/Assets/Editor/bread2unity/Model/DataModel.cs b/Assets/Editor/bread2unity/Model/DataModel.cs index 22cbd82ea..f8dc9e7ab 100644 --- a/Assets/Editor/bread2unity/Model/DataModel.cs +++ b/Assets/Editor/bread2unity/Model/DataModel.cs @@ -1,52 +1,52 @@ -using System; -using System.Collections; using System.Collections.Generic; namespace Bread2Unity { public class DataModel { - public List regions = new List(); - public List sprites = new List(); - public List animations = new List(); - public int sheetW; - public int sheetH; + public List Animations = new List(); + public List Regions = new List(); + public int SheetH; + public int SheetW; + public List Sprites = new List(); } public class Region { - public ushort regionX; - public ushort regionY; - public ushort regionW; - public ushort regionH; + public ushort RegionH; + public ushort RegionW; + public ushort RegionX; + public ushort RegionY; public override string ToString() { - return $"regionX: {regionX} regionY: {regionY} regionW: {regionW} regionH: {regionH}"; + return $"regionX: {RegionX} regionY: {RegionY} regionW: {RegionW} regionH: {RegionH}"; } protected bool Equals(Region other) { - return regionX == other.regionX && regionY == other.regionY && regionW == other.regionW && - regionH == other.regionH; + return RegionH == other.RegionH && RegionW == other.RegionW && RegionX == other.RegionX && + RegionY == other.RegionY; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; - if (obj.GetType() != this.GetType()) return false; + if (obj.GetType() != GetType()) return false; return Equals((Region)obj); } public override int GetHashCode() { - int hash = 23; - hash = hash * 31 + regionX; - hash = hash * 31 + regionY; - hash = hash * 31 + regionW; - hash = hash * 31 + regionH; - return hash; + unchecked + { + var hashCode = RegionH.GetHashCode(); + hashCode = (hashCode * 397) ^ RegionW.GetHashCode(); + hashCode = (hashCode * 397) ^ RegionX.GetHashCode(); + hashCode = (hashCode * 397) ^ RegionY.GetHashCode(); + return hashCode; + } } } } \ No newline at end of file diff --git a/Assets/Editor/bread2unity/PrefabData.cs b/Assets/Editor/bread2unity/PrefabData.cs index 7c7547c8d..4a8e041d4 100644 --- a/Assets/Editor/bread2unity/PrefabData.cs +++ b/Assets/Editor/bread2unity/PrefabData.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; -using Bread2Unity; namespace Bread2Unity { public class PrefabData { - public string Name; public List Animations; + public string Name; public int SpriteIndex; public PrefabData(string name, int spriteIndex) diff --git a/Assets/Editor/bread2unity/README.md b/Assets/Editor/bread2unity/README.md index b3a05ac18..2486cb130 100644 --- a/Assets/Editor/bread2unity/README.md +++ b/Assets/Editor/bread2unity/README.md @@ -20,6 +20,7 @@ Rhythm Heaven animation to Unity animation converter - [X] remove bccad test - [X] add default line for bcaad data - [X] change window height and width +- [x] fix imports - [ ] change sprite order with sprite renderer. - [ ] write a normal readme