Skip to content

Commit 3009809

Browse files
authored
Merge pull request phaserjs#3508 from photonstorm/containers
Merging in Containers branch
2 parents 44f7993 + e02efcf commit 3009809

33 files changed

Lines changed: 689 additions & 90 deletions

src/display/mask/GeometryMask.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ var GeometryMask = new Class({
115115

116116
renderer.currentContext.save();
117117

118-
geometryMask.renderCanvas(renderer, geometryMask, 0.0, camera, null, true);
118+
geometryMask.renderCanvas(renderer, geometryMask, 0.0, camera, undefined, null, true);
119119

120120
renderer.currentContext.clip();
121121
},

src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ var GameObject = require('../../GameObject');
1919
* @param {Phaser.GameObjects.DynamicBitmapText} src - The Game Object being rendered in this call.
2020
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
2121
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
22+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
2223
*/
23-
var DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera)
24+
var DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)
2425
{
2526
var text = src.text;
2627
var textLength = text.length;
@@ -89,6 +90,12 @@ var DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPerc
8990

9091
ctx.save();
9192

93+
if (parentMatrix !== undefined)
94+
{
95+
var matrix = parentMatrix.matrix;
96+
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
97+
}
98+
9299
ctx.translate(src.x, src.y);
93100

94101
ctx.rotate(src.rotation);

src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ var GameObject = require('../../GameObject');
1919
* @param {Phaser.GameObjects.DynamicBitmapText} gameObject - The Game Object being rendered in this call.
2020
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
2121
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
22+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
2223
*/
23-
var DynamicBitmapTextWebGLRenderer = function (renderer, bitmapText, interpolationPercentage, camera)
24+
var DynamicBitmapTextWebGLRenderer = function (renderer, bitmapText, interpolationPercentage, camera, parentMatrix)
2425
{
2526
var text = bitmapText.text;
2627
var textLength = text.length;
@@ -30,7 +31,7 @@ var DynamicBitmapTextWebGLRenderer = function (renderer, bitmapText, interpolati
3031
return;
3132
}
3233

33-
this.pipeline.batchDynamicBitmapText(bitmapText, camera);
34+
this.pipeline.batchDynamicBitmapText(bitmapText, camera, parentMatrix);
3435
};
3536

3637
module.exports = DynamicBitmapTextWebGLRenderer;

src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ var GameObject = require('../../GameObject');
1919
* @param {Phaser.GameObjects.BitmapText} src - The Game Object being rendered in this call.
2020
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
2121
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
22+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
2223
*/
23-
var BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera)
24+
var BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)
2425
{
2526
var text = src.text;
2627
var textLength = text.length;
@@ -95,6 +96,12 @@ var BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage,
9596

9697
ctx.save();
9798

99+
if (parentMatrix !== undefined)
100+
{
101+
var matrix = parentMatrix.matrix;
102+
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
103+
}
104+
98105
ctx.translate(tx, ty);
99106

100107
ctx.rotate(src.rotation);

src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ var GameObject = require('../../GameObject');
1919
* @param {Phaser.GameObjects.BitmapText} gameObject - The Game Object being rendered in this call.
2020
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
2121
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
22+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
2223
*/
23-
var BitmapTextWebGLRenderer = function (renderer, gameObject, interpolationPercentage, camera)
24+
var BitmapTextWebGLRenderer = function (renderer, gameObject, interpolationPercentage, camera, parentMatrix)
2425
{
2526
var text = gameObject.text;
2627
var textLength = text.length;
@@ -30,7 +31,7 @@ var BitmapTextWebGLRenderer = function (renderer, gameObject, interpolationPerce
3031
return;
3132
}
3233

33-
this.pipeline.batchBitmapText(this, camera);
34+
this.pipeline.batchBitmapText(this, camera, parentMatrix);
3435
};
3536

3637
module.exports = BitmapTextWebGLRenderer;

src/gameobjects/blitter/BlitterCanvasRenderer.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ var GameObject = require('../GameObject');
1919
* @param {Phaser.GameObjects.Blitter} src - The Game Object being rendered in this call.
2020
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
2121
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
22+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
2223
*/
23-
var BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, camera)
24+
var BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)
2425
{
2526
if (GameObject.RENDER_MASK !== src.renderFlags || (src.cameraFilter > 0 && (src.cameraFilter & camera._id)))
2627
{
@@ -35,6 +36,14 @@ var BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, ca
3536
var cameraScrollX = src.x - camera.scrollX * src.scrollFactorX;
3637
var cameraScrollY = src.y - camera.scrollY * src.scrollFactorY;
3738

39+
ctx.save();
40+
41+
if (parentMatrix !== undefined)
42+
{
43+
var matrix = parentMatrix.matrix;
44+
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
45+
}
46+
3847
// Render bobs
3948
for (var i = 0; i < list.length; i++)
4049
{
@@ -72,6 +81,8 @@ var BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, ca
7281
ctx.restore();
7382
}
7483
}
84+
85+
ctx.restore();
7586
};
7687

7788
module.exports = BlitterCanvasRenderer;

