Add the SpriteDatabase to a spritecontroller

This commit is contained in:
Tim Young 2017-09-21 06:46:31 -05:00
parent b01341439b
commit 743ab78c28
7 changed files with 93 additions and 4 deletions

View File

@ -61,15 +61,23 @@ namespace SpriteLibrary.Properties {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}} /// Looks up a localized string similar to {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}
///{\colortbl ;\red0\green0\blue255;} ///{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f40\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\ [rest of string was truncated]&quot;;.
///{\*\generator Riched20 10.0.10586}\viewkind4\uc1
///\pard\sa200\sl276\slmult1\f0\fs22\lang9 This is the Running Demo, which was created to test out the SpriteController: {{\field{\*\fldinst{HYPERLINK http://www.codeproject.com/Articles/1085446/Using-Sprites-Inside-Windows-Forms }}{\fldrslt{http://www.codeproject.com/Articles/1085446/Using-Sprites-Inside-Windows-Forms\ul0\cf0}}}}\f0 [rest of string was truncated]&quot;;.
/// </summary> /// </summary>
internal static string ChangeLog { internal static string ChangeLog {
get { get {
return ResourceManager.GetString("ChangeLog", resourceCulture); return ResourceManager.GetString("ChangeLog", resourceCulture);
} }
} }
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon SLIcon {
get {
object obj = ResourceManager.GetObject("SLIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
} }
} }

View File

@ -121,4 +121,7 @@
<data name="ChangeLog" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="ChangeLog" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ChangeLog.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value> <value>..\Resources\ChangeLog.rtf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data> </data>
<data name="SLIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SLIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root> </root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -146,6 +146,12 @@ namespace SpriteLibrary
private SpriteAdjustmentRatio _AdjustmentRatio; private SpriteAdjustmentRatio _AdjustmentRatio;
/// <summary>
/// The Sprite Database has tools to load and save sprite definitions, as well as a tool to help
/// developers create sprite definitions.
/// </summary>
private SpriteDatabase myDatabase = null;
/// <summary> /// <summary>
/// If your sprite images need substantial growing or shrinking when displayed, you can try setting this to "true" /// If your sprite images need substantial growing or shrinking when displayed, you can try setting this to "true"
/// to see if it makes it run any faster. What it does is to resize the image once, and keep a cached copy of that /// to see if it makes it run any faster. What it does is to resize the image once, and keep a cached copy of that
@ -183,6 +189,39 @@ namespace SpriteLibrary
Local_Setup(); Local_Setup();
} }
/// <summary>
/// Create a sprite controller, specifying the picturebox on which the sprites
/// will be displayed. You want to have the PictureBox already defined, and a background image
/// already set for the PictureBox. This constructor also uses a <see cref="SpriteDatabase"/>, which
/// loads sprite definitions at construction time, and has tools for making and storing sprites.
/// </summary>
/// <example>
/// This is an example of a Form class that defines a SpriteController. The MainDrawingArea is a
/// <see cref="System.Windows.Forms.PictureBox">PictureBox.</see>
/// <code lang="C#">
/// public partial class ShootingFieldForm : Form
/// {
/// public ShootingFieldForm()
/// {
/// InitializeComponent();
/// MainDrawingArea.BackgroundImage = Properties.Resources.Background;
/// MainDrawingArea.BackgroundImageLayout = ImageLayout.Stretch;
/// MySpriteDatabase = new SpriteDatabase(Properties.Resources.ResourceManager, "MySpriteDefinitions");
/// MySpriteController = new SpriteController(MainDrawingArea, MySpriteDatabase);
/// }
/// }
/// </code>
/// </example>
/// <param name="Area">The <see cref="System.Windows.Forms.PictureBox">PictureBox.</see>
/// that the sprites will be drawn in</param>
/// <param name="DatabaseToUse">A <see cref="SpriteLibrary.SpriteDatabase">SpriteDatabase</see> to use</param>
public SpriteController(PictureBox Area, SpriteDatabase DatabaseToUse)
{
myDatabase = DatabaseToUse;
DrawingArea = Area;
Local_Setup();
}
/// <summary> /// <summary>
/// Create a sprite controller, specifying the picturebox on which the sprites /// Create a sprite controller, specifying the picturebox on which the sprites
/// will be displayed. /// will be displayed.
@ -980,6 +1019,11 @@ namespace SpriteLibrary
return Found; return Found;
} }
} }
//If we are here, we have not yet found a sprite. Now we can check our database and see if we have one defined
if(myDatabase != null)
{
return myDatabase.SmartDuplicateSprite(this, Name, true);
}
return null; return null;
} }

