## Properties

Sprite.AnimationCount
Summary: The number of animations this sprite has

Sprite.AnimationDone
Summary: Report whether or not the animation has been completed. When you tell a Sprite to AnimateOnce, this will report "false" until the animation sequence has been finished. At that time, the value will be "True." The tricky bit is that this is a boolean. If you have not told a sprite to animate once, it will always return "false." If a sprite is paused, this returns "false." The only time this returns "true" is when you tell a sprite to animate once, or animate a few times, and those times have completed. At that time, this will report "True". If you have a sprite with only one frame, it may not look like it is "animating", but it is. It is simply animating that one frame over and over. So, AnimationDone reports false, unless you have told it to animate_once.

Sprite.AnimationIndex
Summary: Get or set the animation nimber. It is best to change the animation using ChangeAnimation. It is safer.

Sprite.AutomaticallyMoves
Summary: Determine if the sprite automatically moves (you need to give it a direction [using one of the SetSpriteDirection functions] and speed [MovementSpeed = X] also)

Sprite.BaseImageLocation
Summary: The sprite location as found on the base image. This is usually the easiest location to use.

Sprite.Destroying
Summary: If the Sprite is in the middle of being Destroyed, this is set to true. When a Sprite is Destroyed, it needs to erase itself and do some house-cleaning before it actually vanishes. During this time, you may not want to use it. It is always a good thing to verify a Sprite is not in the middle of being destroyed before you do something important with it. To Destroy a Sprite, use the Sprite.Destroy() function.

Sprite.FrameIndex
Summary: This is the frame of the current animation sequence.

Sprite.GetSize
Summary: Return the size of the sprite in reference to the image on which it is drawn. To get the size of the Sprite in relation to the PictureBox, use GetVisibleSize

Sprite.GetVisibleSize
Summary: Return the relative size of the Sprite in relation to the PictureBox. If the box has been stretched or shrunk, that affects the visible size of the sprite.

Sprite.HasBeenDrawn
Summary: Report whether or not this Sprite has been drawn. If it has, then it needs to be erased at some point in time.

Sprite.ID
Summary: The Sprite ID as specified by the sprite controller.

Sprite.MovingToPoint
Summary: Tells us if we are in the process of doing a MoveTo operation. This boolean should be the opposite of SpriteReachedEndpoint, but that boolean is poorly named. This is usually the easier one to use.

Sprite.Opacity
Summary: Set the opacity of the sprite. The value should be between 0 and 1. 1 is solid, 0 is transparent.

Sprite.PictureBoxLocation
Summary: The sprite location as found on the picture-box that this sprite is associated with. Used when dealing with mouse-clicks

Sprite.Rotation
Summary: Change the rotation of the sprite, using degrees. 0 degrees is to the right. 90 is up. 180 left, 270 down. But, if your sprite was drawn facing up, then rotating it 90 degrees will have it pointing left. The angle goes counter-clockwise. The image will be scaled such that it continues to fit within the rectangle that it was originally in. This results in a little bit of shrinking at times, but you should rarely notice that.

Sprite.SpriteName
Summary: The name of the sprite. Use SetSpriteName(Name) to change this name. Most Named sprites are used to define what a sprite is. Once you have created a named sprite, you usually use SpriteController.DuplicateSprite(Name) to clone the sprite for use.

Sprite.SpriteOriginName
Summary: Return the name of the sprite that this was duplicated from. A duplicated sprite will have no name, but will have a SpriteOriginName.

Sprite.SpriteReachedEndPoint
Summary: This is true unless we are using MoveTo(point) or MoveTo(list of points) to tell the sprite to move from one place to the next. This boolean tells us if it has finished or not.

Sprite.VisibleHeight
Summary: The visible Height as seen in the PictureBox. It may be stretched, or shrunk from the actual image size.

Sprite.VisibleWidth
Summary: The visible width as seen in the PictureBox. The Sprite may be stretched or shrunk from the actual image size.

Sprite.Zvalue
Summary: A number from 0 to 100. Default = 50. Higher numbers print on top of lower numbers. If you want a sprite to always be drawn on top of other sprites, give it a number higher than 50. If you want a sprite to go under other sprites, make its number lower than 50.

SpriteController.BackgroundImage
Summary: The Background Image on which the sprites are drawn. This image ends up having sprite parts on it. The OriginalImage is the version that is clean. Use ReplaceOriginalImage to replace the background Image.

