From 84e15883fde16c1e12db7c6c0a49e44813f60693 Mon Sep 17 00:00:00 2001 From: Tim Young <tim.young@lightsys.org> Date: Sat, 16 Sep 2017 08:03:58 -0500 Subject: [PATCH] SpriteDatabase creates sprites --- SpriteLibrary/SpriteDatabase.cs | 13 +-- SpriteLibrary/SpriteEntryForm.Designer.cs | 4 +- SpriteLibrary/SpriteEntryForm.resx | 120 ++++++++++++++++++++++ SpriteLibrary/SpriteInfo.cs | 48 +++++++++ SpriteLibrary/SpriteLibrary.csproj | 3 + 5 files changed, 175 insertions(+), 13 deletions(-) create mode 100644 SpriteLibrary/SpriteEntryForm.resx diff --git a/SpriteLibrary/SpriteDatabase.cs b/SpriteLibrary/SpriteDatabase.cs index ba93380..90b0bc3 100644 --- a/SpriteLibrary/SpriteDatabase.cs +++ b/SpriteLibrary/SpriteDatabase.cs @@ -140,18 +140,7 @@ namespace SpriteLibrary { if (SI.SpriteName == SpriteName) { - //This is the sprite. Pull out the image resource. then pull out the sprite. - ResourceManager rm = myResourceManager; - Image myImage = (Bitmap)rm.GetObject(SI.ImageName); - if (myImage == null) return null; //break out if we do not have the image defined for this - DestSprite = new Sprite(SI.StartPoint, theController, myImage, SI.Width, SI.Height, SI.AnimSpeed, SI.NumAnimations); - int sizepercent = SI.ViewPercent; - if (sizepercent < 5) sizepercent = 100; - if (sizepercent > 300) sizepercent = 100; - double delta = (double)sizepercent / 100.0; //turn it into a double, and into something we can multiply. - DestSprite.SetSize(new Size((int)(DestSprite.GetSize.Width * delta), (int)(DestSprite.GetSize.Height * delta))); - DestSprite.SetName(SpriteName); - //We have created a new sprite. Now, return a duplicate of that sprite. + SI.CreateSprite(theController, this); return theController.DuplicateSprite(SpriteName); } } diff --git a/SpriteLibrary/SpriteEntryForm.Designer.cs b/SpriteLibrary/SpriteEntryForm.Designer.cs index ff299c1..0759e7d 100644 --- a/SpriteLibrary/SpriteEntryForm.Designer.cs +++ b/SpriteLibrary/SpriteEntryForm.Designer.cs @@ -52,8 +52,9 @@ // // pbImageField // - this.pbImageField.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.pbImageField.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); + this.pbImageField.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.pbImageField.Location = new System.Drawing.Point(5, 10); this.pbImageField.Name = "pbImageField"; this.pbImageField.Size = new System.Drawing.Size(213, 253); @@ -130,6 +131,7 @@ // // btnCancel // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Location = new System.Drawing.Point(353, 259); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(75, 23); diff --git a/SpriteLibrary/SpriteEntryForm.resx b/SpriteLibrary/SpriteEntryForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SpriteLibrary/SpriteEntryForm.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/SpriteLibrary/SpriteInfo.cs b/SpriteLibrary/SpriteInfo.cs index 89550b8..eea3962 100644 --- a/SpriteLibrary/SpriteInfo.cs +++ b/SpriteLibrary/SpriteInfo.cs @@ -4,11 +4,19 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; +using System.Resources; + namespace SpriteLibrary { + internal enum AnimationType { SpriteDefinition=0, Rotation=1, Mirror=2 } internal class AnimationInfo { + public AnimationType FieldsToUse = AnimationType.SpriteDefinition; + public int AnimationToUse = 0; + public int RotationDegrees=0; + public bool MirrorHorizontally = false; + public bool MirrorVertically = false; public Point StartPoint = new Point(-1, -1); public string ImageName = ""; public int Width = -1; @@ -41,5 +49,45 @@ namespace SpriteLibrary { return SpriteDatabase.CloneByXMLSerializing<SpriteInfo>(this); } + + public Sprite CreateSprite(SpriteController ControllerToUse, SpriteDatabase TheDatabaseToUse) + { + Sprite DestSprite = null; + for (int index = 0; index < Animations.Count; index++) + { + AnimationInfo CurrentAnimation = Animations[index]; + Image myImage = TheDatabaseToUse.GetImageFromName(CurrentAnimation.ImageName, true); + if (myImage == null) return null; //break out if we do not have the image defined for this + AnimationType AT = CurrentAnimation.FieldsToUse; + if (index == 0) AT = AnimationType.SpriteDefinition; //the first one MUST be this. + switch(AT) + { + case AnimationType.SpriteDefinition: + if(DestSprite == null)//Creating the sprite from scratch + { + DestSprite = new Sprite(CurrentAnimation.StartPoint, ControllerToUse, myImage, CurrentAnimation.Width, CurrentAnimation.Height, CurrentAnimation.AnimSpeed, CurrentAnimation.NumFrames); + } + else + { + DestSprite.AddAnimation(CurrentAnimation.StartPoint, myImage, CurrentAnimation.Width, CurrentAnimation.Height, CurrentAnimation.AnimSpeed, CurrentAnimation.NumFrames); + } + break; + case AnimationType.Rotation: + DestSprite.AddAnimation(CurrentAnimation.AnimationToUse, CurrentAnimation.RotationDegrees); + break; + case AnimationType.Mirror: + DestSprite.AddAnimation(CurrentAnimation.AnimationToUse, CurrentAnimation.MirrorHorizontally,CurrentAnimation.MirrorVertically); + break; + } + } + int sizepercent = ViewPercent; + if (sizepercent < 5) sizepercent = 100; + if (sizepercent > 300) sizepercent = 100; + double delta = (double)sizepercent / 100.0; //turn it into a double, and into something we can multiply. + DestSprite.SetSize(new Size((int)(DestSprite.GetSize.Width * delta), (int)(DestSprite.GetSize.Height * delta))); + DestSprite.SetName(SpriteName); + //We have created a new sprite. Now, return a duplicate of that sprite. + return DestSprite; + } } } diff --git a/SpriteLibrary/SpriteLibrary.csproj b/SpriteLibrary/SpriteLibrary.csproj index a3eb328..eda7b56 100644 --- a/SpriteLibrary/SpriteLibrary.csproj +++ b/SpriteLibrary/SpriteLibrary.csproj @@ -78,6 +78,9 @@ <LastGenOutput>Resources.Designer.cs</LastGenOutput> <SubType>Designer</SubType> </EmbeddedResource> + <EmbeddedResource Include="SpriteEntryForm.resx"> + <DependentUpon>SpriteEntryForm.cs</DependentUpon> + </EmbeddedResource> </ItemGroup> <ItemGroup> <None Include="Resources\ChangeLog.rtf" />