| OLD | NEW |
| (Empty) |
| 1 part of sprites; | |
| 2 | |
| 3 /// A sprite sheet packs a number of smaller images into a single large image. | |
| 4 /// | |
| 5 /// The placement of the smaller images are defined by a json file. The larger i
mage and json file is typically created | |
| 6 /// by a tool such as TexturePacker. The [SpriteSheet] class will take a referen
ce to a larger image and a json string. | |
| 7 /// From the image and the string the [SpriteSheet] creates a number of [Texture
] objects. The names of the frames in | |
| 8 /// the sprite sheet definition are used to reference the different textures. | |
| 9 class SpriteSheet { | |
| 10 | |
| 11 Image _image; | |
| 12 Map<String, Texture> _textures = new Map(); | |
| 13 | |
| 14 /// Creates a new sprite sheet from an [_image] and a sprite sheet [jsonDefini
tion]. | |
| 15 /// | |
| 16 /// var mySpriteSheet = new SpriteSheet(myImage, jsonString); | |
| 17 SpriteSheet(this._image, String jsonDefinition) { | |
| 18 assert(_image != null); | |
| 19 assert(jsonDefinition != null); | |
| 20 | |
| 21 JsonDecoder decoder = new JsonDecoder(); | |
| 22 Map file = decoder.convert(jsonDefinition); | |
| 23 assert(file != null); | |
| 24 | |
| 25 List frames = file["frames"]; | |
| 26 | |
| 27 for (Map frameInfo in frames) { | |
| 28 String fileName = frameInfo["filename"]; | |
| 29 Rect frame = _readJsonRect(frameInfo["frame"]); | |
| 30 bool rotated = frameInfo["rotated"]; | |
| 31 bool trimmed = frameInfo["trimmed"]; | |
| 32 Rect spriteSourceSize = _readJsonRect(frameInfo["spriteSourceSize"]); | |
| 33 Size sourceSize = _readJsonSize(frameInfo["sourceSize"]); | |
| 34 Point pivot = _readJsonPoint(frameInfo["pivot"]); | |
| 35 | |
| 36 var texture = new Texture._fromSpriteFrame(_image, fileName, sourceSize, r
otated, trimmed, frame, | |
| 37 spriteSourceSize, pivot); | |
| 38 _textures[fileName] = texture; | |
| 39 } | |
| 40 } | |
| 41 | |
| 42 Rect _readJsonRect(Map data) { | |
| 43 num x = data["x"]; | |
| 44 num y = data["y"]; | |
| 45 num w = data["w"]; | |
| 46 num h = data["h"]; | |
| 47 | |
| 48 return new Rect.fromLTRB(x.toDouble(), y.toDouble(), (x + w).toDouble(), (y
+ h).toDouble()); | |
| 49 } | |
| 50 | |
| 51 Size _readJsonSize(Map data) { | |
| 52 num w = data["w"]; | |
| 53 num h = data["h"]; | |
| 54 | |
| 55 return new Size(w.toDouble(), h.toDouble()); | |
| 56 } | |
| 57 | |
| 58 Point _readJsonPoint(Map data) { | |
| 59 num x = data["x"]; | |
| 60 num y = data["y"]; | |
| 61 | |
| 62 return new Point(x.toDouble(), y.toDouble()); | |
| 63 } | |
| 64 | |
| 65 /// The image used by the sprite sheet. | |
| 66 /// | |
| 67 /// var spriteSheetImage = mySpriteSheet.image; | |
| 68 Image get image => _image; | |
| 69 | |
| 70 /// Returns a texture by its name. | |
| 71 /// | |
| 72 /// var myTexture = mySpriteSheet["example.png"]; | |
| 73 Texture operator [](String fileName) => _textures[fileName]; | |
| 74 } | |
| OLD | NEW |