@@ -21,7 +21,7 @@ var GameObject = require('../GameObject');
2121 * @param {number } interpolationPercentage - Reserved for future use and custom pipelines.
2222 * @param {Phaser.Cameras.Scene2D.Camera } camera - The Camera that is rendering the Game Object.
2323 */
24- var DOMElementCSSRenderer = function ( renderer , src , interpolationPercentage , camera )
24+ var DOMElementCSSRenderer = function ( renderer , src , interpolationPercentage , camera , parentTransformMatrix )
2525{
2626 var node = src . node ;
2727 var style = node . style ;
@@ -36,23 +36,66 @@ var DOMElementCSSRenderer = function (renderer, src, interpolationPercentage, ca
3636 return ;
3737 }
3838
39+ var parent = src . parentContainer ;
40+ var alpha = camera . alpha * src . alpha ;
41+
42+ if ( parent )
43+ {
44+ alpha *= parent . alpha ;
45+ }
46+
3947 var camMatrix = renderer . _tempMatrix1 ;
40- var spriteMatrix = renderer . _tempMatrix2 ;
48+ var srcMatrix = renderer . _tempMatrix2 ;
4149 var calcMatrix = renderer . _tempMatrix3 ;
4250
43- var x = src . originX * src . width ;
44- var y = src . originY * src . height ;
51+ var dx = 0 ;
52+ var dy = 0 ;
53+
54+ var tx = '0%' ;
55+ var ty = '0%' ;
4556
46- spriteMatrix . applyITRS ( src . x - x - ( camera . scrollX * src . scrollFactorX ) , src . y - y - ( camera . scrollY * src . scrollFactorY ) , src . rotation , src . scaleX , src . scaleY ) ;
57+ if ( parentTransformMatrix )
58+ {
59+ dx = ( src . width * src . scaleX ) * src . originX ;
60+ dy = ( src . height * src . scaleY ) * src . originY ;
61+
62+ srcMatrix . applyITRS ( src . x - dx , src . y - dy , src . rotation , src . scaleX , src . scaleY ) ;
63+
64+ camMatrix . copyFrom ( camera . matrix ) ;
4765
48- camMatrix . copyFrom ( camera . matrix ) ;
49-
50- camMatrix . multiply ( spriteMatrix , calcMatrix ) ;
66+ // Multiply the camera by the parent matrix
67+ camMatrix . multiplyWithOffset ( parentTransformMatrix , - camera . scrollX * src . scrollFactorX , - camera . scrollY * src . scrollFactorY ) ;
68+
69+ // Undo the camera scroll
70+ srcMatrix . e = src . x - dx ;
71+ srcMatrix . f = src . y - dy ;
72+
73+ // Multiply by the src matrix, store result in calcMatrix
74+ camMatrix . multiply ( srcMatrix , calcMatrix ) ;
75+ }
76+ else
77+ {
78+ dx = ( src . width ) * src . originX ;
79+ dy = ( src . height ) * src . originY ;
80+
81+ srcMatrix . applyITRS ( src . x - dx , src . y - dy , src . rotation , src . scaleX , src . scaleY ) ;
82+
83+ camMatrix . copyFrom ( camera . matrix ) ;
84+
85+ tx = ( 100 * src . originX ) + '%' ;
86+ ty = ( 100 * src . originY ) + '%' ;
87+
88+ srcMatrix . e -= camera . scrollX * src . scrollFactorX ;
89+ srcMatrix . f -= camera . scrollY * src . scrollFactorY ;
90+
91+ // Multiply by the src matrix, store result in calcMatrix
92+ camMatrix . multiply ( srcMatrix , calcMatrix ) ;
93+ }
5194
5295 if ( ! src . transformOnly )
5396 {
5497 style . display = 'block' ;
55- style . opacity = src . alpha ;
98+ style . opacity = alpha ;
5699 style . zIndex = src . _depth ;
57100 style . pointerEvents = 'auto' ;
58101 style . mixBlendMode = CSSBlendModes [ src . _blendMode ] ;
@@ -65,7 +108,12 @@ var DOMElementCSSRenderer = function (renderer, src, interpolationPercentage, ca
65108 ' skew(' + src . skewX + 'rad, ' + src . skewY + 'rad)' +
66109 ' rotate3d(' + src . rotate3d . x + ',' + src . rotate3d . y + ',' + src . rotate3d . z + ',' + src . rotate3d . w + src . rotate3dAngle + ')' ;
67110
68- style . transformOrigin = ( 100 * src . originX ) + '% ' + ( 100 * src . originY ) + '%' ;
111+ style . transformOrigin = tx + ' ' + ty ;
112+
113+ var nodeBounds = node . getBoundingClientRect ( ) ;
114+
115+ src . displayWidth = nodeBounds . width ;
116+ src . displayHeight = nodeBounds . height ;
69117} ;
70118
71119module . exports = DOMElementCSSRenderer ;
0 commit comments