Commit graph

3252 commits

Author SHA1 Message Date
photonstorm
aad499b025 Tidying up the code base for 2.4.7. 2016-04-14 12:43:10 +01:00
photonstorm
5221bfd5da You can now pass in your own Canvas element to Phaser and it will use that instead of creating one itself. To do so you must pass a Game Configuration object to Phaser when you instantiate it, and set the canvas property of the config object to be the DOM element you wish to use, i.e.: { canvas: document.getElementById('yourCanvas') } (thanks @Friksel #2311) 2016-04-14 11:57:10 +01:00
Lewis Pollard
719b4bb7f6 Alter BitmapText to use toString on text parameter in constructor
The BitmapText property accessor for the text property uses toString on the value passed in, meaning Numbers can be passed in as the text value with no problem. However, passing a Number into the constructor results in the following exception as it isn't implicitly converted to a string in a similar manner.

phaser.js:71890 TypeError: text.substr is not a function
    at Phaser.BitmapText.updateText (http://localhost/phaser/build/phaser.js:56283:21)
    at new Phaser.BitmapText (http://localhost/phaser/build/phaser.js:56034:10)
    at Phaser.GameObjectFactory.bitmapText (http://localhost/phaser/build/phaser.js:46318:26)
    at Object.Boot.create (http://localhost/phaser/:46:34)
    at Phaser.StateManager.loadComplete (http://localhost/phaser/build/phaser.js:29240:35)
    at Phaser.Loader.finishedLoading (http://localhost/phaser/build/phaser.js:71446:25)
    at Phaser.Loader.processLoadQueue (http://localhost/phaser/build/phaser.js:71403:18)
    at Phaser.Loader.asyncComplete (http://localhost/phaser/build/phaser.js:71476:14)
    at Phaser.Loader.xmlLoadComplete (http://localhost/phaser/build/phaser.js:72413:14)
    at .<anonymous> (http://localhost/phaser/build/phaser.js:72236:34)

This simply mimics the logic in the property accessor by running toString on the text value and using an empty string if null to allow Numbers to be passed into the constructor.
2016-04-13 15:24:29 +01:00
Richard Davey
358cc6b8d0 Merge pull request #2428 from EJanuszewski/radToDeg-typo
Fix typo in Math radToDeg description
2016-04-13 14:18:18 +01:00
photonstorm
f4277efc20 Alternative snooker-ball like collision test. 2016-04-11 16:43:17 +01:00
photonstorm
a193ad557e Fixed jsdocs #2418 2016-04-11 08:55:24 +01:00
photonstorm
7102a34706 Camera.flash is a new function that makes the camera 'flash' over the top of your game. It works by filling the game with the solid fill color specified, and then fading it away to alpha 0 over the duration given. This is great for things like hit effects. You can listen for the Camera.onflashComplete Signal.
Camera.fade is a new function that makes the camera fade to the color given, over the course of the duration specified. This is great for things like transitioning from one State to another. You can listen for the Camera.onFadeComplete Signal.

Camera.resetFX resets any active FX, such as a fade or flash and immediately clears it. Useful to calling after a fade in order to remove the fade from the Stage.

Phaser.Camera.ENABLE_FX is a const that controls if the Camera FX are available or not. It's `true` by default, but if you set it to `false` before boot then it won't create the Graphics object required to process the effects.
2016-04-09 04:05:07 +01:00
photonstorm
2ea94c83e6 Camera.shake is a new function that creates a camera shake effect. You can specify the intensity, duration and direction of the effect. You can also set if it should shake the camera out of bounds or not. 2016-04-09 02:57:16 +01:00
photonstorm
0b0a5d44cc Camera shake working and documented. 2016-04-09 02:49:18 +01:00
photonstorm
a916812db1 Camera shake support. 2016-04-09 02:01:45 +01:00
photonstorm
9e803fff7c Small fix. 2016-04-09 01:10:31 +01:00
photonstorm
dba84d5931 Camera has a new property: lerp. This is a Point object, that allows you to control the amount of horizontal and vertical smoothing to be applied to the camera when it tracks a Sprite. It works both with and without deadzones, and is turned off by default. Set it to low values such as 0.1 for really smooth motion tracking (thanks to @WombatTurkey for the idea of adding this) 2016-04-09 01:07:19 +01:00
photonstorm
b9fab96471 Improved docs. 2016-04-09 00:25:56 +01:00
photonstorm
3c4e63fda5 World.separateCircle is working with circle vs. circle bodies. 2016-04-08 03:37:49 +01:00
photonstorm
d009b8d769 Circle vs. Circle rebound code started. 2016-04-07 19:32:27 +01:00
photonstorm
cc5361dd6d World.separate has been optimized to cut down on the number of calls to intersect from 3 calls per Game Object collision check, to 2. So if you were colliding 50 sprites it will reduce the call count from 150 to 100 per frame. It also reduces the calls made to seperateX and seperateY by the same factor.
Two immovable bodies would never set their overlap data, even if an overlap only check was being made. As this is useful data to have this has been changed. Two immovable bodies will still never separate from each other, but they _will_ have their `overlapX` and `overlapY` properties calculated now.
2016-04-07 18:04:45 +01:00
photonstorm
50e126f59e * Body has two new properties: left and top. These are the same as Body.x and Body.y but allow you to pass the Body to geometry level functions such as Circle.contains.
* Body.setCircle allows you to define a Body as using a circle to collide with instead of a rectangle. You can set the radius of the collision circle and an offset.
* Body.render now renders both circle and rectangle body shapes to the Debug canvas.
* World.intersects has been updated to support both circle and rectangle body shapes, and supports quick-paths for circle vs. circle and rect vs. rect checks.
* World.circleBodyIntersects is a new method that checks for intersection between a Body that has been defined as a circle, and a normal rectangle based Body. This is used internally by World.intersects, but exposed for direct calls as well.
2016-04-07 17:01:16 +01:00
photonstorm
b162ca4d51 Improved Math.clamp and docs. 2016-04-07 16:14:44 +01:00
photonstorm
952b5c04ea The start of Arcade Physics circle bodies. 2016-04-07 14:32:53 +01:00
photonstorm
b9f62e77e6 You can now pass a TilemapLayer as a Texture to a TileSprite. A limitation of this is that if you pass it to a TileSprite it will make a fill pattern from the TilemapLayer at that instant it's passed, and it won't keep track of the layer in future should it update (thanks @jdnichollsc #1989) 2016-04-07 03:45:21 +01:00
photonstorm
e4a505d4b6 Lots of new Signals documentation. 2016-04-07 02:44:29 +01:00
photonstorm
e5ceb7e9bc P2.World.setBounds has been re-written completely. If the World is resized it no longer removes the P2 body instances and re-creates them. Instead it checks to see which walls are required and then just moves the position of the shapes instead, or updates them, or creates or destroys them as required. This is far more efficnent, especially in a game which see's a lot of world bounds changes (i.e. resizes responsively in browser) 2016-04-07 01:56:42 +01:00
photonstorm
5c261821fe P2.World.updateBoundsCollisionGroup didn't set the _boundsOwnGroup private var, meaning the World.setBounds method wasn't able to restore previously set collision masks automatically (thanks @jmp909 #2183) 2016-04-07 01:25:52 +01:00
photonstorm
4d5a037ae5 P2.World.updateBoundsCollisionGroup wouldn't use the boundsCollisionGroup mask if you passed true as the argument, only if it was left undefined. 2016-04-07 01:18:19 +01:00
photonstorm
58af40ca92 Added a bit more info to the SoundManager docs re: #2373 2016-04-07 01:07:19 +01:00
photonstorm
787111c12c A Game Object with fixedToCamera = true that was then set for Input, and enabled for dragging from its center (input.enableDrag(true)) would throw an error upon being dragged (thanks @solusipse #2367) 2016-04-07 00:44:53 +01:00
photonstorm
fc7b5c79e3 Graphics objects can now have a Physics Body directly attached to them, where-as before it would throw an error due to a lack of anchor property (thanks @NLilley #2400) 2016-04-07 00:14:41 +01:00
photonstorm
0945083a4b Removed further mentions of RenderTexture re: TileSprite. 2016-04-06 23:58:34 +01:00
photonstorm
b3757ed862 jsdocs update #2384 2016-04-06 02:33:29 +01:00
photonstorm
896b32a28c SoundManager.muteOnPause is a new boolean that allows you to control if the Sound system gets muted automatically when a Phaser game pauses, such as when it loses focus. You may need to set this to false if you wish to control the audio system from outside of your Phaser game, i.e. from DOM buttons or similar (#2382) 2016-04-06 02:09:22 +01:00
photonstorm
61bc4a8dca Sound.play when using an AudioTag would ignore the muted state of the SoundManager and play regardless. It now checks the SoundManager.mute state on play, and sets the volume accorindingly (thanks @brianbunch #2139) 2016-04-06 01:41:54 +01:00
Richard Davey
8e74f4d06e Merge pull request #2187 from BdR76/patch-1
Bugfix, reuse emitter when parameter explode=false
2016-04-06 01:28:49 +01:00
Richard Davey
2f0231b3cd Merge pull request #2415 from jakewilson/dev
Fixed and added warnings.
2016-04-06 01:21:09 +01:00
photonstorm
988290631f When setting a global volume for the SoundManager it would previously incorrectly calculate the volumes of AudioTag based Sound objects that were not played at volume 1. The new approach uses Sound.updateGlobalVolume which adjusts the Sound volume to be a percentage of the global volume. So if the global volume is 0.5 and the Sound volume is 0.5, the Sound will play with an actual volume of 0.25 (thanks @VitaZheltyakov #2325) 2016-04-06 01:19:32 +01:00
Richard Davey
71056ccb69 Merge pull request #2371 from stoneman1/dev
Fixed video for future
2016-04-06 01:08:22 +01:00
photonstorm
4d69b13977 Passing a BitmapData to a TileSprite as a texture would fail if the BitmapData had not been previously added to the cache. It now uses the new frameData property (thanks @mzamateo @lucap86 #2380) 2016-04-06 00:44:55 +01:00
photonstorm
c33b53fa95 BitmapData has a new property frameData which is a Phaser.FrameData container instance. It contains a single Frame by default, matching the dimensions of the entire BitmapData, but can be populated with additional frames should you wish to create animations from dynamic BitmapData textures. 2016-04-06 00:43:21 +01:00
photonstorm
18c0b150b5 FrameData.destroy will nullify the local arrays used to contain Frame instances. 2016-04-06 00:43:09 +01:00
photonstorm
0c2ac47981 Camera.position would return the view rectangles centerX/Y coordinates, instead of view.x/y (which is what Camera.x/y returns), so it has been updated to return view.x/y instead (thanks @kamparR #2120) 2016-04-06 00:18:01 +01:00
photonstorm
ecbff44354 Group.getByName searches the Group for the first instance of a child with the name property matching the given argument. Should more than one child have the same name only the first instance is returned. 2016-04-05 23:59:05 +01:00
photonstorm
65f8f111c8 Game.forceSingleUpdate is now true by default. 2016-04-05 23:40:15 +01:00
photonstorm
b762e1dc55 Added jsdocs warning re: #2045 2016-04-05 23:28:02 +01:00
photonstorm
4c3a30a6f6 PluginManager.destroy is now called by Game.destroy. 2016-04-05 23:16:52 +01:00
photonstorm
6933b41e6f Arcade.Body's speed property was only set when the body moved, it now updates regardless (thanks @mark-henry #2417) 2016-04-05 23:06:57 +01:00
photonstorm
aee0212e11 Camera.follow now uses the Targets world property to seed the camera coordinates from, rather than its local position. This means Sprites that are members of offset Groups, or transformed display lists, should now be followed more accurately (thanks @rbozan #2106) 2016-04-05 23:04:31 +01:00
photonstorm
8ad7b25595 The Debug canvas now listens for the ScaleManager.onSizeChange signal and resizes itself accordingly when running under WebGL. This means if your game size changes the Debug canvas won't be clipped off (thanks @francisberesford #1919) 2016-04-05 21:52:11 +01:00
photonstorm
7b803135c8 Updated jsdocs for getBounds (#2406) 2016-04-05 21:13:04 +01:00
Jake Wilson
96a79cd91a Added warning if physics body is enabled on unknown physics system. 2016-04-05 11:23:17 -04:00
photonstorm
b3e6381a9e Tween.update wouldn't dispatch an onLoop signal for Tweens with just one child, such as those created via Tween.to with -1 as the repeat value (thanks @ForgeableSum #2407) 2016-04-05 01:11:50 +01:00
photonstorm
917d9c7060 TweenData.repeatTotal is a new property that keeps track of the total number of times the Tween should repeat. If TweenData.start is called, as a result of the Tween repeatCount being > 0 then the child tween resets its total before re-starting. 2016-04-05 01:06:05 +01:00
photonstorm
f9949166be Text that used fonts which had numbers in their names wouldn't be correctly rendered unless you explicitly set the font property after creation. You can now pass font names with numbers in them as the font style object correctly (thanks @And-0 #2390) 2016-04-04 23:20:04 +01:00
Jake Wilson
ca13a82acb Added Tileset name to tile size warning. 2016-04-04 18:10:53 -04:00
photonstorm
bc4b828b51 BitmapData.copy, and by extension draw, drawFull, drawGroup, etc, would incorrectly handle drawing a tinted Sprite if it was using a frame from a texture atlas (thanks @PhaserDebugger #2405) 2016-04-04 22:53:13 +01:00
photonstorm
f40cfbe2ae 2015 - 2016. 2016-04-04 22:16:16 +01:00
photonstorm
12f3bd6cc5 The Destroy component will now call TweenManager.removeFrom, removing any active tweens from the TweenManager upon the Game Objects destructions (thanks @PokemonAshLovesMyTurkeyAndILikeYouTwo #2408)
Tween.update will now return `false` (flagging the Tween for destruction) should the Tween.target property every become falsey. This can happen if the object the Tween was tracking is destroyed, nulled or generally removed..
2016-04-04 22:06:16 +01:00
photonstorm
d6942991bc Docs update (in light of browser extensions causing us grief) 2016-04-04 22:06:15 +01:00
Richard Davey
8e880eddee Merge pull request #2402 from jakewilson/dev
Added ability to kill a Game Object when it leaves camera bounds.
2016-04-04 21:52:30 +01:00
Richard Davey
4298b2caae Merge pull request #2368 from Weedshaker/patch-2
AudioBufferSourceNode - same issue as on play:
2016-04-04 21:48:20 +01:00
photonstorm
63b3b3e887 Negative lineSpacing in Text objects will no longer crop the bottom pixels off lines of text (thanks @gaelenh #2379 #2374) 2016-04-04 21:36:37 +01:00
Richard Davey
3c3ca5b515 Merge pull request #2394 from zeterain/patch-5
Check for sprite destruction in onInputDown event.
2016-04-04 21:29:59 +01:00
photonstorm
f9ff892510 Formatting. 2016-04-04 21:25:21 +01:00
Richard Davey
07adad9ae8 Merge pull request #2395 from sergey7c4/dev
Fixed issue #2317
2016-04-04 21:20:01 +01:00
Richard Davey
1528d54a38 Merge pull request #2397 from rblopes/remove-from-hash-issue
Ensure a parent container is a Group before removing from its hash.
2016-04-04 20:47:31 +01:00
Richard Davey
d3e8509f0e Merge pull request #2410 from slashman/limitWrappedTextToMaxLines
Add "maxLines" style attribute to Text object.
2016-04-04 20:44:35 +01:00
Richard Davey
04ed512612 Merge pull request #2383 from CptSelewin/patch-2
Fix tinting issue when loading textures
2016-04-04 17:15:18 +01:00
Richard Davey
4925080781 Merge pull request #2381 from englercj/dev
Fix typo in componentToHex
2016-04-04 17:09:56 +01:00
Richard Davey
3446733696 Merge pull request #2399 from thiagojobson/patch-1
Fixed links in documentation
2016-04-04 17:08:38 +01:00
Richard Davey
2c87d14ede Merge pull request #2412 from MannyC/keep_tiled_layer_encoding_synced
Remove encoding metadata from Tiled json if data has already had its …
2016-04-04 17:07:31 +01:00
MannyC
7178b7abf4 Remove encoding metadata from Tiled json if data has already had its encoding removed. 2016-04-03 23:33:38 +01:00
MannyC
b29a77f4a4 Detect if layer compression is used in a Tiled layer. Display warning and skip layer. 2016-04-03 23:17:41 +01:00
slash
fbdf8073ad Add "maxLines" style attribute to Text object, maximum number of lines
to be shown for wrapped text or 0 for no limit. (default).
2016-04-03 10:08:35 -05:00
Edward Januszewski
a9e4d956b3 Fix typo in Math radToDeg description 2016-03-29 21:14:55 +01:00
Jake Wilson
ae663f97aa Added ability to kill a Game Object when it leaves camera bounds. 2016-03-28 20:34:00 -04:00
thiagojobson
58817869dc Fixed links in documentation 2016-03-25 18:08:29 -03:00
Rafael Barbosa Lopes
dd51a1724e Ensure a parent container is a Group before removing from its hash. 2016-03-24 13:44:49 -03:00
sergey7c4
fef4c7b021 Fixed unwanted smoothing 2016-03-23 16:59:36 +05:00
zeterain
a948dab895 Check for sprite destruction in onInputDown event.
This sprite might have been destroyed during the onInputDown event. Check to see if it was.

Also, set the pointer's dirty flag before the altered if-block just in case the function returns.
2016-03-22 15:54:41 -06:00
CptSelewin
50a454b79e fixed tinting issue when loading textures 2016-03-11 10:06:15 +01:00
Chad Engler
a510761bf1 fix typo in componentToHex 2016-03-09 15:54:40 -08:00
Stoneman1
ee335fe466 Fixed backwards compatibility issue. 2016-03-02 13:28:44 +02:00
Stoneman1
5bdc1c05b4 MediaStream.stop() deprecated. Using MediaStreamTrack.stop() instead. 2016-03-02 12:34:28 +02:00
Stoneman1
4a29d5102d Fixes issue #2325 2016-03-02 11:57:41 +02:00
Silvan Strübi
1b1c4ef0f5 AudioBufferSourceNode - same issue as on play:
I was able to reproduce this rare occurrence. It gets triggered by me in some cases when leaving focus and then resuming the sound. Same as we have had it only play, see => https://github.com/photonstorm/phaser/issues/2351

Cheers
2016-03-02 10:06:01 +09:00
Richard Davey
b9f9058cf1 Merge pull request #2360 from ShimShamSam/patch-2
Added new format for polygon points
2016-03-02 01:03:20 +02:00
Richard Davey
0c48c2d6a8 * Added P2.Body.thrustLeft which will move the Body to the left by the speed given (thanks James Pryor)
* Added P2.Body.thrustRight which will move the Body to the right by the speed given (thanks James Pryor)
2016-03-01 22:31:58 +00:00
Samuel Hodge
6b85dbd6a9 Update Polygon.js 2016-02-28 16:00:29 -05:00
Samuel Hodge
a53676a924 Added new format for polygon points 2016-02-26 14:56:25 -05:00
photonstorm
ede6806e41 The default state of the internal property _boundDispatch in Phaser.Signal is now false, which allows for use of boundDispatches (thanks @alvinlao #2346) 2016-02-26 13:40:35 +00:00
photonstorm
08ce659447 Sound.position can no longer become negative, meaning calls to AudioContextNode.start with negative position offsets will no longer throw errors (thanks @Weedshaker #2351) 2016-02-26 13:36:19 +00:00
photonstorm
15d952171c SoundManager.destroy doesn't close the context if it's being stored in PhaserGlobal (thanks @brianbunch #2356) 2016-02-26 13:31:45 +00:00
photonstorm
cc3a07bada SoundManager.close now validates that context.close is a valid function before calling it (thanks @brianbunch #2355) 2016-02-26 13:29:35 +00:00
photonstorm
c04a2be36b Format updates. 2016-02-26 13:26:27 +00:00
Richard Davey
6ba5515995 Merge pull request #2357 from FilamentGames/dev
Patch for destructive getLocalBounds in PIXI.DisplayObjectContainer
2016-02-26 15:21:17 +02:00
Richard Davey
a8ae5a0024 Merge pull request #2353 from fillmoreb/patch-1
Fix for world.centerX and world.centerY with negative bounds origin.
2016-02-26 15:20:05 +02:00
Richard Davey
e21ec2f0d6 Merge pull request #2349 from stoneman1/dev
Fixed issue with IE crashing on this.context.close() in SoundManager.…
2016-02-26 15:17:28 +02:00
Alex Stone
db7c417baf Reset worldTransforms of children after computing local bounds. 2016-02-25 20:37:09 -06:00
fillmoreb
b1c74e694e Update World.js
Phaser.World.centerX and Phaser.World.centerY only worked if the bounds had an origin of 0,0.  This change takes into account the actual origin.
2016-02-25 11:58:22 -07:00
Stoneman1
62f0a52544 Fixed issue with IE crashing on this.context.close() in SoundManager.js (There was no check if context exists) 2016-02-24 13:08:37 +02:00
photonstorm
ba5981a03f Removed a console.log from the TilingSprite generator. 2016-02-19 14:46:55 +00:00
Stoneman1
4d587d3e40 Fixed issue with not removing mouseoutglobal eventlistener 2016-02-19 15:15:31 +02:00
photonstorm
ad6f0557f7 Preparing for 2.4.7 development. 2016-02-18 15:06:43 +00:00
photonstorm
47123c192d 2.4.6 Build files + docs + TS Docs. 2016-02-18 14:41:53 +00:00
photonstorm
866994743b URI + ? fix. 2016-02-18 14:34:20 +00:00
photonstorm
0b5a4391f1 StateManager.destroy now sets clearCache and clearWorld internally before clearing the current state, as otherwise they would have been left untouched, such as from Game.destroy (thanks @i-dimitrov #2138) 2016-02-18 13:10:54 +00:00
Richard Davey
6cf8bc75ba Merge pull request #2328 from taylankasap/dev
Added RandomDataGenerator.sign (returns -1 or +1)
2016-02-18 15:03:51 +02:00
photonstorm
17071b578c BaseTexture.destroy wasn't correctly removing the texture from the BaseTextureCache if it was a cached CanvasPool entry (such as Text objects use), causing drawImage errors in Canvas mode, and just blank textures in WebGL (thanks @civet #2339) 2016-02-18 12:59:40 +00:00
photonstorm
46cc05a377 Groups now check for child.parent before calling removeFromHash (thanks @spayton #2323 #2338) 2016-02-18 12:29:01 +00:00
Richard Davey
8aefd0fe9b Preparing for 2.4.6 development. 2016-02-17 16:28:27 +00:00
photonstorm
daea5f53ff Fixed Edge device check. 2016-02-17 13:37:32 +00:00
photonstorm
34c484367c Phaser 2.4.5 Build files. 2016-02-17 13:27:09 +00:00
Richard Davey
e6c508edcd Color.updateColor would pass color.a to the getColor32 method without first putting the value into the range 0 - 255 (thanks @mainpsyhos #2327) 2016-02-17 03:50:06 +00:00
Richard Davey
f6d273c4fc DisplayObject._generateCachedSprite (which is called from updateCache or when cacheAsBitmap is enabled) would bitwise | 1 the bounds width and height. This would often lead to incorrect rounding (heights of 4 would become 5, while heights of 5 would remain 5). This has now been removed and the width and height are passed through Mail.ceil and then checked to make sure they aren't less than 1 pixel in either direction (thanks @alesdotio #2078) 2016-02-17 03:40:04 +00:00
Richard Davey
b629539176 SpriteBatch incorrectly applied the PIXI SpriteBatch prototype over the top of Phaser.Group meaning that Sprites with animations wouldn't render correctly (thanks @qdrj #1951) 2016-02-17 03:23:56 +00:00
Richard Davey
0c52b9316a Text with lineSpacing set wouldn't apply the lineSpacing to the final line of text in the Text string, or to text with just single lines. This could lead to incorrect height calculations for further layout and unwanted padding at the bottom of Text objects (thanks @Lopdo #2137) 2016-02-17 03:14:51 +00:00
Richard Davey
15411f1e56 Tween.onLoop would be fired when a Tween repeated and Tween.onRepeat would be fired when a Tween looped. These are now reversed to fire correctly (thanks @vladkens #2024) 2016-02-17 02:57:45 +00:00
Richard Davey
071d9cffd0 Graphics.generateTexture has a new argument padding which allows you to add extra spacing onto the generated texture. This is useful for small Graphics objects where you find a few pixels getting sliced off the edges due to rounding issues (#1933) 2016-02-17 02:31:29 +00:00
Richard Davey
74fd042749 If the Mouse was over a Sprite and you then clicked it, it would dispatch another Over event. This is now surpressed if the Over event has already been dispatched previously (thanks @McFarts #2133)
InputHandler.pointerOver could fail to return anything in some instances, now always returns a boolean.
2016-02-17 02:07:07 +00:00
Richard Davey
83a35e41d6 ctrl + click is now only considered a right-click if event.buttons = 1, this should allow you to use ctrl as a key modifier on Windows (and any device with a multi-button mouse attached) and still use ctrl + click on OS X / trackpads for a right-click (thanks @yuvalsv #2167) 2016-02-17 01:46:55 +00:00
Richard Davey
1932515f56 Fixed a really nasty bug in Chrome OS X where a ctrl + click (i.e. simulated right-click) on a trackpad would lock up the Pointer leftButton, causing future clicks to fail. This is now handled by way of a mouseout listener on the window object, sadly the only way to force a mouseup in Chrome (thanks @KyleU #2286) 2016-02-17 01:26:35 +00:00
photonstorm
4426c712ff jshint fix. 2016-02-12 17:29:30 +00:00
photonstorm
6ad22bc098 Phaser 2.4.5-RC2 with fresh docs and build files. 2016-02-12 16:00:36 +00:00
photonstorm
59ff0b0a57 Docs fix. 2016-02-12 14:49:37 +00:00
Richard Davey
989d53ecba Undo #1993 2016-02-09 14:01:04 +00:00
Richard Davey
92479eb03f * Device.safariVersion now holds the major version of the Safari browser.
* Device.edge is a boolean that is set if running under the Microsoft Edge browser.
* Device.dolby is a boolean that is set if the browser can play EC-3 Dolby Digital Plus files
* The Loader and SoundManager can now play Dolby Digital Plus files on supported devices.
2016-02-09 13:17:14 +00:00
Richard Davey
332fb6fe68 Fixed window global check. 2016-02-09 11:41:24 +00:00
Richard Davey
30b563085b The z property assigned to children of a Group now starts from zero instead of 1, this is an internal change mostly but if you relied on the z property for some reason then please be aware of this (thanks pantoninho) 2016-02-09 11:31:46 +00:00
Richard Davey
eff10cec71 Moved the width / height floor into the ScaleManager (#2329) 2016-02-08 23:09:16 +00:00
Taylan Kasap
1310daa9af Added RandomDataGenerator.sign (returns -1 or +1) 2016-02-07 14:25:19 +02:00
Chad Engler
5b7130d4d6 fix one more place where resolution wasn't taken into account 2016-02-06 17:05:44 -08:00
Chad Engler
7457cc67f2 Fix #2320: properly size filter texture and viewport 2016-02-06 11:30:31 -08:00
Richard Davey
5801f1aa15 jshint fixes. 2016-02-04 23:39:58 +00:00
Richard Davey
818c64291a SinglePad.onDownCallback has been moved to the end of the method, so that DeviceButton.start is now called before the callback fires, meaning if you check the status of the button in the onDownCallback it will now be fully activated (thanks @suicidepills #2159) 2016-02-04 22:46:18 +00:00
photonstorm
829b1e7ad1 Events.onDragUpdate has a new 6th property fromStart which is a boolean. You can determine if the event was the result of the start of a drag movement or not by polling it (#2155) 2016-02-04 17:00:30 +00:00
photonstorm
882c8b8d40 InputHandler.consumePointerEvent has been removed, as it was never used internally anyway, so was misleading (thanks @GregoryAveryWeir #2227) 2016-02-04 16:46:35 +00:00
Richard Davey
1ac287f9d3 Merge pull request #1993 from nickryall/retina-fullscreen
Fix for fullscreen retina ( Desktop )
2016-02-04 18:31:50 +02:00
photonstorm
9787474c6e Camera.checkBounds now takes the scale of the Camera into account (thanks @ForGorNorPor #2263) 2016-02-04 16:26:18 +00:00
photonstorm
a7c360425f Tidying up code and docs. 2016-02-04 16:23:40 +00:00
Richard Davey
a8b04c4bf1 Merge pull request #2171 from mattrick16/dev
Add method to angle Display Objects relative to world
2016-02-04 18:21:14 +02:00
Richard Davey
2a948832fc Merge pull request #1842 from hightopo/fix-mask-filter-bug
Fix mask combine filter bug
2016-02-04 18:07:39 +02:00
photonstorm
af4c938299 Docs update (#1967) 2016-02-04 16:05:45 +00:00
photonstorm
5bcfa08af6 Text.useAdvancedWrap allows you to swap between the Basic and the Advanced word wrapping functions. In Advanced it will wrap long-words and condense and trim excess white space (thanks @soldoutactivist #1811) 2016-02-04 16:00:21 +00:00
photonstorm
da8fa83730 Changed default back. 2016-02-04 16:00:16 +00:00
photonstorm
afc96352de PIXI.WebGLGraphics.stencilBufferLimit is a new integer that allows you to define how many points exist in a Graphics object before Pixi swaps to using the Stencil Buffer to render it. The default is now 64 (originally 6). This fixes issues with things like Quadratic curves not rendering as masks in WebGL. 2016-02-04 14:52:35 +00:00
photonstorm
c3c2dd6067 Graphics.arc has a new argument segments that allows you to control how many segments are created when the arc is drawn. The default is 40. Use a higher number for more fidelity, i.e. if you find that reversed arcs are not joining up fully (#2064) 2016-02-04 13:49:55 +00:00
photonstorm
8076f64656 We have replaced the PolyK Triangulation calls within Pixi with EarCut 2.0.8. This allows for faster polygon triangulation, and also deals with more complex polygons that PolyK would crash on. 2016-02-04 13:23:01 +00:00
Rafael Barbosa Lopes
a267e81b26 Doc: Loader.enableParallel is Boolean. 2016-02-04 10:06:12 -02:00
Richard Davey
2cd76b7617 Docs update (#2166) 2016-02-04 00:13:32 +00:00
Richard Davey
33604901c4 TilingSprite would ignore the renderable property, and render it regardless. Now it skips render if renderable is false (thanks @Green92 #2214) 2016-02-04 00:09:30 +00:00
Richard Davey
4e7fad353e Loader.audiosprite is renamed to Loader.audioSprite (the old one still works for legacy reasons) (thanks @epaezrubio #2145) 2016-02-03 23:53:50 +00:00
Richard Davey
ecb68c2fca JSDocs update. 2016-02-03 23:53:09 +00:00
Richard Davey
0610ddd15f SoundManager.setTouchLock is no longer set if SoundManager.noAudio is true, or if the PhaserGlobal setting disableAudio is true (thanks @bcjordan #2206) 2016-02-03 23:23:36 +00:00
Richard Davey
a4c5fb9660 BitmapData.drawGroup can now handle drawing Emitters and BitmapText objects that are part of the Group. 2016-02-03 23:08:54 +00:00
Richard Davey
3b686f906f Moved the Sound.disconnect after the Sound.stop call in Web Audio (#2280) 2016-02-03 22:22:22 +00:00
Richard Davey
a0eb44ec09 Group.add and Group.addAt would forget to remove the child from the hash of its previous Group if it had a physics body enabled, causing unbounded hash increase (thanks @strawlion @McIntozh #2232) 2016-02-03 21:51:01 +00:00
Richard Davey
10209dc8f5 GameObject.revive used to add the health amount given to the Game Object (via heal) instead of setting it as the new health amount. It now calls setHealth instead, giving it the exact amount (thanks @netgfx #2231)
GameObject.revive will now set the health amount to 100 instead of 1, bringing it in-line with the `maxHealth` default value.
2016-02-03 21:44:06 +00:00
Richard Davey
a1c3050bf7 Tilemap.getObjectIndex has been removed as it didn't work correctly in most cases, and it's easier to just scan the Tilemap.objects object directly anyway (#2242) 2016-02-03 21:35:35 +00:00
Richard Davey
3bc8dcd154 The width and height values passed to the Game constructor are now passed through Math.floor first. This ensures you can never create a game width non-integer dimensions, which has all kinds of implications - from browser performance to breaking things like TileSprite rendering (#2262) 2016-02-03 19:11:26 +00:00
Richard Davey
2d2101adcb Both transparent and antialias were ignored if set to false in a Game configuration object, as the parseConfig method didn't check for falsey values (thanks @amadeus #2302) 2016-02-03 12:28:12 +00:00
Richard Davey
e04504f481 Tweens with 'yoyo' set on them couldn't be re-used again because the start and end properties were left in a reversed state. When a yoyo tween ends it now restores the reversed values (thanks @SBCGames #2307) 2016-02-03 12:24:22 +00:00
Richard Davey
1883cfc83b BaseTexture.destroy no longer checks for the _pixiId property on the canvas before removing it from the CanvasPool, meaning it's now destroying a lot more canvas elements than it was in the past! 2016-02-03 11:41:37 +00:00
Richard Davey
034428e92c Sprite (and all Game Objects) have a new argument in their destroy method: destroyTexture. This boolean (which is false by default) controls if the BaseTexture of the Game Object should be destroyed or not. This is extremely useful in situations where you've got a lot of dynamic assets you no longer need, such as textures created from BitmapDatas. You must set the destroyTexture argument yourself. This can be done in a custom Game Object destroy method or as part of your state shutdown (#2261) 2016-02-03 11:41:37 +00:00
Richard Davey
8043d29aa6 BitmapData would always create a private _swapCanvas which was a clone of its main canvas used for advanced movement operations. This no longer happens. The swap canvas is created only as needed, by those functions that use it (specifically moveH and moveV), meaning a BitmapData will now use half the amount of memory it used to, and you'll have half the amount of canvas DOM elements created (unless you make heavy use of the move functions). 2016-02-03 11:41:37 +00:00
Richard Davey
297244a822 Merge pull request #2161 from puzzud/master
SinglePad.callbackContext is now set through addCallbacks method.
2016-02-03 01:38:20 +02:00
Richard Davey
75d6bbb251 Updated defs and improved jsdocs for #2277 2016-02-02 23:37:08 +00:00
Richard Davey
d4edbe6619 Merge pull request #2277 from slashman/exposeWrappedLinesOnText
Alow precalculating the results of text wrapping.
2016-02-03 01:32:49 +02:00
Richard Davey
ded2f72768 Docs update #2243 2016-02-02 23:04:54 +00:00
Richard Davey
88f1ea95d2 Fixed BitmapText.cleanText so it works properly with new-lines within the text.
BitmapText would crash if it tried to render a character that didn't exist in the font set. Any character that doesn't exist in the font set now renders a space character instead.

BitmapText would load and parse the kerning data from the font, but would never use it when rendering. The kerning values are now applied on rendering as well (thanks @veu #2165)
2016-02-02 22:54:01 +00:00
photonstorm
8cf96a2f78 Docs fix #2271 2016-02-02 16:28:33 +00:00
photonstorm
ddbc72cbf4 Docs update #2265 2016-02-02 16:26:20 +00:00
photonstorm
11fa0c2690 Docs fix #2310 2016-02-02 16:19:09 +00:00
Richard Davey
4e3c764207 Merge pull request #2248 from 06wj/dev
Fixed ScaleManager EXACT_FIT not working
2016-02-02 17:42:54 +02:00
Richard Davey
8e6b88cda8 Merge pull request #2172 from jonjanisch/dev
Inconsistency in arcade.collide processCallback param order #667
2016-02-02 17:39:46 +02:00
Richard Davey
92dae1951b Merge pull request #2204 from tfelix/master
Asset packs are now correctly spliced between waiting files.
2016-02-02 16:58:33 +02:00
Richard Davey
425ee09047 Sound.onEndedHandler now sets Sound.currentTime to be Sound.durationMS (thanks @stoneman1 #2237) 2016-02-02 01:08:45 +00:00
Richard Davey
e7820dbe85 SoundManager.destroy now calls AudioContext.close (thanks @stoneman1 #2237) 2016-02-02 01:08:35 +00:00
Richard Davey
acebd74c26 Merge pull request #2241 from s4wny/patch-1
Fixed misleading error message
2016-02-02 02:33:57 +02:00
Richard Davey
bceca55c8f Merge pull request #2222 from FracturedShader/patch-2
Update BitmapData.shiftHSL, limitValue -> clamp
2016-02-02 02:31:54 +02:00
Richard Davey
5893224f10 The Style object passed in to Phaser.Text is now cloned instead of referenced. This means you can adjust single Text instances without invaliding other Text objects using the same style object (thanks @asyncanup #2267) 2016-02-02 00:29:46 +00:00
Richard Davey
34aff350eb The Video game object used an anonymous bound function for both the 'ended' and 'playing' event listeners, meaning that they were never removed properly (thanks @ramalhovfc #2303) 2016-02-02 00:18:50 +00:00
Richard Davey
6a50e18bf0 Merge pull request #1610 from yigitozdemir/dev
On Ceiling Method Addition
2016-02-01 21:14:12 +02:00
Richard Davey
99b3ea4a1f Merge pull request #2285 from allenevans/bug-clearGLTextures
Fix cache reference bug in web GL context restoration.
2016-02-01 19:22:37 +02:00
Richard Davey
b3da35163a Merge pull request #2151 from jaminscript/logic-fix
Remove unnecessary variable
2016-02-01 19:16:02 +02:00
Richard Davey
1d2d707b32 Merge pull request #2168 from nlotz/dev
fix typos in API docs
2016-02-01 19:01:58 +02:00
Richard Davey
6a26b06e28 Merge pull request #2199 from javivi91/FixTweenOnStart
Fix tween hasStarted parameter
2016-02-01 18:58:33 +02:00
Richard Davey
e551254b52 Merge pull request #2209 from FracturedShader/patch-1
Update BitmapData.setHSL to accept 0
2016-02-01 18:57:29 +02:00
Richard Davey
fc5530657d Merge pull request #2236 from milkey-mouse/fix-datauri-error
Fix issue #2234: Errors in getAudioURL() and getVideoURL() when using blob: or data: URIs
2016-02-01 18:51:56 +02:00
Richard Davey
806f93bc84 Merge pull request #2251 from milkey-mouse/fix-404-success
Fix issue #2250: Loader.binary returns success on 404
2016-02-01 18:45:54 +02:00
Richard Davey
0b8fc6e7d0 Merge pull request #2284 from RetrocadeNet/tweenManagerStubMethodToPreventError
Added removeAll to TweenManager's stub so call from stageManager does…
2016-02-01 18:43:42 +02:00
Richard Davey
76e2dc66ee Fixed docs (#2216) 2016-02-01 16:42:03 +00:00
Richard Davey
6bfd94e07c Merge pull request #2244 from ttencate/dev
Rename inner loop variable from 'i' to 'j'
2016-02-01 18:34:03 +02:00
Richard Davey
37d9b3402d Merge pull request #2226 from milkey-mouse/fix-retrofont-smoothed
Change RetroFont.smoothed from string to boolean
2016-02-01 18:32:22 +02:00
Richard Davey
13cf12d08a Merge pull request #2297 from nexiuhm/master
loadUpdate() now gets a last update when loading is complete.
2016-02-01 18:20:19 +02:00
Richard Davey
8795792047 Merge pull request #2289 from staff0rd/grammar_fix
fixed grammar on update() comment
2016-02-01 18:18:05 +02:00
Richard Davey
6620890099 Merge pull request #2291 from zeterain/patch-2
Update documentation in ScaleManager.js
2016-02-01 18:17:17 +02:00
Richard Davey
25dae75af1 Merge pull request #2298 from Weedshaker/patch-1
Update FrameData.js
2016-02-01 18:16:43 +02:00
Richard Davey
d6dcd0e5c6 Merge pull request #2301 from samme/issue-2299
Stop only the named animation if `name` is passed
2016-02-01 18:12:45 +02:00
Richard Davey
dd02f0b482 Merge pull request #2304 from cy-ryo-fujiwara/bug-map-hastile
Fixed a bug of tilemap.hasTile
2016-02-01 18:10:09 +02:00
samme
ec4c2d4773 Emitter methods return the Emitter instance
to better allow chaining:

- at
- explode
- flow
- kill
- revive
- setAlpha
- setRotation
- setScale
- setSize
- setXSpeed
- setYSpeed
- start
2016-01-20 13:34:08 -08:00
Ryo Fujiwara
b75d6c4a92 Fixed a bug of map.hasTile 2016-01-19 12:40:02 +09:00
samme
e9a4f6d3f7 Stop only the named animation if name is passed
Fixes #2299
2016-01-17 12:34:57 -08:00
nexiuhm
bc00f924a7 Added a check to avoid calling the function when doing dynamic loading after state is created. 2016-01-14 17:23:52 +01:00
nexiuhm
1c65c48341 onLoadUpdate now recives the last ( 100 ) update. 2016-01-14 17:09:41 +01:00
Silvan Strübi
b30dd225c3 Update FrameData.js
"Uncaught TypeError: Cannot read property 'index' of undefined"

The above error occurred, after updating https://github.com/englercj/phaser-tiled to be compatible with Phaser version 2.4.4. The above change fixed this issue!
2016-01-14 14:41:26 +09:00
photonstorm
d7b6d4e784 jshint fix (missing semi-colon) 2016-01-13 16:15:46 +00:00
photonstorm
70437a0bdd Clean text automatically on creation. 2016-01-13 15:18:42 +00:00
photonstorm
6a868cba5e BitmapText.cleanText is a new method that will scan the given text and either remove or replace all characters that are not present in the font data. It is called automatically by BitmapText.updateText. 2016-01-13 15:15:51 +00:00
photonstorm
36d9c8d673 Changed from a space to '' and added 'replace' argument. 2016-01-13 15:14:14 +00:00
zeterain
9edec8da57 Update documentation in ScaleManager.js
Documentation for ScaleManager.compatibility mis-spelled the supportsFullScreen property.
2016-01-11 09:02:07 -07:00
Stafford Williams
16517cc773 fixed grammar on update() comment 2016-01-08 20:29:58 +11:00
Allen Evans
1a02d2da6c Fix cache reference bug in web GL context restoration. 2016-01-06 07:35:53 +00:00
Maurycy Zarzycki
fe86dab721 Added removeAll to TweenManager's stub so call from stageManager doesn't throw errors 2016-01-05 21:03:04 +01:00
slash
5cc6b5962b Add missing assignations required for wrapping calculations to work
correctly
2016-01-03 16:54:27 -05:00
slash
ef7c2c6275 Alow precalculating the results of text wrapping. This may be useful for
example if the developer wants to control pagination, in which case
he may know in advance the total number of lines the text will wrap to,
and then set it on batches.
2016-01-03 16:33:33 -05:00
Milkey Mouse
d1c4297802 Fix #2250
changes by @mhstar89
2015-12-09 19:54:48 -08:00
墨水
ba0683b4d0 Fixed ScaleManager EXACT_FIT not working 2015-12-09 09:55:40 +08:00
Thomas ten Cate
cfd924d931 Rename inner loop variable from 'i' to 'j'
Fixes #2233
2015-12-03 16:22:34 +01:00
photonstorm
172f972d8c Pausing a Sound that used a Marker for playback would fire the onMarkerComplete signal by mistake as well as stop the fadeTween. This Signal is now only dispatched if Sound.stop is called and the Sound isn't paused (thanks Corin) 2015-12-02 12:41:20 +00:00
Sony?
70c64eb8fa Fixed misleading error message
Shouldn't it be `tileset` instead of `key`?

We can't find any entry with the name `tileset` in the JSON file. The `key` hasn't anything to do with the JSON file, that is our tilesset image we loaded with thaser.
2015-12-02 10:05:52 +01:00
Milkey Mouse
0c2e8d8ce9 Implement jackfreak's changes (Issue #2234) 2015-11-30 14:07:22 -08:00
Robert Plante
8f1450ecca Update to BitmapData.setHSL to follow conventions 2015-11-23 12:46:12 -05:00
Milkey Mouse
19845eb691 Changed RetroFont.smoothed from string to boolean 2015-11-22 21:37:28 -08:00
photonstorm
83948f5882 Updated Filter docs (#2223) 2015-11-20 17:01:05 +00:00
Robert Plante
45195848bc Update BitmapData.shiftHSL, limitValue -> clamp
`math.limitValue` does not exist so it was changed to `math.clamp` which provides the desired functionality.
2015-11-17 15:34:42 -05:00
Robert Plante
e236cac1e6 Update setHSL
Checking `if (h)` yields `false` when `h = 0`, but 0 is an acceptable value here. Had to decide between caching HSL verification and doing `typeof` 3x/pixel and opted for the temporary variables.
2015-11-17 14:15:26 -05:00
photonstorm
609b38c6e1 BitmapData.update causes a snowballing memory leak under WebGL due to a Context.getImageData call. BitmapData.clear used to call update automatically but no longer does. This resolves the issue of the Debug class causing excessive memory build-up in Chrome. Firefox and IE were unaffected (thanks @kingjerod #2208) 2015-11-17 14:07:56 +00:00
photonstorm
3d1306d440 jsdoc fix. 2015-11-17 14:07:48 +00:00
tfelix
734eba7f84 Asset packs are now correctly spliced between waiting files. 2015-11-15 02:48:05 +01:00
photonstorm
8b0224e7b4 TilemapParser accidentally redeclared i when parsing the ImageCollections which would cause an infinite loop (thanks DanHett) 2015-11-12 13:39:42 +00:00
Javier Alcantara
840b49b6cd Tween hasStarted parameter set to false when tween finishes 2015-11-11 18:39:05 +01:00
photonstorm
1c169ef571 Video jsdoc fixes. 2015-11-02 11:51:15 +00:00
BdR76
ff98bf6737 Bugfix, reuse emitter when parameter explode=false
There is a bug when calling emitter.start() consecutively with parameter explode=false. The bug will cummulatively add particles, so for example when quantity=10, the first call to .start() will emit 10 particles, then next 20, then 30 etc.

Also see forum post here
http://www.html5gamedevs.com/topic/3920-repeated-calls-to-emitterstart-spawns-increasing-number-of-particles/
2015-11-01 16:41:02 +01:00
Richard Davey
799efa3079 You can use the new const Phaser.PENDING_ATLAS as the texture key for any sprite. Doing this then sets the key to be the frame argument (the frame is set to zero). This allows you to create sprites using load.image during development, and then change them to use a Texture Atlas later in development by simply searching your code for 'PENDING_ATLAS' and swapping it to be the key of the atlas data. 2015-10-31 01:04:14 +00:00
Jonathan Janisch
24c85dbb35 Inconsistency in arcade.collide processCallback param order #667 2015-10-27 23:48:14 -04:00
mattrick
518c2f6ab7 Merge branch 'dev' of https://github.com/mattrick16/phaser into dev 2015-10-27 17:00:10 -07:00
mattrick
8843a4ad09 Add worldAngleToPointer 2015-10-27 16:55:23 -07:00
nlotz
da45d04a70 fix typos in API docs 2015-10-27 09:10:14 +01:00
puzzud
c31d8dc78a Reinstated fix for #1285, regarding setting Phaser.SinglePad.callbackContext in addCallbacks method. 2015-10-24 20:13:49 -04:00
puzzud
492fdc98eb Phaser.SinglePad.addCallbacks now sets member callbackContext to the first parameter, context. 2015-10-24 20:01:44 -04:00
Ben Abbott
1dadaf5590 Remove unnecessary variable
This commit removes an unnecessary variable which was defined, populated but never used.
2015-10-22 13:47:06 +13:00
Richard Davey
e6aa9f83c9 Typo fix. 2015-10-19 23:18:23 +01:00
photonstorm
efc69ff463 Buttons (or any Sprites) that don't have a texture, but have children, would incorrectly render the children under WebGL due to the baseTexture.skipRender property (thanks @puzzud #2141) 2015-10-16 16:44:51 +01:00
photonstorm
8a4a1528e4 Preparing for 2.4.5 dev. 2015-10-15 12:22:01 +01:00
photonstorm
d5f1b43a2d Added skipRender to FastSpriteBatch. 2015-10-15 11:42:53 +01:00
photonstorm
99751a5e8e BaseTexture.skipRender is a new boolean that can be set to skip the rendering phase in the WebGL Sprite Batch. You may want to do this if you have a parent Sprite with no visible texture (i.e. uses the internal __default texture) that has children that you do want to render, without causing a batch flush in the process. 2015-10-15 11:39:59 +01:00
photonstorm
79d6993f26 Fixed issue with Time.update not being properly set in IE9 / setTimeout environments. 2015-10-13 14:23:36 +01:00
photonstorm
d1233ad229 Phaser 2.4.4 RC1. 2015-10-13 14:10:55 +01:00
photonstorm
45d92d4217 ScaleMin and ScaleMax stopped working in Phaser 2.3.0 due to an incorrect transform callback scope (thanks @brianbunch #2132) 2015-10-13 13:32:55 +01:00
photonstorm
bd53b61ffd Sprite.getBounds would report an inaccurate value if the sprite was negatively scaled (causing things like generateTexture to be cut off) (thanks @DavidAPC #2108) 2015-10-13 13:02:49 +01:00
photonstorm
84373dc478 Removed use of the tilePosition property in the Phaser.Rope class as it isn't implemented and caused calls to Rope.reset to crash (thanks @spayton #2135) 2015-10-13 12:20:02 +01:00
photonstorm
8e4dc1f078 ScaleManager.getParentBounds now checks if parentNode has an offsetParent before calling getBoundingClientRect on it (thanks @McFarts #2134) 2015-10-13 12:04:57 +01:00