View File

@ -36,6 +36,7 @@ namespace SpriteLibrary
ResourceManager myResourceManager = null; ResourceManager myResourceManager = null;
string Filename = ""; string Filename = "";
Size SnapGridSize = new Size(5, 5); Size SnapGridSize = new Size(5, 5);
System.Drawing.Icon LibIcon = null;
/// <summary> /// <summary>
/// The sprite database instantiation function. The filename can either be a file on the computer or it /// The sprite database instantiation function. The filename can either be a file on the computer or it
@ -86,6 +87,15 @@ namespace SpriteLibrary
} }
} }
/// <summary>
/// Change the Icon for the SpriteEntryForm
/// </summary>
/// <param name="toSet">An icon image</param>
public void SetIcon(System.Drawing.Icon toSet)
{
LibIcon = toSet;
}
/// <summary> /// <summary>
/// The SnapGrid is the block-size that your sprite will be. For example, I will often have sprites with /// The SnapGrid is the block-size that your sprite will be. For example, I will often have sprites with
/// a snapgrid of 50,50. This means that the sprite can be 50x50, 100x50, or anything with a step-size /// a snapgrid of 50,50. This means that the sprite can be 50x50, 100x50, or anything with a step-size
@ -155,11 +165,25 @@ namespace SpriteLibrary
{ {
SpriteEntryForm SEF = new SpriteEntryForm(this, SpriteInfoList, SnapGridSize); SpriteEntryForm SEF = new SpriteEntryForm(this, SpriteInfoList, SnapGridSize);
SEF.SetInitialSprite(FirstItemIndex); SEF.SetInitialSprite(FirstItemIndex);
if (LibIcon != null) SEF.SetIcon(LibIcon);
SEF.ShowDialog(); SEF.ShowDialog();
//Use the updated list returned from the form. //Use the updated list returned from the form.
SpriteInfoList.Clear(); SpriteInfoList.Clear();
SpriteInfoList.AddRange(SEF.GetUpdatedList()); SpriteInfoList.AddRange(SEF.GetUpdatedList());
} }
/// <summary>
/// Generate a new, named sprite from a sprite template stored in the database. Most of the time you do
/// not want to use this yourself. SpriteControllers that are defined with a database will automatically
/// look up sprite templates that they do not have sprites for. This function is just a wrapper for SmartDuplicateSprite.
/// </summary>
/// <param name="Name">The name of the sprite to load. Names are case-sensitive.</param>
/// <param name="ControllerToUse">The sprite controller that will store the sprite in its cache</param>
/// <returns>A new, named sprite, or null if no such template is found.</returns>
public Sprite SpriteFromName(string Name, SpriteController ControllerToUse)
{
return SmartDuplicateSprite(ControllerToUse, Name, true);
}
#endregion #endregion
#region General Functions #region General Functions

View File

@ -87,6 +87,8 @@ namespace SpriteLibrary
myToolTip.SetToolTip(btnNewSprite, "Create a new sprite."); myToolTip.SetToolTip(btnNewSprite, "Create a new sprite.");
myToolTip.SetToolTip(btnDeleteAnim, "Delete the current animation you are looking at."); myToolTip.SetToolTip(btnDeleteAnim, "Delete the current animation you are looking at.");
myToolTip.SetToolTip(btnDelSprite, "Delete the current sprite you are looking at."); myToolTip.SetToolTip(btnDelSprite, "Delete the current sprite you are looking at.");
Icon = Properties.Resources.SLIcon;
} }
internal List<SpriteInfo> GetUpdatedList() internal List<SpriteInfo> GetUpdatedList()
@ -94,6 +96,11 @@ namespace SpriteLibrary
return SpriteInformation; return SpriteInformation;
} }
internal void SetIcon(Icon IconImage)
{
Icon = IconImage;
}
private void PopulateMenu() private void PopulateMenu()
{ {
ResourceManager rm = myResources; ResourceManager rm = myResources;

View File

@ -85,6 +85,9 @@
<ItemGroup> <ItemGroup>
<None Include="Resources\ChangeLog.rtf" /> <None Include="Resources\ChangeLog.rtf" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="Resources\SLIcon.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.