Skip to content

Commit d912189

Browse files
committed
Added the Extern Game Object
1 parent 789713b commit d912189

6 files changed

Lines changed: 207 additions & 0 deletions

File tree

src/gameobjects/extern/Extern.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* @author Richard Davey <rich@photonstorm.com>
3+
* @copyright 2018 Photon Storm Ltd.
4+
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
5+
*/
6+
7+
var Class = require('../../utils/Class');
8+
var Components = require('../components');
9+
var GameObject = require('../GameObject');
10+
var ExternRender = require('./ExternRender');
11+
12+
/**
13+
* @classdesc
14+
* An Extern Game Object.
15+
*
16+
* @class Extern
17+
* @extends Phaser.GameObjects.GameObject
18+
* @memberof Phaser.GameObjects
19+
* @constructor
20+
* @since 3.16.0
21+
*
22+
* @extends Phaser.GameObjects.Components.Alpha
23+
* @extends Phaser.GameObjects.Components.BlendMode
24+
* @extends Phaser.GameObjects.Components.Depth
25+
* @extends Phaser.GameObjects.Components.Flip
26+
* @extends Phaser.GameObjects.Components.Origin
27+
* @extends Phaser.GameObjects.Components.ScaleMode
28+
* @extends Phaser.GameObjects.Components.ScrollFactor
29+
* @extends Phaser.GameObjects.Components.Size
30+
* @extends Phaser.GameObjects.Components.Texture
31+
* @extends Phaser.GameObjects.Components.Tint
32+
* @extends Phaser.GameObjects.Components.Transform
33+
* @extends Phaser.GameObjects.Components.Visible
34+
*
35+
* @param {Phaser.Scene} scene - The Scene to which this Game Object belongs. A Game Object can only belong to one Scene at a time.
36+
*/
37+
var Extern = new Class({
38+
39+
Extends: GameObject,
40+
41+
Mixins: [
42+
Components.Alpha,
43+
Components.BlendMode,
44+
Components.Depth,
45+
Components.Flip,
46+
Components.Origin,
47+
Components.ScaleMode,
48+
Components.ScrollFactor,
49+
Components.Size,
50+
Components.Texture,
51+
Components.Tint,
52+
Components.Transform,
53+
Components.Visible,
54+
ExternRender
55+
],
56+
57+
initialize:
58+
59+
function Extern (scene)
60+
{
61+
GameObject.call(this, scene, 'Extern');
62+
},
63+
64+
preUpdate: function (time, delta)
65+
{
66+
// override this!
67+
},
68+
69+
render: function (renderer, camera, calcMatrix)
70+
{
71+
// override this!
72+
}
73+
74+
});
75+
76+
module.exports = Extern;

src/gameobjects/extern/ExternCanvasRenderer.js

