2016-10-04 21:36:07 +00:00
|
|
|
/**
|
2016-10-08 02:05:42 +00:00
|
|
|
* @author Richard Davey <rich@photonstorm.com>
|
|
|
|
* @author Mat Groves (@Doormat23)
|
|
|
|
* @copyright 2016 Photon Storm Ltd.
|
|
|
|
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
2016-10-04 21:36:07 +00:00
|
|
|
*/
|
2016-10-08 02:05:42 +00:00
|
|
|
|
|
|
|
Phaser.Renderer.Canvas.GameObjects.Image = {
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-05 00:09:23 +00:00
|
|
|
TYPES: [
|
2016-10-09 21:27:58 +00:00
|
|
|
Phaser.GameObject.Image.prototype
|
2016-10-05 00:09:23 +00:00
|
|
|
],
|
|
|
|
|
|
|
|
render: function (renderer, src)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
2016-10-11 13:52:17 +00:00
|
|
|
var frame = src.frame;
|
|
|
|
var source = frame.source;
|
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
// Skip rendering?
|
2016-10-11 13:52:17 +00:00
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
if (src.skipRender || !src.visible || !src.alpha || !frame.cutWidth || !frame.cutHeight)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-10-11 13:52:17 +00:00
|
|
|
// Blend Mode
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-05 00:09:23 +00:00
|
|
|
if (src.blendMode !== renderer.currentBlendMode)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
2016-10-05 00:09:23 +00:00
|
|
|
renderer.currentBlendMode = src.blendMode;
|
2016-10-11 13:52:17 +00:00
|
|
|
renderer.context.globalCompositeOperation = renderer.blendModes[renderer.currentBlendMode];
|
2016-10-04 21:36:07 +00:00
|
|
|
}
|
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
// Alpha (World Alpha?)
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
if (src.alpha !== renderer.context.globalAlpha)
|
2016-10-11 13:52:17 +00:00
|
|
|
{
|
2016-10-13 00:54:40 +00:00
|
|
|
renderer.context.globalAlpha = src.alpha;
|
2016-10-11 13:52:17 +00:00
|
|
|
}
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
// Smoothing (should this be a Game Object, or Frame / Texture level property?)
|
2016-10-11 13:52:17 +00:00
|
|
|
|
|
|
|
if (source.scaleMode !== renderer.currentScaleMode)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
2016-10-11 13:52:17 +00:00
|
|
|
renderer.currentScaleMode = source.scaleMode;
|
|
|
|
renderer.context[renderer.smoothProperty] = (source.scaleMode === Phaser.scaleModes.LINEAR);
|
2016-10-04 21:36:07 +00:00
|
|
|
}
|
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
var wt = src.transform.world;
|
2016-10-11 13:52:17 +00:00
|
|
|
|
|
|
|
var resolution = source.resolution / renderer.game.resolution;
|
|
|
|
|
2016-10-13 00:54:40 +00:00
|
|
|
var dx = frame.x - (src.anchorX * frame.width);
|
|
|
|
var dy = frame.y - (src.anchorY * frame.height);
|
2016-10-04 21:36:07 +00:00
|
|
|
|
|
|
|
var tx = (wt.tx * renderer.game.resolution) + renderer.game.camera._shake.x;
|
|
|
|
var ty = (wt.ty * renderer.game.resolution) + renderer.game.camera._shake.y;
|
|
|
|
|
2016-10-11 13:52:17 +00:00
|
|
|
// Round Pixels
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-11 13:52:17 +00:00
|
|
|
if (renderer.roundPixels)
|
|
|
|
{
|
|
|
|
tx |= 0;
|
|
|
|
ty |= 0;
|
|
|
|
dx |= 0;
|
|
|
|
dy |= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
var cw = frame.cutWidth;
|
|
|
|
var ch = frame.cutHeight;
|
|
|
|
|
|
|
|
renderer.context.setTransform(wt.a, wt.b, wt.c, wt.d, tx, ty);
|
|
|
|
|
|
|
|
renderer.context.drawImage(source.image, frame.cutX, frame.cutY, cw, ch, dx, dy, cw / resolution, ch / resolution);
|
|
|
|
|
|
|
|
/*
|
|
|
|
// Move this to either the Renderer, or the Texture Manager, but not here (as it's repeated all over the place)
|
2016-10-05 00:09:23 +00:00
|
|
|
if (src.texture.rotated)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
|
|
|
var a = wt.a;
|
|
|
|
var b = wt.b;
|
|
|
|
var c = wt.c;
|
|
|
|
var d = wt.d;
|
|
|
|
var e = cw;
|
|
|
|
|
|
|
|
// Offset before rotating
|
|
|
|
tx = wt.c * ch + tx;
|
|
|
|
ty = wt.d * ch + ty;
|
|
|
|
|
|
|
|
// Rotate matrix by 90 degrees
|
|
|
|
// We use precalculated values for sine and cosine of rad(90)
|
|
|
|
wt.a = a * 6.123233995736766e-17 + -c;
|
|
|
|
wt.b = b * 6.123233995736766e-17 + -d;
|
|
|
|
wt.c = a + c * 6.123233995736766e-17;
|
|
|
|
wt.d = b + d * 6.123233995736766e-17;
|
|
|
|
|
|
|
|
// Update cropping dimensions.
|
|
|
|
cw = ch;
|
|
|
|
ch = e;
|
|
|
|
}
|
2016-10-11 13:52:17 +00:00
|
|
|
*/
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-11 13:52:17 +00:00
|
|
|
/*
|
2016-10-05 00:09:23 +00:00
|
|
|
if (src.tint !== 0xFFFFFF)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
2016-10-05 00:09:23 +00:00
|
|
|
if (src.texture.requiresReTint || src.cachedTint !== src.tint)
|
2016-10-04 21:36:07 +00:00
|
|
|
{
|
2016-10-05 00:09:23 +00:00
|
|
|
src.tintedTexture = PIXI.CanvasTinter.getTintedTexture(src, src.tint);
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-05 00:09:23 +00:00
|
|
|
src.cachedTint = src.tint;
|
|
|
|
src.texture.requiresReTint = false;
|
2016-10-04 21:36:07 +00:00
|
|
|
}
|
|
|
|
|
2016-10-05 00:09:23 +00:00
|
|
|
renderer.context.drawImage(src.tintedTexture, 0, 0, cw, ch, dx, dy, cw / resolution, ch / resolution);
|
2016-10-04 21:36:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2016-10-05 00:09:23 +00:00
|
|
|
var cx = src.texture.crop.x;
|
|
|
|
var cy = src.texture.crop.y;
|
2016-10-04 21:36:07 +00:00
|
|
|
|
2016-10-05 00:09:23 +00:00
|
|
|
renderer.context.drawImage(src.texture.baseTexture.source, cx, cy, cw, ch, dx, dy, cw / resolution, ch / resolution);
|
2016-10-04 21:36:07 +00:00
|
|
|
}
|
2016-10-11 13:52:17 +00:00
|
|
|
*/
|
2016-10-04 21:36:07 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|