SpriteController.OriginalImage
Summary: The Image from which the background is taken when we erase sprites. The BackgroundImage is the image that contains images of the sprites as well as the background image. Use ReplaceOriginalImage to replace this and the BackgroundImage.

SpriteController.SpriteCount
Summary: The count of all the sprites the controller knows about. This includes named sprites, which may not be visible

## Methods

Constructor: Animation.(SpriteLibrary.SmartImage,System.Drawing.Image,System.Int32,System.Int32,System.Int32)
Summary: Create an image from an image that has a bunch of frames in the one image. Start at (0,0) with the specified height and width. Pull out as many images as we can

Constructor: Animation.(System.Drawing.Point,SpriteLibrary.SmartImage,System.Drawing.Image,System.Int32,System.Int32,System.Int32,System.Int32)
Summary: Create an image from an image that has a bunch of frames in the one image. Start at the specified position (Start), and grab Count items (if we can find them)

Constructor: SmartImage.(SpriteLibrary.SpriteController,System.Drawing.Image,System.Int32,System.Int32,System.Int32)
Summary: Make an animated image from an image that contains multiple frames

SmartImage.AnimationDone(System.Int32,System.Int32,System.Boolean)
Summary: Check to see if the animation is in the last frame. Only works if animateonce is set to true

SmartImage.AnimationFrameCount(System.Int32)
Summary: Return the number of frames that the specified animation has.

SmartImage.NeedsNewImage(System.Int32,System.Int32,System.TimeSpan)
Summary: Return true if the specified animation and frame for that animation needs to be changed due to the time passing.

Constructor: Sprite.(SpriteLibrary.Sprite,System.Boolean)
Summary: Create a Sprite that is based off of the specified sprite. Clone the Sprite except that we set SpriteName = "" and OrigSpriteName = the OldSprite.SpriteName. That way we know that the sprite was duplicated from the original, and we can still distinguish the original from the duplicate.

Constructor: Sprite.(SpriteLibrary.SpriteController,System.Drawing.Image,System.Int32,System.Int32)
Summary: Generate a new sprite. It takes the image and the width and height. If there are multiple images of that width and height in the image, an animation is created.

Constructor: Sprite.(SpriteLibrary.SpriteController,System.Drawing.Image,System.Int32,System.Int32,System.Int32)
Summary: Generate a new sprite. It takes a width, height, and the duration in Milliseconds for each frame

Constructor: Sprite.(System.Drawing.Point,SpriteLibrary.SpriteController,System.Drawing.Image,System.Int32,System.Int32,System.Int32,System.Int32)
Summary: Create a Sprite from an animation image, specifying the number of consecutive frames to grab.

Sprite.ActuallyDraw
Summary: Actually draw the Sprite. Never use this. It is used by the SpriteController

Sprite.AddAnimation(System.Drawing.Image,System.Int32,System.Int32)
Summary: Add another animation to an existing Sprite. After you add animations, you can use ChangeAnimation to select which animation you want the specified sprite to show. For example, you may want to have Animation 0 be a guy walking left, and animation 1 is that same guy walking right. Because we do not specify the number of frames, it starts at the top-left corner and grabs as many frames as it can from the image.

Sprite.AddAnimation(System.Drawing.Image,System.Int32,System.Int32,System.Int32)
Summary: Add another animation to an existing Sprite. After you add animations, you can use ChangeAnimation to select which animation you want the specified sprite to show. For example, you may want to have Animation 0 be a guy walking left, and animation 1 is that same guy walking right. Because we do not specify the number of frames, it starts at the top-left corner and grabs as many frames as it can from the image.

Sprite.AddAnimation(System.Drawing.Point,System.Drawing.Image,System.Int32,System.Int32,System.Int32,System.Int32)
Summary: Add another animation to an existing Sprite. After you add animations, you can use ChangeAnimation to select which animation you want the specified sprite to show. For example, you may want to have Animation 0 be a guy walking left, and animation 1 is that same guy walking right. Because we do not specify the number of frames, it starts at the top-left corner and grabs as many frames as it can from the image.

