From 3e24ac9527610c30a09664f1505a1b7b8851668b Mon Sep 17 00:00:00 2001 From: quinnvoker Date: Sun, 25 Nov 2018 21:28:32 -0800 Subject: [PATCH] Extensions & Frame Restructuring Implemented Custom Extensions for SpriteMaps (*.smap), Animations (*.anim) and AnimationSets (*.animset). Also restructured Frame to be a container for SpriteMapRegions rather than an extension of them. This will enable easier access to updating them when loading SpriteMaps in the Editor. --- AnimationEditor/AnimationEditor.csproj | 8 ++++- AnimationEditor/Form1.Designer.cs | 16 ++++++---- AnimationEditor/Form1.cs | 23 +++++++++------ AnimationEditor/packages.config | 3 ++ PuzzSwap.sln | 6 ---- QURO.AnimationLibrary/Animation.cs | 18 +---------- QURO.AnimationLibrary/Frame.cs | 41 +++++--------------------- SpriteMapEditor/Form1.Designer.cs | 7 +++-- 8 files changed, 47 insertions(+), 75 deletions(-) diff --git a/AnimationEditor/AnimationEditor.csproj b/AnimationEditor/AnimationEditor.csproj index c296a09..9aadbbb 100644 --- a/AnimationEditor/AnimationEditor.csproj +++ b/AnimationEditor/AnimationEditor.csproj @@ -39,14 +39,20 @@ ..\packages\MonoGame.Forms.DX.2.1.0.2\lib\net451\MonoGame.Framework.dll - ..\packages\MonoGame.Forms.DX.2.1.0.2\lib\net451\SharpDX.dll + ..\packages\SharpDX.4.0.1\lib\net45\SharpDX.dll ..\packages\MonoGame.Forms.DX.2.1.0.2\lib\net451\SharpDX.Direct3D11.dll + + ..\packages\SharpDX.Direct3D9.4.0.1\lib\net45\SharpDX.Direct3D9.dll + ..\packages\MonoGame.Forms.DX.2.1.0.2\lib\net451\SharpDX.DXGI.dll + + ..\packages\SharpDX.Mathematics.4.0.1\lib\net45\SharpDX.Mathematics.dll + diff --git a/AnimationEditor/Form1.Designer.cs b/AnimationEditor/Form1.Designer.cs index d863f58..6ba83e3 100644 --- a/AnimationEditor/Form1.Designer.cs +++ b/AnimationEditor/Form1.Designer.cs @@ -88,9 +88,9 @@ // // loadSpriteMapDialog // - this.loadSpriteMapDialog.DefaultExt = "xml"; + this.loadSpriteMapDialog.DefaultExt = "smap"; this.loadSpriteMapDialog.FileName = "openFileDialog1"; - this.loadSpriteMapDialog.Filter = "Xml Files|*.xml"; + this.loadSpriteMapDialog.Filter = "QUROGames SpriteMap|*smap"; // // spriteListBox // @@ -321,17 +321,19 @@ // // saveAnimationDialog // - this.saveAnimationDialog.DefaultExt = "xml"; - this.saveAnimationDialog.Filter = "Xml Files|*.xml"; + this.saveAnimationDialog.DefaultExt = "anim"; + this.saveAnimationDialog.Filter = "QUROGames Animation|*.anim"; // // saveAnimationSetDialog // - this.saveAnimationSetDialog.DefaultExt = "xml"; - this.saveAnimationSetDialog.Filter = "Xml files|*.xml"; + this.saveAnimationSetDialog.DefaultExt = "animset"; + this.saveAnimationSetDialog.Filter = "QUROGames AnimationSet|*.animSet"; // // loadAnimationDialog // + this.loadAnimationDialog.DefaultExt = "anim"; this.loadAnimationDialog.FileName = "openFileDialog1"; + this.loadAnimationDialog.Filter = "QUROGames Animation|*.anim"; // // addAnimationButton // @@ -497,7 +499,9 @@ // // loadAnimationSetDialog // + this.loadAnimationSetDialog.DefaultExt = "animset"; this.loadAnimationSetDialog.FileName = "openFileDialog1"; + this.loadAnimationSetDialog.Filter = "QUROGames AnimationSet|*.animSet"; // // Form1 // diff --git a/AnimationEditor/Form1.cs b/AnimationEditor/Form1.cs index cac86e9..e3892e2 100644 --- a/AnimationEditor/Form1.cs +++ b/AnimationEditor/Form1.cs @@ -85,9 +85,12 @@ namespace AnimationEditor animationPreview.Enabled = true; } - private void InitiateAnimationList() + private void InitiateAnimationList(bool newAnimation = true) { - Animations = new BindingList(); + if (newAnimation) + Animations = new BindingList() { new Animation() }; + else + Animations = new BindingList(); animationBox.DataSource = Animations; animationBox.DisplayMember = "Name"; } @@ -210,6 +213,7 @@ namespace AnimationEditor FileStream fileStream = new FileStream(loadSpriteSheetDialog.FileName, FileMode.Open); SpriteSheet = Texture2D.FromStream(animationPreview.Editor.graphics, fileStream); EnableMapAndAnimationLoadingControls(); + fileStream.Close(); } } @@ -238,6 +242,7 @@ namespace AnimationEditor Frames = new BindingList(); frameListBox.DataSource = Frames; frameListBox.DisplayMember = "Name"; + InitiateAnimationList(); } EnableSpriteMapControls(); @@ -420,10 +425,10 @@ namespace AnimationEditor private void saveAnimationSetToolStripMenuItem_Click(object sender, EventArgs e) { - var animSet = new Dictionary(); + var animSet = new AnimationSet(); foreach(Animation anim in Animations) { - if (animSet.ContainsKey(anim.Name)) + if (animSet.Anims.ContainsKey(anim.Name)) { string errorMessage = "Duplicate names found! Please ensure all animations have unique names."; string caption = "Save Aborted"; @@ -434,7 +439,7 @@ namespace AnimationEditor } else { - animSet.Add(anim.Name, anim); + animSet.Add(anim); } } @@ -451,19 +456,19 @@ namespace AnimationEditor { if (loadAnimationSetDialog.ShowDialog() == DialogResult.OK) { - Dictionary loadedAnimSet; + AnimationSet loadedAnimSet; using (XmlReader xmlRead = XmlReader.Create(loadAnimationSetDialog.FileName)) { - loadedAnimSet = IntermediateSerializer.Deserialize>(xmlRead, null); + loadedAnimSet = IntermediateSerializer.Deserialize(xmlRead, null); } if (animationBox.Enabled == false) { EnableAnimationEditingControls(); } - InitiateAnimationList(); - foreach(KeyValuePair currentEntry in loadedAnimSet) + InitiateAnimationList(newAnimation: false); + foreach(KeyValuePair currentEntry in loadedAnimSet.Anims) { Animations.Add(currentEntry.Value); } diff --git a/AnimationEditor/packages.config b/AnimationEditor/packages.config index 4b22bf5..8a06f4a 100644 --- a/AnimationEditor/packages.config +++ b/AnimationEditor/packages.config @@ -1,4 +1,7 @@  + + + \ No newline at end of file diff --git a/PuzzSwap.sln b/PuzzSwap.sln index 22d48c2..9807a64 100644 --- a/PuzzSwap.sln +++ b/PuzzSwap.sln @@ -7,8 +7,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PuzzSwap", "PuzzSwap\PuzzSw EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QURO.AnimationLibrary", "QURO.AnimationLibrary\QURO.AnimationLibrary.csproj", "{69DADC27-FBEB-4625-9212-6EB5BED5102A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnimationGenerator", "AnimationGenerator\AnimationGenerator.csproj", "{B1938BD7-A474-427F-91F1-F8A1875B28CE}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QURO", "QURO\QURO.csproj", "{4581E0C8-B14A-454D-9A7B-52D37535E7E9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpriteMapEditor", "SpriteMapEditor\SpriteMapEditor.csproj", "{2AF6999F-93F0-4096-9BC1-863CEE5E7791}" @@ -29,10 +27,6 @@ Global {69DADC27-FBEB-4625-9212-6EB5BED5102A}.Debug|Any CPU.Build.0 = Debug|Any CPU {69DADC27-FBEB-4625-9212-6EB5BED5102A}.Release|Any CPU.ActiveCfg = Release|Any CPU {69DADC27-FBEB-4625-9212-6EB5BED5102A}.Release|Any CPU.Build.0 = Release|Any CPU - {B1938BD7-A474-427F-91F1-F8A1875B28CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1938BD7-A474-427F-91F1-F8A1875B28CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1938BD7-A474-427F-91F1-F8A1875B28CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B1938BD7-A474-427F-91F1-F8A1875B28CE}.Release|Any CPU.Build.0 = Release|Any CPU {4581E0C8-B14A-454D-9A7B-52D37535E7E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4581E0C8-B14A-454D-9A7B-52D37535E7E9}.Debug|Any CPU.Build.0 = Debug|Any CPU {4581E0C8-B14A-454D-9A7B-52D37535E7E9}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/QURO.AnimationLibrary/Animation.cs b/QURO.AnimationLibrary/Animation.cs index b8a76a3..d4e35d1 100644 --- a/QURO.AnimationLibrary/Animation.cs +++ b/QURO.AnimationLibrary/Animation.cs @@ -11,11 +11,8 @@ namespace QURO.AnimationLibrary public bool IsStillImage => Frames.Length <= 1; - public Animation() + public Animation() : this("unnamed", new Frame[] { new Frame() }, false) { - Name = "unnamed"; - Frames = new Frame[] { new Frame() }; - IsLooping = false; } public Animation(string name, Frame[] frames, bool loop) @@ -24,18 +21,5 @@ namespace QURO.AnimationLibrary Frames = frames; IsLooping = loop; } - - public Animation(string name, Rectangle[] sourceRects, float delay, bool loop) - { - Name = name; - - Frames = new Frame[sourceRects.Length]; - for(int index = 0; index < sourceRects.Length; index++) - { - Frames[index] = new Frame(sourceRects[index], delay); - } - - IsLooping = loop; - } } } diff --git a/QURO.AnimationLibrary/Frame.cs b/QURO.AnimationLibrary/Frame.cs index b6a99ae..c9576c1 100644 --- a/QURO.AnimationLibrary/Frame.cs +++ b/QURO.AnimationLibrary/Frame.cs @@ -3,47 +3,22 @@ using Microsoft.Xna.Framework; namespace QURO.AnimationLibrary { - public class Frame : SpriteMapRegion + public class Frame { + public SpriteMapRegion Sprite { get; set; } public float Delay { get; set; } - public Frame() + public string Name { get { return Sprite.Name; } } + public Rectangle Bounds { get { return Sprite.Bounds; } } + public Vector2 Origin { get { return Sprite.Origin; } } + + public Frame() : this(new SpriteMapRegion(), 0) { - Name = "empty"; - Bounds = Rectangle.Empty; - Origin = Vector2.Zero; - Delay = 0; } public Frame(SpriteMapRegion sprite, float delay) { - Name = sprite.Name; - Bounds = sprite.Bounds; - Origin = sprite.Origin; - Delay = delay; - } - - public Frame(string name, Rectangle bounds, float delay, Vector2 origin) - { - Name = name; - Bounds = bounds; - Origin = origin; - Delay = delay; - } - - public Frame(Rectangle bounds, float delay, Vector2 origin) - { - Name = "unnamed"; - Bounds = bounds; - Origin = origin; - Delay = delay; - } - - public Frame(Rectangle bounds, float delay) - { - Name = "unnamed"; - Bounds = bounds; - Origin = Vector2.Zero; + Sprite = sprite; Delay = delay; } } diff --git a/SpriteMapEditor/Form1.Designer.cs b/SpriteMapEditor/Form1.Designer.cs index 4df4a5a..fecbacb 100644 --- a/SpriteMapEditor/Form1.Designer.cs +++ b/SpriteMapEditor/Form1.Designer.cs @@ -388,13 +388,14 @@ // // loadMapDialog // + this.loadMapDialog.DefaultExt = "smap"; this.loadMapDialog.FileName = "openFileDialog1"; - this.loadMapDialog.Filter = "Xml files|*.xml"; + this.loadMapDialog.Filter = "QUROGame SpriteMap|*.smap"; // // saveMapDialog // - this.saveMapDialog.DefaultExt = "xml"; - this.saveMapDialog.Filter = "Xml files|*.xml"; + this.saveMapDialog.DefaultExt = "smap"; + this.saveMapDialog.Filter = "QUROGame SpriteMap|*.smap"; // // fillButton //