44 * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License }
55 */
66
7+ var TransformMatrix = require ( '../../../gameobjects/components/TransformMatrix' ) ;
8+
9+ var _tempCameraMatrix = new TransformMatrix ( ) ;
10+ var _tempSpriteMatrix = new TransformMatrix ( ) ;
11+
712/**
813 * [description]
914 *
1217 *
1318 * @param {Phaser.GameObjects.GameObject } src - [description]
1419 * @param {Phaser.Cameras.Scene2D.Camera } camera - [description]
15- * @param {Phaser.GameObjects.Components.TransformMatrix } parentMatrix - [description]
20+ * @param {Phaser.GameObjects.Components.TransformMatrix } parentTransformMatrix - [description]
1621 */
17- var DrawImage = function ( src , camera , parentMatrix )
22+ var DrawImage = function ( src , camera , parentTransformMatrix )
1823{
1924 var ctx = this . currentContext ;
20- var frame = src . frame ;
21- var cd = frame . canvasData ;
2225
2326 // Alpha
2427
@@ -42,13 +45,123 @@ var DrawImage = function (src, camera, parentMatrix)
4245
4346 // Smoothing
4447
45- if ( this . currentScaleMode !== src . scaleMode )
48+ // if (this.currentScaleMode !== src.scaleMode)
49+ // {
50+ // this.currentScaleMode = src.scaleMode;
51+ // ctx[this.smoothProperty] = (source.scaleMode === ScaleModes.LINEAR);
52+ // }
53+
54+ var camMatrix = _tempCameraMatrix ;
55+ var spriteMatrix = _tempSpriteMatrix ;
56+
57+ spriteMatrix . applyITRS ( src . x - camera . scrollX * src . scrollFactorX , src . y - camera . scrollY * src . scrollFactorY , src . rotation , src . scaleX , src . scaleY ) ;
58+
59+ var frame = src . frame ;
60+ var frameX = frame . x ;
61+ var frameY = frame . y ;
62+ var frameWidth = frame . width ;
63+ var frameHeight = frame . height ;
64+
65+ var x = - src . displayOriginX + frameX ;
66+ var y = - src . displayOriginY + frameY ;
67+
68+ var fx = 1 ;
69+ var fy = 1 ;
70+
71+ if ( src . isCropped )
4672 {
47- this . currentScaleMode = src . scaleMode ;
73+ var crop = src . _crop ;
4874
49- // ctx[this.smoothProperty] = (source.scaleMode === ScaleModes.LINEAR);
75+ if ( crop . flipX !== src . flipX || crop . flipY !== src . flipY )
76+ {
77+ frame . updateCropUVs ( crop , src . flipX , src . flipY ) ;
78+ }
79+
80+ frameWidth = crop . width ;
81+ frameHeight = crop . height ;
82+
83+ frameX = crop . x ;
84+ frameY = crop . y ;
85+
86+ x = - src . displayOriginX + frameX ;
87+ y = - src . displayOriginY + frameY ;
88+ }
89+
90+ if ( src . flipX )
91+ {
92+ fx = - 1 ;
93+ }
94+
95+ if ( src . flipY )
96+ {
97+ fy = - 1 ;
5098 }
5199
100+ camMatrix . copyFrom ( camera . matrix ) ;
101+
102+ var calcMatrix ;
103+
104+ if ( parentTransformMatrix )
105+ {
106+ // Multiply the camera by the parent matrix
107+ camMatrix . multiplyWithOffset ( parentTransformMatrix , - camera . scrollX * src . scrollFactorX , - camera . scrollY * src . scrollFactorY ) ;
108+
109+ // Undo the camera scroll
110+ spriteMatrix . e = src . x ;
111+ spriteMatrix . f = src . y ;
112+
113+ // Multiply by the Sprite matrix
114+ calcMatrix = camMatrix . multiply ( spriteMatrix ) ;
115+ }
116+ else
117+ {
118+ calcMatrix = spriteMatrix . multiply ( camMatrix ) ;
119+ }
120+
121+ ctx . save ( ) ;
122+
123+ ctx . transform ( calcMatrix . a , calcMatrix . b , calcMatrix . c , calcMatrix . d , calcMatrix . e , calcMatrix . f ) ;
124+
125+ ctx . scale ( fx , fy ) ;
126+
127+ if ( src . isCropped )
128+ {
129+ if ( src . flipX )
130+ {
131+ if ( x >= 0 )
132+ {
133+ x = - ( x + crop . cw ) ;
134+ }
135+ else if ( x < 0 )
136+ {
137+ x = ( Math . abs ( x ) - crop . cw ) ;
138+ }
139+ }
140+
141+ if ( src . flipY )
142+ {
143+ if ( y >= 0 )
144+ {
145+ y = - ( y + crop . ch ) ;
146+ }
147+ else if ( y < 0 )
148+ {
149+ y = ( Math . abs ( y ) - crop . ch ) ;
150+ }
151+ }
152+
153+ ctx . drawImage ( frame . source . image , crop . cx , crop . cy , crop . cw , crop . ch , x , y , crop . cw , crop . ch ) ;
154+ }
155+ else
156+ {
157+ var cd = frame . canvasData ;
158+
159+ ctx . drawImage ( frame . source . image , cd . x , cd . y , frameWidth , frameHeight , x , y , frameWidth , frameHeight ) ;
160+ }
161+
162+ ctx . restore ( ) ;
163+
164+ /*
52165 var dx = frame.x;
53166 var dy = frame.y;
54167
@@ -104,10 +217,8 @@ var DrawImage = function (src, camera, parentMatrix)
104217 ctx.scale(src.scaleX, src.scaleY);
105218 ctx.scale(fx, fy);
106219
107- if ( src . isCropped )
220+ if (crop )
108221 {
109- var crop = src . _crop ;
110-
111222 ctx.drawImage(frame.source.image, crop.cx, crop.cy, crop.width, crop.height, crop.x + dx, crop.y + dy, crop.width, crop.height);
112223 }
113224 else
@@ -116,6 +227,7 @@ var DrawImage = function (src, camera, parentMatrix)
116227 }
117228
118229 ctx.restore();
230+ */
119231} ;
120232
121233module . exports = DrawImage ;
0 commit comments