Sprite.AddAnimation(System.Int32,System.Boolean,System.Boolean)
Summary: Duplicate an animation, except rotated by the specified number of degrees. For example, if you have a single animation (0), and you want to rotate it by 90 degrees, it will create animation 1 with that rotation to it. In the long haul, generating a few rotated animations is less memory intensive than rotating it on demand.

Sprite.AddAnimation(System.Int32,System.Int32)
Summary: Duplicate an animation, except rotated by the specified number of degrees. For example, if you have a single animation (0), and you want to rotate it by 90 degrees, it will create animation 1 with that rotation to it. In the long haul, generating a few rotated animations is less memory intensive than rotating it on demand.

Sprite.AnimateJustAFewTimes(System.Int32,System.Int32)
Summary: Start a new animation. It will complete the animation the number of times you specify. For example, if your sprite is walking, and one animation is one step, specifying 4 here will result in your sprite taking 4 steps and then the animation stops. You will want to make sure you are checking for when the animation stops, using the SpriteAnimationComplete event, checking the Sprite.AnimationDone flag.

Sprite.AnimateOnce(System.Int32)
Summary: Start a new animation, but do it just once. You can use AnimateJustAFewTimes(1) to the same effect. Or, you can use AnimateJustAFewTimes with a different number. The SpriteAnimationComplete event will fire off when the animation completes. The variable, Sprite.AnimationDone will be true once the animation finishes animating.

Sprite.CancelMoveTo
Summary: Cancel a MoveTo command. The sprite will stop moving, and all the waypoints will be removed.

Sprite.ChangeAnimation(System.Int32,System.Int32)
Summary: Start a new animation index from scratch

Sprite.ChangeAnimationSpeed(System.Int32,System.Int32)
Summary: Change the animation speed of a particular animation. This looks at the first frame and compares that frame to the speed specified. It adjusts all the animations by the same percentage.

Sprite.ChangeFrameAnimationSpeed(System.Int32,System.Int32,System.Int32)
Summary: Change the animation speed of a specific frame. Beware. This affects every sprite using this frame

Sprite.CheckSpriteHitsSprite(SpriteLibrary.Sprite,SpriteLibrary.SpriteCollisionMethod)
Summary: Check to see if two sprites hit each-other. The sprite collision methods are not all programmed in.

Sprite.ConvertDegreesToRadians(System.Double)
Summary: Convert a number from degrees to radians.

Sprite.ConvertRadiansToDegrees(System.Double)
Summary: Convert a number from radians to degrees.

Sprite.Destroy
Summary: Tell the sprite to kill itself. It will erase itself and then be removed from the spritelist. Then it will be gone forever.

Sprite.GetAnimationSpeed(System.Int32)
Summary: Return the animation speed of this particualar animation of the sprite.

Sprite.GetFrameAnimationSpeed(System.Int32,System.Int32)
Summary: Get the animation speed of a single frame.

Sprite.GetImage
Summary: return the current image frame. Warning: If you write to this image, it will affect all sprites using this frame.

Sprite.GetImage(System.Int32,System.Int32)
Summary: return the frame for the given index. Warning: If you write to this image, it will affect all sprites using this frame.

Sprite.GetMoveToSpritePoint(SpriteLibrary.Sprite)
Summary: Return the point that this sprite needs to be shooting for, for the center of this sprite to hit the center of the destination sprite.

Sprite.GetSpriteBaseImageCenter
Summary: Return the centerpoint of the sprite, as found on the background image

Sprite.GetSpriteDegrees
Summary: Get the direction that the sprite is traveling in in degrees. You may want to use Math.Round on the results. The value returned is usually just a tiny bit off from what you set it with. For example, if you set the sprite movement direction to be 270 degrees (down), this function may return it as 269.999992. Rounding the number will give it back to you at probably the same direction you set it as.

Sprite.GetSpritePictureboxCenter
Summary: Return the centerpoint of the sprite, as found on the picturebox

Sprite.GetSpriteRadans
Summary: Returns the direction the sprite is currently traveling, using Radians.

Sprite.GetSpriteVector
Summary: Return the current vector that the sprite is moving along

Sprite.HideSprite
Summary: Remove the sprite from the field. This does not destroy the sprite. It simply removes it from action. Use UnhideSprite to show it again.

Sprite.IsPaused(SpriteLibrary.SpritePauseType)
Summary: Ask if the sprite is paused using the specified sprite type (default is PauseAll)

