Skip to content

Commit f76ba68

Browse files
committed
Animation and Input related fixes
1 parent 619b841 commit f76ba68

10 files changed

Lines changed: 103 additions & 36 deletions

File tree

Phaser/Game.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ module Phaser {
3737
*/
3838
constructor(callbackContext, parent: string = '', width: number = 800, height: number = 600, preloadCallback = null, createCallback = null, updateCallback = null, renderCallback = null, destroyCallback = null) {
3939

40+
// Single instance check
41+
if (window['PhaserGlobal'].singleInstance)
42+
{
43+
if (Phaser.GAMES.length > 0)
44+
{
45+
console.log('Phaser detected an instance of this game already running, aborting');
46+
return;
47+
}
48+
}
49+
4050
this.id = Phaser.GAMES.push(this) - 1;
4151

4252
this.callbackContext = callbackContext;

Phaser/Phaser.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
44
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5-
<ProjectGuid>{BB30C59B-5B34-4F7C-B5CC-8D49EA280EDA}</ProjectGuid>
5+
<ProjectGuid>{A90BE60F-CAEA-4747-904A-CDB097BA2459}</ProjectGuid>
66
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
77
<OutputType>Library</OutputType>
88
<OutputPath>bin</OutputPath>

Phaser/animation/Animation.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,19 @@ module Phaser {
155155
* @param frameRate {number} FrameRate you want to specify instead of using default.
156156
* @param loop {bool} Whether or not the animation is looped or just plays once.
157157
*/
158-
public play(frameRate: number = null, loop: bool = false) {
158+
public play(frameRate: number = null, loop: bool = null) {
159159

160160
if (frameRate !== null)
161161
{
162162
this.delay = 1000 / frameRate;
163163
}
164164

165-
this.looped = loop;
165+
if (loop !== null)
166+
{
167+
// If they set a new loop value then use it, otherwise use the default set on creation
168+
this.looped = loop;
169+
}
170+
166171
this.isPlaying = true;
167172
this.isFinished = false;
168173

Phaser/animation/AnimationManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ module Phaser.Components {
174174
* @param frameRate {number} FrameRate you want to specify instead of using default.
175175
* @param loop {bool} Whether or not the animation is looped or just plays once.
176176
*/
177-
public play(name: string, frameRate: number = null, loop: bool = false): Animation {
177+
public play(name: string, frameRate: number = null, loop: bool = null): Phaser.Animation {
178178

179179
if (this._anims[name])
180180
{

Phaser/gameobjects/Sprite.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ module Phaser {
6464

6565
this.transform.setCache();
6666

67-
this.body = new Phaser.Physics.Body(this, 0);
67+
//this.body = new Phaser.Physics.Body(this, 0);
6868

6969
this.outOfBounds = false;
7070
this.outOfBoundsAction = Phaser.Types.OUT_OF_BOUNDS_PERSIST;
@@ -363,7 +363,7 @@ module Phaser {
363363

364364
this.checkBounds();
365365

366-
this.transform.centerOn(this.body.aabb.pos.x, this.body.aabb.pos.y);
366+
//this.transform.centerOn(this.body.aabb.pos.x, this.body.aabb.pos.y);
367367

368368
if (this.modified == true && this.transform.scale.equals(1) && this.transform.skew.equals(0) && this.transform.rotation == 0 && this.transform.rotationOffset == 0 && this.texture.flippedX == false && this.texture.flippedY == false)
369369
{

Phaser/input/InputHandler.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,9 @@ module Phaser.Components {
295295
}
296296
else
297297
{
298-
return SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY);
298+
//return SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY);
299+
//return SpriteUtils.overlapsXY(this._parent, pointer.screenX, pointer.screenY);
300+
return SpriteUtils.overlapsPointer(this._parent, pointer);
299301
}
300302

301303
}
@@ -317,7 +319,8 @@ module Phaser.Components {
317319
}
318320
else if (this._pointerData[pointer.id].isOver == true)
319321
{
320-
if (SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY))
322+
//if (SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY))
323+
if (SpriteUtils.overlapsPointer(this._parent, pointer))
321324
{
322325
this._pointerData[pointer.id].x = pointer.x - this._parent.x;
323326
this._pointerData[pointer.id].y = pointer.y - this._parent.y;
@@ -409,7 +412,8 @@ module Phaser.Components {
409412
this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown;
410413

411414
// Only release the InputUp signal if the pointer is still over this sprite
412-
if (SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY))
415+
//if (SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY))
416+
if (SpriteUtils.overlapsPointer(this._parent, pointer))
413417
{
414418
//console.log('releasedHandler: ' + Date.now());
415419
this._parent.events.onInputUp.dispatch(this._parent, pointer);

Phaser/input/Keyboard.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module Phaser {
1212

1313
export class Keyboard {
1414

15-
constructor(game: Game) {
15+
constructor(game: Phaser.Game) {
1616

1717
this.game = game;
1818

Phaser/utils/SpriteUtils.ts

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,23 +167,46 @@ module Phaser {
167167
}
168168
*/
169169

170+
public static overlapsPointer(sprite:Phaser.Sprite, pointer: Phaser.Pointer): bool {
171+
172+
if (sprite.transform.scrollFactor.equals(1))
173+
{
174+
// We can do a world vs. world check
175+
return Phaser.SpriteUtils.overlapsXY(sprite, pointer.worldX, pointer.worldY);
176+
}
177+
else if (sprite.transform.scrollFactor.equals(0))
178+
{
179+
// scroll factor 0 means a screen view check, as the sprite will be absolutely positioned
180+
return Phaser.SpriteUtils.overlapsXY(sprite, pointer.x, pointer.y);
181+
}
182+
else
183+
{
184+
// If the sprite has a scroll factor other than 0 or 1 then we need to work out
185+
// what the pointers scroll factor values would be
186+
var px: number = pointer.worldX * sprite.transform.scrollFactor.x;
187+
var py: number = pointer.worldY * sprite.transform.scrollFactor.y;
188+
return Phaser.SpriteUtils.overlapsXY(sprite, px, py);
189+
}
190+
191+
}
192+
170193
/**
171194
* Checks to see if the given x and y coordinates overlaps this <code>Sprite</code>, taking scaling and rotation into account.
172195
* The coordinates must be given in world space, not local or camera space.
173196
*
174197
* @method overlapsXY
175-
* @param {Sprite} sprite The Sprite to check. It will take scaling and rotation into account.
198+
* @param {Sprite} sprite The Sprite to check. It will take scaling and rotation into account, but NOT scroll factor.
176199
* @param {Number} x The x coordinate in world space.
177200
* @param {Number} y The y coordinate in world space.
178201
* @return {bool} Whether or not the point overlaps this object.
179202
*/
180203
public static overlapsXY(sprite: Phaser.Sprite, x: number, y: number): bool {
181204

182205
// if rotation == 0 then just do a rect check instead!
183-
if (sprite.transform.rotation == 0)
184-
{
185-
return Phaser.RectangleUtils.contains(sprite.worldView, x, y);
186-
}
206+
//if (sprite.transform.rotation == 0)
207+
//{
208+
// return Phaser.RectangleUtils.contains(sprite.worldView, x, y);
209+
//}
187210

188211
if ((x - sprite.transform.upperLeft.x) * (sprite.transform.upperRight.x - sprite.transform.upperLeft.x) + (y - sprite.transform.upperLeft.y) * (sprite.transform.upperRight.y - sprite.transform.upperLeft.y) < 0)
189212
{

Tests/phaser-debug.js

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5088,7 +5088,7 @@ var Phaser;
50885088
if(this.enabled == false || this._parent.visible == false) {
50895089
return false;
50905090
} else {
5091-
return Phaser.SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY);
5091+
return Phaser.SpriteUtils.overlapsPointer(this._parent, pointer);
50925092
}
50935093
};
50945094
InputHandler.prototype.update = function (pointer) {
@@ -5099,7 +5099,7 @@ var Phaser;
50995099
if(this.draggable && this._draggedPointerID == pointer.id) {
51005100
return this.updateDrag(pointer);
51015101
} else if(this._pointerData[pointer.id].isOver == true) {
5102-
if(Phaser.SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY)) {
5102+
if(Phaser.SpriteUtils.overlapsPointer(this._parent, pointer)) {
51035103
this._pointerData[pointer.id].x = pointer.x - this._parent.x;
51045104
this._pointerData[pointer.id].y = pointer.y - this._parent.y;
51055105
return true;
@@ -5152,7 +5152,7 @@ var Phaser;
51525152
this._pointerData[pointer.id].isUp = true;
51535153
this._pointerData[pointer.id].timeUp = this.game.time.now;
51545154
this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown;
5155-
if(Phaser.SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY)) {
5155+
if(Phaser.SpriteUtils.overlapsPointer(this._parent, pointer)) {
51565156
this._parent.events.onInputUp.dispatch(this._parent, pointer);
51575157
} else {
51585158
if(this.useHandCursor) {
@@ -6929,11 +6929,14 @@ var Phaser;
69296929
});
69306930
Animation.prototype.play = function (frameRate, loop) {
69316931
if (typeof frameRate === "undefined") { frameRate = null; }
6932-
if (typeof loop === "undefined") { loop = false; }
6932+
if (typeof loop === "undefined") { loop = null; }
69336933
if(frameRate !== null) {
69346934
this.delay = 1000 / frameRate;
69356935
}
6936-
this.looped = loop;
6936+
if(loop !== null) {
6937+
console.log('play loop override', loop);
6938+
this.looped = loop;
6939+
}
69376940
this.isPlaying = true;
69386941
this.isFinished = false;
69396942
this._timeLastFrame = this.game.time.now;
@@ -6963,7 +6966,9 @@ var Phaser;
69636966
this._frameIndex = 0;
69646967
this.currentFrame = this._frameData.getFrame(this._frames[this._frameIndex]);
69656968
this._parent.events.onAnimationLoop.dispatch(this._parent, this);
6969+
console.log('anim loop core');
69666970
} else {
6971+
console.log('anim complete core');
69676972
this.onComplete();
69686973
}
69696974
} else {
@@ -10693,7 +10698,6 @@ var Phaser;
1069310698
this.worldView = new Phaser.Rectangle(x, y, this.width, this.height);
1069410699
this.cameraView = new Phaser.Rectangle(x, y, this.width, this.height);
1069510700
this.transform.setCache();
10696-
this.body = new Phaser.Physics.Body(this, 0);
1069710701
this.outOfBounds = false;
1069810702
this.outOfBoundsAction = Phaser.Types.OUT_OF_BOUNDS_PERSIST;
1069910703
this.scale = this.transform.scale;
@@ -10791,7 +10795,6 @@ var Phaser;
1079110795
Sprite.prototype.postUpdate = function () {
1079210796
this.animations.update();
1079310797
this.checkBounds();
10794-
this.transform.centerOn(this.body.aabb.pos.x, this.body.aabb.pos.y);
1079510798
if(this.modified == true && this.transform.scale.equals(1) && this.transform.skew.equals(0) && this.transform.rotation == 0 && this.transform.rotationOffset == 0 && this.texture.flippedX == false && this.texture.flippedY == false) {
1079610799
this.modified = false;
1079710800
}
@@ -11940,10 +11943,18 @@ var Phaser;
1194011943
out.push(new Phaser.Point(sprite.x, sprite.y + sprite.height));
1194111944
return out;
1194211945
};
11943-
SpriteUtils.overlapsXY = function overlapsXY(sprite, x, y) {
11944-
if(sprite.transform.rotation == 0) {
11945-
return Phaser.RectangleUtils.contains(sprite.worldView, x, y);
11946+
SpriteUtils.overlapsPointer = function overlapsPointer(sprite, pointer) {
11947+
if(sprite.transform.scrollFactor.equals(1)) {
11948+
return Phaser.SpriteUtils.overlapsXY(sprite, pointer.worldX, pointer.worldY);
11949+
} else if(sprite.transform.scrollFactor.equals(0)) {
11950+
return Phaser.SpriteUtils.overlapsXY(sprite, pointer.x, pointer.y);
11951+
} else {
11952+
var px = pointer.worldX * sprite.transform.scrollFactor.x;
11953+
var py = pointer.worldY * sprite.transform.scrollFactor.y;
11954+
return Phaser.SpriteUtils.overlapsXY(sprite, px, py);
1194611955
}
11956+
};
11957+
SpriteUtils.overlapsXY = function overlapsXY(sprite, x, y) {
1194711958
if((x - sprite.transform.upperLeft.x) * (sprite.transform.upperRight.x - sprite.transform.upperLeft.x) + (y - sprite.transform.upperLeft.y) * (sprite.transform.upperRight.y - sprite.transform.upperLeft.y) < 0) {
1194811959
return false;
1194911960
}

build/phaser-debug.js

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5088,7 +5088,7 @@ var Phaser;
50885088
if(this.enabled == false || this._parent.visible == false) {
50895089
return false;
50905090
} else {
5091-
return Phaser.SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY);
5091+
return Phaser.SpriteUtils.overlapsPointer(this._parent, pointer);
50925092
}
50935093
};
50945094
InputHandler.prototype.update = function (pointer) {
@@ -5099,7 +5099,7 @@ var Phaser;
50995099
if(this.draggable && this._draggedPointerID == pointer.id) {
51005100
return this.updateDrag(pointer);
51015101
} else if(this._pointerData[pointer.id].isOver == true) {
5102-
if(Phaser.SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY)) {
5102+
if(Phaser.SpriteUtils.overlapsPointer(this._parent, pointer)) {
51035103
this._pointerData[pointer.id].x = pointer.x - this._parent.x;
51045104
this._pointerData[pointer.id].y = pointer.y - this._parent.y;
51055105
return true;
@@ -5152,7 +5152,7 @@ var Phaser;
51525152
this._pointerData[pointer.id].isUp = true;
51535153
this._pointerData[pointer.id].timeUp = this.game.time.now;
51545154
this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown;
5155-
if(Phaser.SpriteUtils.overlapsXY(this._parent, pointer.worldX, pointer.worldY)) {
5155+
if(Phaser.SpriteUtils.overlapsPointer(this._parent, pointer)) {
51565156
this._parent.events.onInputUp.dispatch(this._parent, pointer);
51575157
} else {
51585158
if(this.useHandCursor) {
@@ -6929,11 +6929,13 @@ var Phaser;
69296929
});
69306930
Animation.prototype.play = function (frameRate, loop) {
69316931
if (typeof frameRate === "undefined") { frameRate = null; }
6932-
if (typeof loop === "undefined") { loop = false; }
6932+
if (typeof loop === "undefined") { loop = null; }
69336933
if(frameRate !== null) {
69346934
this.delay = 1000 / frameRate;
69356935
}
6936-
this.looped = loop;
6936+
if(loop !== null) {
6937+
this.looped = loop;
6938+
}
69376939
this.isPlaying = true;
69386940
this.isFinished = false;
69396941
this._timeLastFrame = this.game.time.now;
@@ -7054,7 +7056,7 @@ var Phaser;
70547056
};
70557057
AnimationManager.prototype.play = function (name, frameRate, loop) {
70567058
if (typeof frameRate === "undefined") { frameRate = null; }
7057-
if (typeof loop === "undefined") { loop = false; }
7059+
if (typeof loop === "undefined") { loop = null; }
70587060
if(this._anims[name]) {
70597061
if(this.currentAnim == this._anims[name]) {
70607062
if(this.currentAnim.isPlaying == false) {
@@ -10693,7 +10695,6 @@ var Phaser;
1069310695
this.worldView = new Phaser.Rectangle(x, y, this.width, this.height);
1069410696
this.cameraView = new Phaser.Rectangle(x, y, this.width, this.height);
1069510697
this.transform.setCache();
10696-
this.body = new Phaser.Physics.Body(this, 0);
1069710698
this.outOfBounds = false;
1069810699
this.outOfBoundsAction = Phaser.Types.OUT_OF_BOUNDS_PERSIST;
1069910700
this.scale = this.transform.scale;
@@ -10791,7 +10792,6 @@ var Phaser;
1079110792
Sprite.prototype.postUpdate = function () {
1079210793
this.animations.update();
1079310794
this.checkBounds();
10794-
this.transform.centerOn(this.body.aabb.pos.x, this.body.aabb.pos.y);
1079510795
if(this.modified == true && this.transform.scale.equals(1) && this.transform.skew.equals(0) && this.transform.rotation == 0 && this.transform.rotationOffset == 0 && this.texture.flippedX == false && this.texture.flippedY == false) {
1079610796
this.modified = false;
1079710797
}
@@ -11940,10 +11940,18 @@ var Phaser;
1194011940
out.push(new Phaser.Point(sprite.x, sprite.y + sprite.height));
1194111941
return out;
1194211942
};
11943-
SpriteUtils.overlapsXY = function overlapsXY(sprite, x, y) {
11944-
if(sprite.transform.rotation == 0) {
11945-
return Phaser.RectangleUtils.contains(sprite.worldView, x, y);
11943+
SpriteUtils.overlapsPointer = function overlapsPointer(sprite, pointer) {
11944+
if(sprite.transform.scrollFactor.equals(1)) {
11945+
return Phaser.SpriteUtils.overlapsXY(sprite, pointer.worldX, pointer.worldY);
11946+
} else if(sprite.transform.scrollFactor.equals(0)) {
11947+
return Phaser.SpriteUtils.overlapsXY(sprite, pointer.x, pointer.y);
11948+
} else {
11949+
var px = pointer.worldX * sprite.transform.scrollFactor.x;
11950+
var py = pointer.worldY * sprite.transform.scrollFactor.y;
11951+
return Phaser.SpriteUtils.overlapsXY(sprite, px, py);
1194611952
}
11953+
};
11954+
SpriteUtils.overlapsXY = function overlapsXY(sprite, x, y) {
1194711955
if((x - sprite.transform.upperLeft.x) * (sprite.transform.upperRight.x - sprite.transform.upperLeft.x) + (y - sprite.transform.upperLeft.y) * (sprite.transform.upperRight.y - sprite.transform.upperLeft.y) < 0) {
1194811956
return false;
1194911957
}
@@ -14248,6 +14256,12 @@ var Phaser;
1424814256
this.onDestroyCallback = null;
1424914257
this.isBooted = false;
1425014258
this.isRunning = false;
14259+
if(window['PhaserGlobal'].singleInstance) {
14260+
if(Phaser.GAMES.length > 0) {
14261+
console.log('Phaser detected an instance of this game already running, aborting');
14262+
return;
14263+
}
14264+
}
1425114265
this.id = Phaser.GAMES.push(this) - 1;
1425214266
this.callbackContext = callbackContext;
1425314267
this.onPreloadCallback = preloadCallback;

0 commit comments

Comments
 (0)