src/gameobjects/blitter/BlitterWebGLRenderer.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ var GameObject = require('../GameObject');
1919
* @param {Phaser.GameObjects.Blitter} gameObject - The Game Object being rendered in this call.
2020
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
2121
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
22+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
2223
*/
23-
var BlitterWebGLRenderer = function (renderer, gameObject, interpolationPercentage, camera)
24+
var BlitterWebGLRenderer = function (renderer, gameObject, interpolationPercentage, camera, parentMatrix)
2425
{
2526
if (GameObject.RENDER_MASK !== gameObject.renderFlags || (gameObject.cameraFilter > 0 && (gameObject.cameraFilter & camera._id)))
2627
{
2728
return;
2829
}
2930

30-
this.pipeline.drawBlitter(gameObject, camera);
31+
this.pipeline.drawBlitter(gameObject, camera, parentMatrix);
3132
};
3233

3334
module.exports = BlitterWebGLRenderer;
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
var Class = require('../../utils/Class');
2+
var Components = require('../components');
3+
var GameObject = require('../GameObject');
4+
var Render = require('./ContainerRender');
5+
6+
var Container = new Class({
7+
8+
Extends: GameObject,
9+
10+
Mixins: [
11+
Components.BlendMode,
12+
Components.Transform,
13+
Render
14+
],
15+
16+
initialize:
17+
18+
function Container(scene, x, y)
19+
{
20+
GameObject.call(this, scene, 'Container');
21+
this.parentContainer = null;
22+
this.children = [];
23+
this.setPosition(x, y);
24+
this.localTransform = new Components.TransformMatrix();
25+
this.tempTransformMatrix = new Components.TransformMatrix();
26+
},
27+
28+
add: function (gameObject)
29+
{
30+
if (gameObject.type === 'Container')
31+
{
32+
gameObject.parentContainer = this;
33+
}
34+
if (this.children.indexOf(gameObject) < 0)
35+
{
36+
this.children.push(gameObject);
37+
}
38+
return this;
39+
},
40+
41+
remove: function (gameObject)
42+
{
43+
var index = this.children.indexOf(gameObject);
44+
if (index >= 0)
45+
{
46+
if (gameObject.type === 'Container')
47+
{
48+
gameObject.parentContainer = null;
49+
}
50+
this.children.splice(index, 1);
51+
}
52+
return this;
53+
},
54+
55+
pointToContainer: function (pointSrc, pointDst)
56+
{
57+
var parent = this.parentContainer;
58+
var tempMatrix = this.tempTransformMatrix;
59+
60+
if (pointDst === undefined)
61+
{
62+
pointDst = { x: 0, y: 0 };
63+
}
64+
65+
if (parent !== null)
66+
{
67+
parent.pointToContainer(pointSrc, pointDst);
68+
}
69+
70+
tempMatrix.loadIdentity();
71+
tempMatrix.applyITRS(this.x, this.y, this.rotation, this.scaleX, this.scaleY);
72+
tempMatrix.invert();
73+
tempMatrix.transformPoint(pointSrc.x, pointSrc.y, pointDst);
74+
75+
return pointDst;
76+
}
77+
});
78+
79+
module.exports = Container;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var GameObject = require('../GameObject');
2+
3+
var ContainerCanvasRenderer = function (renderer, container, interpolationPercentage, camera, parentMatrix)
4+
{
5+
if (GameObject.RENDER_MASK !== container.renderFlags || (container.cameraFilter > 0 && (container.cameraFilter & camera._id)))
6+
{
7+
return;
8+
}
9+
10+
var children = container.children;
11+
var transformMatrix = container.localTransform;
12+
13+
if (parentMatrix === undefined)
14+
{
15+
transformMatrix.applyITRS(container.x, container.y, container.rotation, container.scaleX, container.scaleY);
16+
}
17+
else
18+
{
19+
transformMatrix.loadIdentity();
20+
transformMatrix.multiply(parentMatrix);
21+
transformMatrix.translate(container.x, container.y);
22+
transformMatrix.rotate(container.rotation);
23+
transformMatrix.scale(container.scaleX, container.scaleY);
24+
}
25+
26+
for (var index = 0; index < children.length; ++index)
27+
{
28+
children[index].renderCanvas(renderer, children[index], interpolationPercentage, camera, transformMatrix);
29+
}
30+
};
31+
32+
module.exports = ContainerCanvasRenderer;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var GetAdvancedValue = require('../../utils/object/GetAdvancedValue');
2+
var GameObjectCreator = require('../GameObjectCreator');
3+
var Container = require('./Container');
4+
5+
GameObjectCreator.register('container', function (config)
6+
{
7+
var x = GetAdvancedValue(config, 'x', 0.0);
8+
var y = GetAdvancedValue(config, 'y', 0.0);
9+
var add = GetAdvancedValue(config, 'add', true);
10+
var container = new Container(this.scene, x, y);
11+
12+
if (add)
13+
{
14+
this.scene.sys.displayList.add(container);
15+
}
16+
17+
return container;
18+
});

0 commit comments

Comments
 (0)