Sprite.MoveTo(SpriteLibrary.Sprite)
Summary: Move to where the destination sprite currently is at. This is a dumb move. It does not take into consideration the movement direction of the destination sprite. So the moving sprite does need to be moving a bit faster than the sprite you are trying to hit for it to do so.

Sprite.MoveTo(System.Collections.Generic.List{System.Drawing.Point})
Summary: Tell the sprite to move towards each point in turn. The sprite will move in a straight line until the first point. From there it moves to the next point, until it has reached the last point. Every time it reaches a point, the SpriteArrivedAtWaypoint event is triggered. When it reaches the final point in the list, the SpriteArrivedAtEndPoint event is triggered. While the sprite is moving, the SpriteReachedEndPoint attribute is set to false. When it has arrived, it is set to true.

Sprite.MoveTo(System.Drawing.Point)
Summary: Tell the Sprite to move towards a destination. You need to give the sprite a MovementSpeed and tell the sprite that it can automatically move. But the sprite will begin a journey towards that point at the MovementSpeed you have set. When it gets to the point, the SpriteArrivedAtEndPoint event will fire off. Also, the SpriteReachedEnd bool will be true.

Sprite.NoteSpriteHitsSprite(SpriteLibrary.Sprite,SpriteLibrary.SpriteCollisionMethod)
Summary: This is used when two sprites hit each-other.

Sprite.Pause(SpriteLibrary.SpritePauseType)
Summary: Pause the sprite. We can pause just the animation (and still let it move), pause movement (and let it animate), or pause everything.

Sprite.PutBaseImageLocation(System.Double,System.Double)
Summary: Put the Sprite at a specified location, using the dimentions of the BackgroundImage. Unless you are using coordinates you have gotten from a mouse-click, this is how you want to place a Sprite somewhere. It is the easiest way to track things. But, if you are doing something using mouse-click coordinates, you want to use PutPictureBoxLocation

Sprite.PutBaseImageLocation(System.Drawing.Point)
Summary: Put the Sprite at a specified location, using the dimentions of the BackgroundImage. Unless you are using coordinates you have gotten from a mouse-click, this is how you want to place a Sprite somewhere. It is the easiest way to track things. But, if you are doing something using mouse-click coordinates, you want to use PutPictureBoxLocation

Sprite.PutPictureBoxLocation(System.Drawing.Point)
Summary: Put the Sprite at a specified location, using the dimentions of the PictureBox. You want to use this if you got your X/Y position from a mouse-click. Otherwise, this is the harder way to track things, particularly if your window can resize. Use PutBaseImageLocation instead.

Sprite.RecalcPictureBoxLocation
Summary: Done when the box resizes. We need to recompute the picturebox location. The resize function automatically calls this. You should never need to do so.

Sprite.ReplaceImage(System.Drawing.Image,System.Int32,System.Int32)
Summary: Replace a sprite image. It will replace the current frame unless you specify both an animation and the frame within the animation you wish to replace. Warning: This replaces the image_frame for every sprite that uses that is based off the same image.

Sprite.ReturnAdjustmentRatio
Summary: Taking into consideration how the sprite is stretched or shrunk, it returns a SpriteAdjustmentRatio that can be used to work with the sprite itself.

Sprite.SendToBack
Summary: Make the sprite go behind all other sprites

Sprite.SendToFront
Summary: Make the sprite show up in front of all other sprites.

Sprite.SetName(System.String)
Summary: Give this sprite a name. This way we can make a duplicate of it by specifying the name

Sprite.SetSize(System.Drawing.Size)
Summary: Resize the sprite using the base image coordinates. The width and height specified are relative to the size of the background image, not the picturebox.

Sprite.SetSpriteDirection(System.Windows.Vector)
Summary: Set the sprite direction using a vector. The vector may contain a speed as well as the movement delta (amount of x shift, and amount of y shift.) If so, this function may also affect the movement speed Most people prefer to use SetSpriteDirectionDegrees instead of using vectors.