Whitespace-only changes.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @author Richard Davey <rich@photonstorm.com>
3+
* @copyright 2018 Photon Storm Ltd.
4+
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
5+
*/
6+
7+
var Extern = require('./Extern');
8+
var GameObjectFactory = require('../GameObjectFactory');
9+
10+
/**
11+
* Creates a new Extern Game Object and adds it to the Scene.
12+
*
13+
* Note: This method will only be available if the Extern Game Object has been built into Phaser.
14+
*
15+
* @method Phaser.GameObjects.GameObjectFactory#extern
16+
* @since 3.16.0
17+
*
18+
* @param {number} x - The horizontal position of this Game Object in the world.
19+
* @param {number} y - The vertical position of this Game Object in the world.
20+
* @param {string} texture - The key of the Texture this Game Object will use to render with, as stored in the Texture Manager.
21+
* @param {(string|integer)} [frame] - An optional frame from the Texture this Game Object is rendering with.
22+
*
23+
* @return {Phaser.GameObjects.Extern} The Game Object that was created.
24+
*/
25+
GameObjectFactory.register('extern', function ()
26+
{
27+
var extern = new Extern(this.scene);
28+
29+
this.displayList.add(extern);
30+
this.updateList.add(extern);
31+
32+
return extern;
33+
});
34+
35+
// When registering a factory function 'this' refers to the GameObjectFactory context.
36+
//
37+
// There are several properties available to use:
38+
//
39+
// this.scene - a reference to the Scene that owns the GameObjectFactory
40+
// this.displayList - a reference to the Display List the Scene owns
41+
// this.updateList - a reference to the Update List the Scene owns
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @author Richard Davey <rich@photonstorm.com>
3+
* @copyright 2018 Photon Storm Ltd.
4+
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
5+
*/
6+
7+
var renderWebGL = require('../../utils/NOOP');
8+
var renderCanvas = require('../../utils/NOOP');
9+
10+
if (typeof WEBGL_RENDERER)
11+
{
12+
renderWebGL = require('./ExternWebGLRenderer');
13+
}
14+
15+
if (typeof CANVAS_RENDERER)
16+
{
17+
renderCanvas = require('./ExternCanvasRenderer');
18+
}
19+
20+
module.exports = {
21+
22+
renderWebGL: renderWebGL,
23+
renderCanvas: renderCanvas
24+
25+
};
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* @author Richard Davey <rich@photonstorm.com>
3+
* @copyright 2018 Photon Storm Ltd.
4+
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
5+
*/
6+
7+
/**
8+
* Renders this Game Object with the WebGL Renderer to the given Camera.
9+
* The object will not render if any of its renderFlags are set or it is being actively filtered out by the Camera.
10+
* This method should not be called directly. It is a utility function of the Render module.
11+
*
12+
* @method Phaser.GameObjects.Extern#renderWebGL
13+
* @since 3.16.0
14+
* @private
15+
*
16+
* @param {Phaser.Renderer.WebGL.WebGLRenderer} renderer - A reference to the current active WebGL renderer.
17+
* @param {Phaser.GameObjects.Extern} src - The Game Object being rendered in this call.
18+
* @param {number} interpolationPercentage - Reserved for future use and custom pipelines.
19+
* @param {Phaser.Cameras.Scene2D.Camera} camera - The Camera that is rendering the Game Object.
20+
* @param {Phaser.GameObjects.Components.TransformMatrix} parentMatrix - This transform matrix is defined if the game object is nested
21+
*/
22+
var ExternWebGLRenderer = function (renderer, src, interpolationPercentage, camera, parentMatrix)
23+
{
24+
var pipeline = renderer.currentPipeline;
25+
26+
renderer.clearPipeline();
27+
28+
var camMatrix = renderer._tempMatrix1;
29+
var spriteMatrix = renderer._tempMatrix2;
30+
var calcMatrix = renderer._tempMatrix3;
31+
32+
spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);
33+
34+
camMatrix.copyFrom(camera.matrix);
35+
36+
if (parentMatrix)
37+
{
38+
// Multiply the camera by the parent matrix
39+
camMatrix.multiplyWithOffset(parentMatrix, -camera.scrollX * src.scrollFactorX, -camera.scrollY * src.scrollFactorY);
40+
41+
// Undo the camera scroll
42+
spriteMatrix.e = src.x;
43+
spriteMatrix.f = src.y;
44+
45+
// Multiply by the Sprite matrix, store result in calcMatrix
46+
camMatrix.multiply(spriteMatrix, calcMatrix);
47+
}
48+
else
49+
{
50+
spriteMatrix.e -= camera.scrollX * src.scrollFactorX;
51+
spriteMatrix.f -= camera.scrollY * src.scrollFactorY;
52+
53+
// Multiply by the Sprite matrix, store result in calcMatrix
54+
camMatrix.multiply(spriteMatrix, calcMatrix);
55+
}
56+
57+
// Callback
58+
src.render.call(src, renderer, camera, calcMatrix);
59+
60+
renderer.rebindPipeline(pipeline);
61+
};
62+
63+
module.exports = ExternWebGLRenderer;

src/gameobjects/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var GameObjects = {
2424
Blitter: require('./blitter/Blitter'),
2525
Container: require('./container/Container'),
2626
DynamicBitmapText: require('./bitmaptext/dynamic/DynamicBitmapText'),
27+
Extern: require('./extern/Extern.js'),
2728
Graphics: require('./graphics/Graphics.js'),
2829
Group: require('./group/Group'),
2930
Image: require('./image/Image'),
@@ -57,6 +58,7 @@ var GameObjects = {
5758
Blitter: require('./blitter/BlitterFactory'),
5859
Container: require('./container/ContainerFactory'),
5960
DynamicBitmapText: require('./bitmaptext/dynamic/DynamicBitmapTextFactory'),
61+
Extern: require('./extern/ExternFactory'),
6062
Graphics: require('./graphics/GraphicsFactory'),
6163
Group: require('./group/GroupFactory'),
6264
Image: require('./image/ImageFactory'),

0 commit comments

Comments
 (0)