-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSpriteSheetReader.cs
51 lines (43 loc) · 1.87 KB
/
SpriteSheetReader.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
namespace Monogame.SpriteBox
{
/// <summary>
/// Defines behavior for deserializing XNB data into a <see cref="SpriteSheet"/>.
/// </summary>
public class SpriteSheetReader : ContentTypeReader<SpriteSheet>
{
/// <summary>
/// Deserializes XNB content into a sprite sheet instance.
/// </summary>
/// <param name="reader">Entity to use when reading raw data.</param>
/// <param name="existingInstance">Existing sprite sheet instance.</param>
/// <returns>Sprite sheet initialized with XNB data.</returns>
protected override SpriteSheet Read( ContentReader reader, SpriteSheet existingInstance )
{
if ( reader == null )
{
throw new ArgumentNullException( nameof( reader ) );
}
SpriteSheet spriteSheet = existingInstance == null ? new SpriteSheet() : existingInstance;
spriteSheet.Name = reader.ReadString();
int count = reader.ReadInt32();
for ( int i = 0; i < count; i++ )
{
string spriteName = reader.ReadString();
int spriteIndex = reader.ReadInt32();
int x = reader.ReadInt32();
int y = reader.ReadInt32();
int width = reader.ReadInt32();
int height = reader.ReadInt32();
spriteSheet.SpriteNamesToIndexMapping.Add( spriteName, spriteIndex );
spriteSheet.SpriteRectangles.Add( new Rectangle( x, y, width, height ) );
spriteSheet.Sprites.Add( spriteName, new Sprite( spriteName, spriteSheet ) );
}
spriteSheet.Texture = reader.ReadExternalReference<Texture2D>();
return spriteSheet;
}
}
}