Sprite.SetSpriteDirectionDegrees(System.Double)
Summary: Given a "degree" (from 0 to 360, set the direction that the sprite moves automatically. 0 is right, 90 is up, 180 is left and 270 is down.

Sprite.SetSpriteDirectionRadians(System.Double)
Summary: Set the sprite direction using Radians. Most people do not want to use this. Use SetSpriteDirectionDegrees instead unless you like math and know what you are doing with Radians.

Sprite.SetSpriteDirectionToPoint(System.Drawing.Point)
Summary: Sets the Sprite Moving towards a given point. You are responsible to do something with it once it gets there. If you want it to automatically stop upon reaching it, use MoveTo instead. Actually, the MoveTo function works a lot better than this one. Because of integer rounding and a few other things, this function is a little bit imprecise. If you send it towards a point, it will go in that general direction. The MoveTo function will perpetually recalculate its way to the destination point and actually reach that point. SetSpriteDirectionToPoint will sort-of head in the direction of the point. But MoveTo will go to that point.

Sprite.SpriteAdjustedPoint(System.Drawing.Point)
Summary: Because sprites are scaled (shrunk or stretched), this function finds the point within the sprite that is specified by the location. this function is used by a number of internal processes, but may be useful to you. But probably not.

Sprite.SpriteAtImagePoint(System.Drawing.Point,SpriteLibrary.SpriteCollisionMethod)
Summary: Check to see if the sprite exists at the point specified. The point given is in coordinates used by the image (not the PictureBox, use SpriteAtPictureBox for that)

Sprite.SpriteAtPictureBoxPoint(System.Drawing.Point,SpriteLibrary.SpriteCollisionMethod)
Summary: Return true or false, asking if the specifiec sprite is at the point on the picturebox. You can use this with a mouse-click to see if you are clicking on a sprite. Use the SpriteCollisionMethod "transparent" to see if you have clicked on an actual pixel of the sprite instead of just within the sprite rectangle.

Sprite.SpriteCanMoveOnImage(System.Drawing.Point)
Summary: Return true if the sprite can go to this point and still be on the drawing-board.

Sprite.SpriteCanMoveOnPictureBox(System.Drawing.Point)
Summary: Return true if the sprite can go to this point and still be on the drawing-board.

Sprite.SpriteIntersectsRectangle(System.Drawing.Rectangle)
Summary: Check to see if the specified rectangle overlaps with the sprite.

Sprite.Tick
Summary: This is run from the sprite controller every 10 miliseconds. You should never need to call this yourself.

Sprite.UnPause(SpriteLibrary.SpritePauseType)
Summary: unpause the sprite.

Sprite.UnhideSprite
Summary: Make the sprite reappear. If you have not positioned it yet, it will show up at the top corner. It is best to only use this when you have hidden it using HideSprite

Constructor: SpriteController.(System.Windows.Forms.PictureBox)
Summary: Create a sprite controller, specifying the picturebox on which the sprites will be displayed.

Constructor: SpriteController.(System.Windows.Forms.PictureBox,System.EventHandler)
Summary: Create a sprite controller, specifying the picturebox on which the sprites will be displayed.

SpriteController.AddSprite(SpriteLibrary.Sprite)
Summary: Add the specified sprite to the list of sprites we know about. You usually do not need to do this. Sprites add themselves to the controller when you create a new sprite.

SpriteController.AdjustPoint(System.Drawing.Point)
Summary: Adjust an image point so that it conforms to the picturebox.

SpriteController.AdjustRectangle(System.Drawing.Rectangle)
Summary: Adjust a rectangle that is based on the image, according to the stretch of the picturebox

SpriteController.AllSprites
Summary: Return a list of all sprites

SpriteController.ChangeTickInterval(System.Int32)
Summary: Change the Tick Interval. By default, the spritecontroller does a tick every 10ms, which is very short. Some people may prefer it to happen less regularly. Must be > 5, and less than 1001

SpriteController.CountSpritesBasedOff(System.String)
Summary: Count the number of sprites that were duplicated from the sprite with the specified name

SpriteController.DestroyAllSprites
Summary: Remove all sprites (even named sprites that have not yet been displayed)

SpriteController.DestroySprite(SpriteLibrary.Sprite)
Summary: Tell a sprite to destroy itself. The sprite will have Destroying property set to true from the time you destroy it until it vanishes. Whe you destroy a sprite, it will erase itself and remove itself from the controller. After it is destroyed, it is completely gone.

SpriteController.DuplicateSprite(SpriteLibrary.Sprite)
Summary: Make a duplicate of the specified sprite. The duplicate does not yet have a location.

SpriteController.DuplicateSprite(System.String)
Summary: Find a sprite that has been named with the specified name. Then duplicate that sprite

SpriteController.Invalidate(System.Boolean)
Summary: Invalidate the entire image on which the sprites are drawn

SpriteController.Invalidate(System.Drawing.Rectangle,System.Boolean)
Summary: Invalidate a rectangle that is specified in image coordinates

SpriteController.IsKeyPressed
Summary: Check to see if any keys are pressed.

SpriteController.IsKeyPressed(System.Windows.Forms.Keys)
Summary: Check to see if the given key is pressed.

SpriteController.KeysPressed
Summary: Return a list of all the keys that are currently pressed.

SpriteController.Local_Setup
Summary: Define some things and set up some things that need defining at instantiation

SpriteController.MouseClickOnBox(System.Object,System.Windows.Forms.MouseEventArgs)
Summary: This is what happens when someone clicks on the PictureBox. We want to pass any Click events to the Sprite

SpriteController.MouseHover(System.Object,System.EventArgs)
Summary: Check to see if we are hovering over anything

SpriteController.NameSprite(SpriteLibrary.Sprite,System.String)
Summary: Find the specified Sprite in the controller and change its name to the specified string. You can do the same thing with Sprite.SetName(Name)

SpriteController.Pause(SpriteLibrary.SpritePauseType)
Summary: Pause everything

SpriteController.PlaceSpriteBehind(SpriteLibrary.Sprite,SpriteLibrary.Sprite)
Summary: Change the display order of the sprites such that the specified sprite appears behind the other sprite.

SpriteController.PlaceSpriteInFrontOf(SpriteLibrary.Sprite,SpriteLibrary.Sprite)
Summary: Make the sprite go in front of the specified sprite.

SpriteController.PlayAsync(System.IO.Stream,System.String,System.EventHandler)
Summary: Play a sound bit in a separate thread. When the thread is done, set a bool saying that

SpriteController.ProcessImageResize(System.Object,System.EventArgs)
Summary: Process a form resize by recalculating all the picturebox locations for all sprites.

SpriteController.RegisterKeyDownFunction(SpriteLibrary.SpriteKeyEventHandler)
Summary: If you want to have a KeyDown function that is triggered by a keypress function, add the event here. The event should have the parameters (object sender, KeyEventArgs e)

SpriteController.RegisterKeyUpFunction(SpriteLibrary.SpriteKeyEventHandler)
Summary: If you want to have a KeyUp function that is triggered by a keypress function, add the event here. The event should have the parameters (object sender, KeyEventArgs e)

SpriteController.ReplaceOriginalImage
Summary: Notify the sprite controller that you have changed the background image on the PictureBox. Whatever background is on the picturebox is now used to draw all the sprites on.

SpriteController.ReplaceOriginalImage(System.Drawing.Image)
Summary: Replace the image on which the sprites are drawn. Use this when you move to a new playing field, or want to have a different background

SpriteController.ResetKeypressState
Summary: Reset the keypress status. Sometimes the sprite controller misses a key being released (usually because a window has taken priority, or something has changed). Calling this function will reset the stored memory of whether a key has been pressed.

SpriteController.ReturnAdjustmentRatio
Summary: Return an adjustment ratio. This is the image-size to picture-box ratio. It is used for calculating precise pixels or picture-box locations.

SpriteController.ReturnPictureBoxAdjustedHeight(System.Int32)
Summary: Return the height of an object in picture-box terms. It is basically the virtual height of the sprite or other item.

SpriteController.ReturnPictureBoxAdjustedPoint(System.Drawing.Point)
Summary: This does the reverse of an adjusted point. It takes a point on the image and transforms it to one on the PictureBox

SpriteController.ReturnPictureBoxAdjustedWidth(System.Int32)
Summary: Return the width of an object in picture-box terms. It takes the width of a sprite or other item that is being displayed on the screen, and calculates the width as displayed in the picture-box (taking into consideration stretching or shrinking)

SpriteController.ReturnPointAdjustedForImage(System.Drawing.Point)
Summary: This takes a point, the location on a picturebox, and returns the corresponding point on the BackgroundImage.

SpriteController.SoundIsFinished(System.String)
Summary: Check to see if the specified sound has finished playing

SpriteController.SoundPlay(System.IO.Stream,System.String)
Summary: Play a sound that we can check to see if it has completed.

SpriteController.SpriteBackwards(SpriteLibrary.Sprite)
Summary: Change the display order of the specified sprite so it is more likely to go behind all other sprites.

SpriteController.SpriteForwards(SpriteLibrary.Sprite)
Summary: Change the display order of the specified sprite so it is more likely to go in front of other sprites

SpriteController.SpriteFromName(System.String)
Summary: Find a sprite that has a specified name. This returns the actual sprite with that name. You usually want to use DuplicateSprite(Name) to clone the sprite and get one you can destroy. If you destroy a named sprite without duplicating it, you may end up losing it for the remainder of the program.

SpriteController.SpriteToBack(SpriteLibrary.Sprite)
Summary: Change the display order of the specified sprite so it goes behind all other sprites.

SpriteController.SpriteToFront(SpriteLibrary.Sprite)
Summary: Change the display order of the specified sprite so it goes in front of all other sprites.

SpriteController.SpritesAtImagePoint(System.Drawing.Point)
Summary: This takes a point, as as specified on the image, and returns the sprites at that point.

SpriteController.SpritesAtPoint(System.Drawing.Point)
Summary: This takes a point, as given by the mouse-click args, and returns the sprites at that point.

SpriteController.SpritesBasedOff(System.String)
Summary: Return all sprites that were based off a particular sprite name

SpriteController.SpritesBasedOffAnything
Summary: Return a list of all sprites which are not master sprites (have been based off something)

SpriteController.SpritesInImageRectangle(System.Drawing.Rectangle)
Summary: Return a list of all the sprites that intersect with the given background-image-based rectangle

SpriteController.SpritesThatHaveBeenDrawn
Summary: Return a list of all sprites which have been drawn on the image

SpriteController.TimerTick(System.Object,System.EventArgs)
Summary: The function called by the timer every 10 millisecods We also call do_tick, which is the function defined by the user.

SpriteController.UnPause(SpriteLibrary.SpritePauseType)
Summary: un-Pause everything

## Events

Sprite.CheckBeforeMove
Summary: This event fires off before a sprite is drawn. Use it if you have constraints. You can change the location or cancel the move entirely.

Sprite.Click
Summary: This event happens when someone clicks on the sprite (on the rectangle in which the sprite is). If you want the event to fire off only when someone clicks on the visible part of the sprite, use ClickTransparent instead.

Sprite.ClickTransparent
Summary: This event happens when someone clicks on the sprite (on the sprite image itself). If the sprite is sometimes hidden, but you want the click to work even if it is not visible at that instant, use Click instead.

Sprite.MouseEnter
Summary: When the mouse moves over the sprite. Use this for a menu, when you want the menu item to glow when the mouse is over the menu item sprite.

Sprite.MouseHover
Summary: This event happens when the mouse moves over the sprite, and then pauses. We use the hover timing from the parent form.

Sprite.MouseLeave
Summary: When the mouse moves off the sprite. Use this for a menu, when you want the menu item to stop glowing when the mouse moves away from the menu item sprite.

Sprite.SpriteAnimationComplete
Summary: Only used when you tell an animation to animate once. At the end of the animation, this function fires off.

Sprite.SpriteArrivedAtEndPoint
Summary: An event for when you tell a Sprite to MoveTo(Point) a specific point, or, when you tell the Sprite to MoveTo(list of points). When the Sprite has reached the final destination, the Sprite fires off this event.

Sprite.SpriteArrivedAtWaypoint
Summary: When you tell a sprite to MoveTo(list of points), this fires off every time it gets to one of the points. When it gets to the final point, only the SpriteAtEndPoint event fires off.

Sprite.SpriteBeingDestroyed
Summary: The Sprite has just been told to be destroyed. You might want to do some cleanup. If you need to destroy some payload data, or tell something to cleanup after the sprite this is where to do that.

Sprite.SpriteChangesAnimationFrames
Summary: When the frame of an animation changes. If you want to have something happen every time the foot of your monster comes down, when the swing of your sword is at certain points, etc. Check to see that the Animaton and FrameIndex are what you expect them to be.

Sprite.SpriteExitsPictureBox
Summary: This happens when the sprite has exited the picture box. Useful when you want to keep sprites from traveling on forever after exiting.

Sprite.SpriteHitsPictureBox
Summary: This happens when the sprite hits the border of the picture-box. Useful for when you want to have shots explode when they hit the side.

Sprite.SpriteHitsSprite
Summary: This happens when two sprites hit each-other. The SpriteEventArgs that is returned contains the sprite that this sprite hits.

Sprite.SpriteInitializes
Summary: This event happens right after the sprite is created. Use this to immediately set a sprite to animate once or something like that.

SpriteController.DoTick
Summary: Define a stub for an event handler that the programmer can define if they want to run something on the tick, along with the sprite animations.

## Functions

Sprite.CannotMoveOutsideBox
Summary: Determine if the sprite will automatically move outside the box. If not, it will hit the side of the box and stick

Sprite.MirrorHorizontally
Summary: Flip the image when it gets printed. If your sprite is walking left, flipping it will make it look like it is going right.

Sprite.MirrorVertically
Summary: Flip the image when it gets printed. If your sprite looks like it is facing up, doing this will make it look like it faces down.

Sprite.MovementSpeed
Summary: The movement speed of the sprite. To make a Sprite move, you need to set the MovementSpeed, the direction (using SetSpriteDirection), and the AutomaticallyMoves property.

Sprite.MovingToSprite
Summary: If we are trying to collide with a sprite, we store that sprite here.

Sprite.payload
Summary: A Sprite can hold a payload. Use this to store extra information about the various Sprites. Health, Armor, Shoot time, etc. But, to store information in the payload, you need to make a new class of SpritePayload. The syntax for doing so is: public class TankPayload : SpritePayload { public int Armor; public int Speed; } You can access the payload and retrieve the various values.

SpriteAdjustmentRatio.height_ratio
Summary: Divide a picturebox ratio by this to get the image location. Multiply an image location by this to get the picturebox location.

SpriteAdjustmentRatio.width_ratio
Summary: Divide a picturebox ratio by this to get the image location. Multiply an image location by this to get the picturebox location.

SpriteCollisionMethod.circle
Summary: Draws a circle (ellipse) inside the sprite rectangles and see if those ellipses overlap

SpriteCollisionMethod.rectangle
Summary: Checks if the two rectangles that contain the sprites overlap

SpriteCollisionMethod.transparency
Summary: Check to see if nontransparent portions of a sprite collide. Not working.

SpriteController.InvalidateList
Summary: This is only used by the SpriteController. It allows us to queue up invalidation requests.

SpriteController.OptimizeForLargeSpriteImages
Summary: 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 image at that size. If you use the same sprite, but with different sizes, setting this to "True" may actually slow down the game instead of speeding it up.

SpriteController.RandomNumberGenerator
Summary: Since everything needs a random number generator, we make one that should be accessible throughout your program.

SpriteController.SpriteComparisonDelegate
Summary: Allow the sprite sort-method to be overridden. The default sprite sort method is: SpriteComparisonDelegate = delegate (Sprite first, Sprite second) { return first.Zvalue.CompareTo(second.Zvalue); }; Which compares just the Zvalues of the two sprites. Often you will want to have a more refined sort. The sort order determines which sprites appear on top of other sprites. In the default state, if two sprites have the same Zvalue, it is very uncleaer which one will draw on top of the other one. By overridding this sort function, you can specify a very precise order of which sprite is on top and which is behind.

SpriteEventArgs.Cancel
Summary: Used primarily in the CheckBeforeMove event. If you set cancel to true, then the move fails. You can use this to keep a Sprite from going places where it ought not to go.

SpriteEventArgs.CollisionMethod
Summary: The CollisionMethod used in the event. Currently, only rectangle collisions are used

SpriteEventArgs.NewLocation
Summary: For the CheckBeforeMove event, newlocation will be the location the sprite is trying to move to. You can adjust the point (move it left, right, up, down) and it will affect the placement of the sprite.

SpriteEventArgs.TargetSprite
Summary: If another Sprite is involved in the event (Collision), than that Sprite is included here. It will be null if no other Sprite is involved.

SpritePauseType.PauseAll
Summary: All pausable things are paused.

SpritePauseType.PauseAnimation
Summary: Pause the animating. Animation resumes from the current frame when we unpause

SpritePauseType.PauseEvents
Summary: Pause events. Sprite collisions, movement checks, etc are stopped until the unpause

SpritePauseType.PauseMovement
Summary: Pause any automatic movement. Movement resumes where it was left off if you unpause