@vpmedia/phaser 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -3
- package/dist/phaser.cjs +1 -1
- package/dist/phaser.cjs.LICENSE.txt +1 -1
- package/dist/phaser.cjs.map +1 -1
- package/dist/phaser.js +1 -1
- package/dist/phaser.js.LICENSE.txt +1 -1
- package/dist/phaser.js.map +1 -1
- package/package.json +23 -17
- package/src/index.js +142 -0
- package/src/phaser/core/animation.js +355 -0
- package/src/phaser/core/animation_manager.js +238 -0
- package/src/phaser/core/animation_parser.js +133 -0
- package/src/phaser/core/array_set.js +107 -0
- package/src/phaser/core/cache.js +558 -0
- package/src/phaser/core/const.js +106 -0
- package/src/phaser/core/device.js +67 -0
- package/src/phaser/core/device_util.js +388 -0
- package/src/phaser/core/dom.js +207 -0
- package/src/phaser/core/event_manager.js +243 -0
- package/src/phaser/core/factory.js +74 -0
- package/src/phaser/core/frame.js +75 -0
- package/src/phaser/core/frame_data.js +84 -0
- package/src/phaser/core/frame_util.js +33 -0
- package/src/phaser/core/game.js +412 -0
- package/src/phaser/core/input.js +401 -0
- package/src/phaser/core/input_button.js +102 -0
- package/src/phaser/core/input_handler.js +687 -0
- package/src/phaser/core/input_mouse.js +289 -0
- package/src/phaser/core/input_mspointer.js +197 -0
- package/src/phaser/core/input_pointer.js +427 -0
- package/src/phaser/core/input_touch.js +157 -0
- package/src/phaser/core/loader.js +1057 -0
- package/src/phaser/core/loader_parser.js +109 -0
- package/src/phaser/core/raf.js +46 -0
- package/src/phaser/core/raf_fb.js +75 -0
- package/src/phaser/core/raf_to.js +34 -0
- package/src/phaser/core/scale_manager.js +806 -0
- package/src/phaser/core/scene.js +65 -0
- package/src/phaser/core/scene_manager.js +309 -0
- package/src/phaser/core/signal.js +175 -0
- package/src/phaser/core/signal_binding.js +69 -0
- package/src/phaser/core/sound.js +538 -0
- package/src/phaser/core/sound_manager.js +364 -0
- package/src/phaser/core/stage.js +108 -0
- package/src/phaser/core/time.js +203 -0
- package/src/phaser/core/timer.js +276 -0
- package/src/phaser/core/timer_event.js +21 -0
- package/src/phaser/core/tween.js +329 -0
- package/src/phaser/core/tween_data.js +258 -0
- package/src/phaser/core/tween_easing.js +341 -0
- package/src/phaser/core/tween_manager.js +185 -0
- package/src/phaser/core/world.js +18 -0
- package/src/phaser/display/bitmap_text.js +322 -0
- package/src/phaser/display/button.js +194 -0
- package/src/phaser/display/canvas/buffer.js +36 -0
- package/src/phaser/display/canvas/graphics.js +227 -0
- package/src/phaser/display/canvas/masker.js +39 -0
- package/src/phaser/display/canvas/pool.js +126 -0
- package/src/phaser/display/canvas/renderer.js +123 -0
- package/src/phaser/display/canvas/tinter.js +144 -0
- package/src/phaser/display/canvas/util.js +159 -0
- package/src/phaser/display/display_object.js +597 -0
- package/src/phaser/display/graphics.js +723 -0
- package/src/phaser/display/graphics_data.js +27 -0
- package/src/phaser/display/graphics_data_util.js +15 -0
- package/src/phaser/display/group.js +227 -0
- package/src/phaser/display/image.js +288 -0
- package/src/phaser/display/sprite_batch.js +15 -0
- package/src/phaser/display/sprite_util.js +250 -0
- package/src/phaser/display/text.js +1089 -0
- package/src/phaser/display/webgl/abstract_filter.js +25 -0
- package/src/phaser/display/webgl/base_texture.js +68 -0
- package/src/phaser/display/webgl/blend_manager.js +35 -0
- package/src/phaser/display/webgl/earcut.js +662 -0
- package/src/phaser/display/webgl/earcut_node.js +28 -0
- package/src/phaser/display/webgl/fast_sprite_batch.js +242 -0
- package/src/phaser/display/webgl/filter_manager.js +46 -0
- package/src/phaser/display/webgl/filter_texture.js +61 -0
- package/src/phaser/display/webgl/graphics.js +624 -0
- package/src/phaser/display/webgl/graphics_data.js +42 -0
- package/src/phaser/display/webgl/mask_manager.js +36 -0
- package/src/phaser/display/webgl/render_texture.js +81 -0
- package/src/phaser/display/webgl/renderer.js +234 -0
- package/src/phaser/display/webgl/shader/complex.js +74 -0
- package/src/phaser/display/webgl/shader/fast.js +97 -0
- package/src/phaser/display/webgl/shader/normal.js +225 -0
- package/src/phaser/display/webgl/shader/primitive.js +72 -0
- package/src/phaser/display/webgl/shader/strip.js +77 -0
- package/src/phaser/display/webgl/shader_manager.js +89 -0
- package/src/phaser/display/webgl/sprite_batch.js +320 -0
- package/src/phaser/display/webgl/stencil_manager.js +170 -0
- package/src/phaser/display/webgl/texture.js +117 -0
- package/src/phaser/display/webgl/texture_util.js +34 -0
- package/src/phaser/display/webgl/util.js +78 -0
- package/src/phaser/geom/circle.js +186 -0
- package/src/phaser/geom/ellipse.js +65 -0
- package/src/phaser/geom/line.js +190 -0
- package/src/phaser/geom/matrix.js +147 -0
- package/src/phaser/geom/point.js +164 -0
- package/src/phaser/geom/polygon.js +140 -0
- package/src/phaser/geom/rectangle.js +306 -0
- package/src/phaser/geom/rounded_rectangle.js +36 -0
- package/src/phaser/geom/util/circle.js +122 -0
- package/src/phaser/geom/util/ellipse.js +34 -0
- package/src/phaser/geom/util/line.js +135 -0
- package/src/phaser/geom/util/matrix.js +53 -0
- package/src/phaser/geom/util/point.js +296 -0
- package/src/phaser/geom/util/polygon.js +28 -0
- package/src/phaser/geom/util/rectangle.js +229 -0
- package/src/phaser/geom/util/rounded_rectangle.js +32 -0
- package/src/phaser/util/math.js +297 -0
- package/src/phaser/util/string.js +32 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Andras Csizmadia <andras@vpmedia.hu>
|
|
3
|
+
* @author Richard Davey <rich@photonstorm.com>
|
|
4
|
+
* @copyright Copyright (c) 2018-present Richard Davey, Photon Storm Ltd., Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)
|
|
5
|
+
*/
|
|
6
|
+
import { getTintedTexture } from './canvas/tinter';
|
|
7
|
+
import { getIdentityMatrix } from '../geom/util/matrix';
|
|
8
|
+
import { SCALE_LINEAR } from '../core/const';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param {object} target TBD
|
|
13
|
+
* @param {object} texture TBD
|
|
14
|
+
* @param {boolean} destroyBase TBD
|
|
15
|
+
*/
|
|
16
|
+
export function setTexture(target, texture, destroyBase = false) {
|
|
17
|
+
if (destroyBase) {
|
|
18
|
+
target.texture.baseTexture.destroy();
|
|
19
|
+
}
|
|
20
|
+
target.texture.baseTexture.skipRender = false;
|
|
21
|
+
target.texture = texture;
|
|
22
|
+
target.texture.valid = true;
|
|
23
|
+
target.cachedTint = -1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param {object} target TBD
|
|
29
|
+
* @param {object} matrix TBD
|
|
30
|
+
* @returns {object} TBD
|
|
31
|
+
*/
|
|
32
|
+
export function getBounds(target, matrix = null) {
|
|
33
|
+
// TODO verify
|
|
34
|
+
if (target.currentBounds) {
|
|
35
|
+
return target.currentBounds;
|
|
36
|
+
}
|
|
37
|
+
const width = target.texture.frame.width;
|
|
38
|
+
const height = target.texture.frame.height;
|
|
39
|
+
let w0 = width * (1 - target.anchor.x);
|
|
40
|
+
let w1 = width * -target.anchor.x;
|
|
41
|
+
let h0 = height * (1 - target.anchor.y);
|
|
42
|
+
let h1 = height * -target.anchor.y;
|
|
43
|
+
const worldTransform = matrix || target.worldTransform;
|
|
44
|
+
let a = worldTransform.a;
|
|
45
|
+
const b = worldTransform.b;
|
|
46
|
+
const c = worldTransform.c;
|
|
47
|
+
let d = worldTransform.d;
|
|
48
|
+
const tx = worldTransform.tx;
|
|
49
|
+
const ty = worldTransform.ty;
|
|
50
|
+
let maxX = -Infinity;
|
|
51
|
+
let maxY = -Infinity;
|
|
52
|
+
let minX = Infinity;
|
|
53
|
+
let minY = Infinity;
|
|
54
|
+
if (b === 0 && c === 0) {
|
|
55
|
+
// scale may be negative!
|
|
56
|
+
if (a < 0) {
|
|
57
|
+
a *= -1;
|
|
58
|
+
const temp = w0;
|
|
59
|
+
w0 = -w1;
|
|
60
|
+
w1 = -temp;
|
|
61
|
+
}
|
|
62
|
+
if (d < 0) {
|
|
63
|
+
d *= -1;
|
|
64
|
+
const temp = h0;
|
|
65
|
+
h0 = -h1;
|
|
66
|
+
h1 = -temp;
|
|
67
|
+
}
|
|
68
|
+
// this means there is no rotation going on right? RIGHT?
|
|
69
|
+
// if thats the case then we can avoid checking the bound values! yay
|
|
70
|
+
minX = a * w1 + tx;
|
|
71
|
+
maxX = a * w0 + tx;
|
|
72
|
+
minY = d * h1 + ty;
|
|
73
|
+
maxY = d * h0 + ty;
|
|
74
|
+
} else {
|
|
75
|
+
const x1 = a * w1 + c * h1 + tx;
|
|
76
|
+
const y1 = d * h1 + b * w1 + ty;
|
|
77
|
+
const x2 = a * w0 + c * h1 + tx;
|
|
78
|
+
const y2 = d * h1 + b * w0 + ty;
|
|
79
|
+
const x3 = a * w0 + c * h0 + tx;
|
|
80
|
+
const y3 = d * h0 + b * w0 + ty;
|
|
81
|
+
const x4 = a * w1 + c * h0 + tx;
|
|
82
|
+
const y4 = d * h0 + b * w1 + ty;
|
|
83
|
+
minX = x1 < minX ? x1 : minX;
|
|
84
|
+
minX = x2 < minX ? x2 : minX;
|
|
85
|
+
minX = x3 < minX ? x3 : minX;
|
|
86
|
+
minX = x4 < minX ? x4 : minX;
|
|
87
|
+
minY = y1 < minY ? y1 : minY;
|
|
88
|
+
minY = y2 < minY ? y2 : minY;
|
|
89
|
+
minY = y3 < minY ? y3 : minY;
|
|
90
|
+
minY = y4 < minY ? y4 : minY;
|
|
91
|
+
maxX = x1 > maxX ? x1 : maxX;
|
|
92
|
+
maxX = x2 > maxX ? x2 : maxX;
|
|
93
|
+
maxX = x3 > maxX ? x3 : maxX;
|
|
94
|
+
maxX = x4 > maxX ? x4 : maxX;
|
|
95
|
+
maxY = y1 > maxY ? y1 : maxY;
|
|
96
|
+
maxY = y2 > maxY ? y2 : maxY;
|
|
97
|
+
maxY = y3 > maxY ? y3 : maxY;
|
|
98
|
+
maxY = y4 > maxY ? y4 : maxY;
|
|
99
|
+
}
|
|
100
|
+
const bounds = target.cachedBounds;
|
|
101
|
+
bounds.x = minX;
|
|
102
|
+
bounds.width = maxX - minX;
|
|
103
|
+
bounds.y = minY;
|
|
104
|
+
bounds.height = maxY - minY;
|
|
105
|
+
target.currentBounds = bounds;
|
|
106
|
+
return bounds;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
*
|
|
111
|
+
* @param {object} target TBD
|
|
112
|
+
* @returns {object} TBD
|
|
113
|
+
*/
|
|
114
|
+
export function getLocalBounds(target) {
|
|
115
|
+
const matrixCache = target.worldTransform;
|
|
116
|
+
target.worldTransform = getIdentityMatrix();
|
|
117
|
+
let i;
|
|
118
|
+
for (i = 0; i < target.children.length; i += 1) {
|
|
119
|
+
target.children[i].updateTransform();
|
|
120
|
+
}
|
|
121
|
+
const bounds = target.getBounds();
|
|
122
|
+
target.worldTransform = matrixCache;
|
|
123
|
+
for (i = 0; i < target.children.length; i += 1) {
|
|
124
|
+
target.children[i].updateTransform();
|
|
125
|
+
}
|
|
126
|
+
return bounds;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
*
|
|
131
|
+
* @param {object} target TBD
|
|
132
|
+
* @param {object} renderSession TBD
|
|
133
|
+
* @param {object} matrix TBD
|
|
134
|
+
*/
|
|
135
|
+
export function renderWebGL(target, renderSession, matrix) {
|
|
136
|
+
// if the sprite is not visible or the alpha is 0 then no need to render this element
|
|
137
|
+
if (!target.visible || target.alpha <= 0 || !target.renderable) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// They provided an alternative rendering matrix, so use it
|
|
141
|
+
let wt = target.worldTransform;
|
|
142
|
+
if (matrix) {
|
|
143
|
+
wt = matrix;
|
|
144
|
+
}
|
|
145
|
+
// A quick check to see if this element has a mask or a filter.
|
|
146
|
+
if (target._mask || target._filters) {
|
|
147
|
+
const spriteBatch = renderSession.spriteBatch;
|
|
148
|
+
// push filter first as we need to ensure the stencil buffer is correct for any masking
|
|
149
|
+
if (target._filters) {
|
|
150
|
+
spriteBatch.flush();
|
|
151
|
+
renderSession.filterManager.pushFilter(target._filterBlock);
|
|
152
|
+
}
|
|
153
|
+
if (target._mask) {
|
|
154
|
+
spriteBatch.stop();
|
|
155
|
+
renderSession.maskManager.pushMask(target.mask, renderSession);
|
|
156
|
+
spriteBatch.start();
|
|
157
|
+
}
|
|
158
|
+
// add this sprite to the batch
|
|
159
|
+
spriteBatch.render(target);
|
|
160
|
+
// now loop through the children and make sure they get rendered
|
|
161
|
+
for (let i = 0; i < target.children.length; i += 1) {
|
|
162
|
+
target.children[i].renderWebGL(renderSession);
|
|
163
|
+
}
|
|
164
|
+
// time to stop the sprite batch as either a mask element or a filter draw will happen next
|
|
165
|
+
spriteBatch.stop();
|
|
166
|
+
if (target._mask) renderSession.maskManager.popMask(target._mask, renderSession);
|
|
167
|
+
if (target._filters) renderSession.filterManager.popFilter();
|
|
168
|
+
spriteBatch.start();
|
|
169
|
+
} else {
|
|
170
|
+
renderSession.spriteBatch.render(target);
|
|
171
|
+
// Render children!
|
|
172
|
+
for (let i = 0; i < target.children.length; i += 1) {
|
|
173
|
+
target.children[i].renderWebGL(renderSession, wt);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
*
|
|
180
|
+
* @param {object} target TBD
|
|
181
|
+
* @param {object} renderSession TBD
|
|
182
|
+
* @param {object} matrix TBD
|
|
183
|
+
*/
|
|
184
|
+
export function renderCanvas(target, renderSession, matrix) {
|
|
185
|
+
// If the sprite is not visible or the alpha is 0 then no need to render this element
|
|
186
|
+
if (!target.visible || target.alpha === 0 || !target.renderable || target.texture.crop.width <= 0 || target.texture.crop.height <= 0) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
let wt = target.worldTransform;
|
|
190
|
+
// If they provided an alternative rendering matrix then use it
|
|
191
|
+
if (matrix) {
|
|
192
|
+
wt = matrix;
|
|
193
|
+
}
|
|
194
|
+
if (target.blendMode !== renderSession.currentBlendMode) {
|
|
195
|
+
renderSession.currentBlendMode = target.blendMode;
|
|
196
|
+
renderSession.context.globalCompositeOperation = window.PhaserRegistry.blendModesCanvas[renderSession.currentBlendMode];
|
|
197
|
+
}
|
|
198
|
+
if (target._mask) {
|
|
199
|
+
renderSession.maskManager.pushMask(target._mask, renderSession);
|
|
200
|
+
}
|
|
201
|
+
// Ignore null sources
|
|
202
|
+
if (target.texture.valid) {
|
|
203
|
+
const resolution = target.texture.baseTexture.resolution / renderSession.resolution;
|
|
204
|
+
renderSession.context.globalAlpha = target.worldAlpha;
|
|
205
|
+
|
|
206
|
+
// If smoothingEnabled is supported and we need to change the smoothing property for this texture
|
|
207
|
+
if (renderSession.smoothProperty && renderSession.scaleMode !== target.texture.baseTexture.scaleMode) {
|
|
208
|
+
renderSession.scaleMode = target.texture.baseTexture.scaleMode;
|
|
209
|
+
renderSession.context[renderSession.smoothProperty] = (renderSession.scaleMode === SCALE_LINEAR);
|
|
210
|
+
}
|
|
211
|
+
// If the texture is trimmed we offset by the trim x/y, otherwise we use the frame dimensions
|
|
212
|
+
let dx = (target.texture.trim) ? target.texture.trim.x - target.anchor.x * target.texture.trim.width : target.anchor.x * -target.texture.frame.width;
|
|
213
|
+
let dy = (target.texture.trim) ? target.texture.trim.y - target.anchor.y * target.texture.trim.height : target.anchor.y * -target.texture.frame.height;
|
|
214
|
+
const tx = (wt.tx * renderSession.resolution) + renderSession.shakeX;
|
|
215
|
+
const ty = (wt.ty * renderSession.resolution) + renderSession.shakeY;
|
|
216
|
+
// Allow for pixel rounding
|
|
217
|
+
if (renderSession.roundPixels) {
|
|
218
|
+
renderSession.context.setTransform(wt.a, wt.b, wt.c, wt.d, tx | 0, ty | 0);
|
|
219
|
+
dx |= 0;
|
|
220
|
+
dy |= 0;
|
|
221
|
+
} else {
|
|
222
|
+
renderSession.context.setTransform(wt.a, wt.b, wt.c, wt.d, tx, ty);
|
|
223
|
+
}
|
|
224
|
+
let cw = target.texture.crop.width;
|
|
225
|
+
let ch = target.texture.crop.height;
|
|
226
|
+
dx /= resolution;
|
|
227
|
+
dy /= resolution;
|
|
228
|
+
if (target.tint !== 0xFFFFFF) {
|
|
229
|
+
if (target.texture.requiresReTint || target.cachedTint !== target.tint) {
|
|
230
|
+
target.tintedTexture = getTintedTexture(target, target.tint);
|
|
231
|
+
target.cachedTint = target.tint;
|
|
232
|
+
target.texture.requiresReTint = false;
|
|
233
|
+
}
|
|
234
|
+
renderSession.context.drawImage(target.tintedTexture, 0, 0, cw, ch, dx, dy, cw / resolution, ch / resolution);
|
|
235
|
+
} else {
|
|
236
|
+
const cx = target.texture.crop.x;
|
|
237
|
+
const cy = target.texture.crop.y;
|
|
238
|
+
// https://github.com/photonstorm/phaser-ce/pull/61
|
|
239
|
+
cw = Math.floor(cw);
|
|
240
|
+
ch = Math.floor(ch);
|
|
241
|
+
renderSession.context.drawImage(target.texture.baseTexture.source, cx, cy, cw, ch, dx, dy, cw / resolution, ch / resolution);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
for (let i = 0; i < target.children.length; i += 1) {
|
|
245
|
+
target.children[i].renderCanvas(renderSession);
|
|
246
|
+
}
|
|
247
|
+
if (target._mask) {
|
|
248
|
+
renderSession.maskManager.popMask(renderSession);
|
|
249
|
+
}
|
|
250
|
+
}
|