@@ -8,7 +8,7 @@ import aseprite.Aseprite;
8
8
9
9
class Parser
10
10
{
11
- public static function parse <Texture >(bytes : Bytes ) : Aseprite <Texture >
11
+ public static function parse <Texture >(bytes : Bytes , createTexture : Bytes -> Int -> Int -> ColorDepth -> Texture ) : Aseprite <Texture >
12
12
{
13
13
var reader = new Reader (bytes );
14
14
@@ -33,12 +33,12 @@ class Parser
33
33
34
34
var sprite = new Aseprite (width , height , colorDepth , transparentColor , numberOfColors , pixelWidth , pixelHeight , hasValidOpacity );
35
35
for (i in 0 ... frames ) {
36
- sprite .frames .push (readFrame (sprite , reader ));
36
+ sprite .frames .push (readFrame (sprite , reader , createTexture ));
37
37
}
38
38
return sprite ;
39
39
}
40
40
41
- static function readFrame <Texture >(sprite : Aseprite <Texture >, reader : Reader ) : Frame <Texture >
41
+ static function readFrame <Texture >(sprite : Aseprite <Texture >, reader : Reader , createTexture : Bytes -> Int -> Int -> ColorDepth -> Texture ) : Frame <Texture >
42
42
{
43
43
var bytesLength : Int = reader .getDWord ();
44
44
var magicNumber : Int = reader .getWord ();
@@ -52,19 +52,19 @@ class Parser
52
52
var frame = new Frame (frameDuration / 1000 );
53
53
54
54
for (i in 0 ... length ) {
55
- getChunk (sprite , frame , reader );
55
+ getChunk (sprite , frame , reader , createTexture );
56
56
}
57
57
58
58
return frame ;
59
59
}
60
60
61
- static function getChunk <Texture >(sprite : Aseprite <Texture >, frame : Frame <Texture >, reader : Reader ) : Void
61
+ static function getChunk <Texture >(sprite : Aseprite <Texture >, frame : Frame <Texture >, reader : Reader , createTexture : Bytes -> Int -> Int -> ColorDepth -> Texture ) : Void
62
62
{
63
63
var chunkSize = reader .getDWord ();
64
64
var chunkType : ChunkType = reader .getWord ();
65
65
switch chunkType {
66
66
case CEL_CHUNK :
67
- frame .cels .push (readCel (reader ));
67
+ frame .cels .push (readCel (sprite , reader , createTexture ));
68
68
69
69
case CEL_EXTRA_CHUNK :
70
70
assert (false , " CEL_EXTRA_CHUNK" );
@@ -171,7 +171,7 @@ class Parser
171
171
return {type :type , childLevel :childLevel , blendMode :blendMode , opacity :opacity , name :name , visible : visible };
172
172
}
173
173
174
- static function readCel <Texture >(reader : Reader ) : Cel <Texture >
174
+ static function readCel <Texture >(sprite : Aseprite < Texture >, reader : Reader , createTexture : Bytes -> Int -> Int -> ColorDepth -> Texture ) : Cel <Texture >
175
175
{
176
176
var layerIndex : Int = reader .getWord ();
177
177
var x : Int = reader .getShort ();
@@ -194,7 +194,7 @@ class Parser
194
194
var width = reader .getWord ();
195
195
var height = reader .getWord ();
196
196
var data = InflateImpl .run (reader .input , width * height );
197
- IMAGE_DATA (width , height , data );
197
+ IMAGE_DATA (width , height , createTexture ( data , width , height , sprite . colorDepth ) );
198
198
}
199
199
}
200
200
return {layerIndex :layerIndex , x :x , y :y , opacityLevel :opacityLevel , data :celData };
0 commit comments