2013-10-03 00:21:08 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
2014-11-15 20:01:46 +00:00
< title > Phaser Source: D:/wamp/www/phaser/src/system/Device.js< / title >
2013-10-03 00:21:08 +00:00
<!-- [if lt IE 9]>
< script src = "//html5shiv.googlecode.com/svn/trunk/html5.js" > < / script >
<![endif]-->
2014-11-15 20:01:46 +00:00
< link type = "text/css" rel = "stylesheet" href = "styles/default.css" >
2013-10-03 00:21:08 +00:00
< link type = "text/css" rel = "stylesheet" href = "styles/sunlight.default.css" >
< link type = "text/css" rel = "stylesheet" href = "styles/site.cerulean.css" >
< / head >
< body >
2014-11-25 00:23:44 +00:00
2013-10-03 00:21:08 +00:00
< div class = "container-fluid" >
< div class = "navbar navbar-fixed-top navbar-inverse" >
2014-11-25 00:23:44 +00:00
< div style = "position: absolute; width: 143px; height: 31px; right: 10px; top: 10px; z-index: 1050" > < a href = "http://phaser.io" > < img src = "img/phaser.png" border = "0" / > < / a > < / div >
2013-10-03 00:21:08 +00:00
< div class = "navbar-inner" >
2014-11-25 00:23:44 +00:00
< a class = "brand" href = "index.html" > Phaser API< / a >
2013-10-03 00:21:08 +00:00
< ul class = "nav" >
2014-11-25 00:23:44 +00:00
2013-10-03 00:21:08 +00:00
< li class = "dropdown" >
2013-10-03 01:38:35 +00:00
< a href = "namespaces.list.html" class = "dropdown-toggle" data-toggle = "dropdown" > Namespaces< b
2013-10-03 00:21:08 +00:00
class="caret">< / b > < / a >
< ul class = "dropdown-menu " >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-0" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.html" > Phaser< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-11-15 20:01:46 +00:00
< li class = "class-depth-0" >
< a href = "PIXI.html" > PIXI< / a >
< / li >
2013-10-03 00:21:08 +00:00
< / ul >
< / li >
< li class = "dropdown" >
< a href = "classes.list.html" class = "dropdown-toggle" data-toggle = "dropdown" > Classes< b
class="caret">< / b > < / a >
< ul class = "dropdown-menu " >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Animation.html" > Animation< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.AnimationManager.html" > AnimationManager< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.AnimationParser.html" > AnimationParser< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-29 14:39:02 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.ArrayList.html" > ArrayList< / a >
< / li >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.ArraySet.html" > ArraySet< / a >
< / li >
2014-11-15 20:01:46 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.ArrayUtils.html" > ArrayUtils< / a >
< / li >
2014-10-09 15:12:53 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.AudioSprite.html" > AudioSprite< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.BitmapData.html" > BitmapData< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.BitmapText.html" > BitmapText< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Button.html" > Button< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Cache.html" > Cache< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Camera.html" > Camera< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Canvas.html" > Canvas< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Circle.html" > Circle< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Color.html" > Color< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Device.html" > Device< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-11-15 20:01:46 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.DOM.html" > DOM< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Easing.html" > Easing< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-18 03:01:51 +00:00
< a href = "Phaser.Ellipse.html" > Ellipse< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Events.html" > Events< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.Filter.html" > Filter< / a >
< / li >
2014-09-09 14:36:56 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.FlexGrid.html" > FlexGrid< / a >
< / li >
< li class = "class-depth-1" >
< a href = "Phaser.FlexLayer.html" > FlexLayer< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Frame.html" > Frame< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.FrameData.html" > FrameData< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Game.html" > Game< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-21 15:37:26 +00:00
< a href = "Phaser.GameObjectCreator.html" > GameObjectCreator< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.GameObjectFactory.html" > GameObjectFactory< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-05 06:29:17 +00:00
< a href = "Phaser.Gamepad.html" > Gamepad< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-05 06:29:17 +00:00
< a href = "Phaser.GamepadButton.html" > GamepadButton< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Graphics.html" > Graphics< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Group.html" > Group< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-08 07:24:22 +00:00
< a href = "Phaser.Image.html" > Image< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Input.html" > Input< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.InputHandler.html" > InputHandler< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Key.html" > Key< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Keyboard.html" > Keyboard< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-05 06:29:17 +00:00
< a href = "Phaser.Line.html" > Line< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.LinkedList.html" > LinkedList< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Loader.html" > Loader< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.LoaderParser.html" > LoaderParser< / a >
2013-10-03 00:21:08 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Math.html" > Math< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Mouse.html" > Mouse< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.MSPointer.html" > MSPointer< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Net.html" > Net< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.Particle.html" > Particle< / a >
< / li >
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Particles.html" > Particles< / a >
< / li >
2014-10-09 15:12:53 +00:00
< li class = "class-depth-2" >
< a href = "Phaser.Particles.Arcade.html" > Arcade< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Particles.Arcade.Emitter.html" > Emitter< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Physics.html" > Physics< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-2" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Physics.Arcade.html" > Arcade< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.Arcade.Body.html" > Body< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-2" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.Ninja.html" > Ninja< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.Ninja.AABB.html" > AABB< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.Ninja.Body.html" > Body< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.Ninja.Circle.html" > Circle< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.Ninja.Tile.html" > Tile< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-2" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.html" > P2< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.Body.html" > Body< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.BodyDebug.html" > BodyDebug< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.CollisionGroup.html" > CollisionGroup< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.ContactMaterial.html" > ContactMaterial< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.DistanceConstraint.html" > DistanceConstraint< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-11 12:09:28 +00:00
< li class = "class-depth-3" >
< a href = "Phaser.Physics.P2.FixtureList.html" > FixtureList< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.GearConstraint.html" > GearConstraint< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.InversePointProxy.html" > InversePointProxy< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.LockConstraint.html" > LockConstraint< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.Material.html" > Material< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.PointProxy.html" > PointProxy< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.PrismaticConstraint.html" > PrismaticConstraint< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.RevoluteConstraint.html" > RevoluteConstraint< / a >
< / li >
2014-09-09 14:36:56 +00:00
< li class = "class-depth-3" >
< a href = "Phaser.Physics.P2.RotationalSpring.html" > RotationalSpring< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-3" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.Physics.P2.Spring.html" > Spring< / a >
2014-02-21 15:37:26 +00:00
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Plugin.html" > Plugin< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.PluginManager.html" > PluginManager< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Point.html" > Point< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Pointer.html" > Pointer< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-07 06:10:15 +00:00
< a href = "Phaser.Polygon.html" > Polygon< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.QuadTree.html" > QuadTree< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.RandomDataGenerator.html" > RandomDataGenerator< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Rectangle.html" > Rectangle< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.RenderTexture.html" > RenderTexture< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.RequestAnimationFrame.html" > RequestAnimationFrame< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.RetroFont.html" > RetroFont< / a >
< / li >
2014-09-09 14:36:56 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.Rope.html" > Rope< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-03-14 06:36:05 +00:00
< a href = "Phaser.ScaleManager.html" > ScaleManager< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Signal.html" > Signal< / a >
< / li >
2014-04-11 12:09:28 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.SignalBinding.html" > SignalBinding< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-05 06:29:17 +00:00
< a href = "Phaser.SinglePad.html" > SinglePad< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Sound.html" > Sound< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.SoundManager.html" > SoundManager< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Sprite.html" > Sprite< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-18 03:01:51 +00:00
< a href = "Phaser.SpriteBatch.html" > SpriteBatch< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Stage.html" > Stage< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.State.html" > State< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.StateManager.html" > StateManager< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.Text.html" > Text< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.Tile.html" > Tile< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.Tilemap.html" > Tilemap< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.TilemapLayer.html" > TilemapLayer< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.TilemapParser.html" > TilemapParser< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.Tileset.html" > Tileset< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-25 15:54:40 +00:00
< a href = "Phaser.TileSprite.html" > TileSprite< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Time.html" > Time< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-11-28 15:57:09 +00:00
< a href = "Phaser.Timer.html" > Timer< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2014-02-05 06:29:17 +00:00
< a href = "Phaser.TimerEvent.html" > TimerEvent< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.Touch.html" > Touch< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Tween.html" > Tween< / a >
< / li >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" >
< a href = "Phaser.TweenData.html" > TweenData< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.TweenManager.html" > TweenManager< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Utils.html" > Utils< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-2" >
2013-10-03 01:38:35 +00:00
< a href = "Phaser.Utils.Debug.html" > Debug< / a >
< / li >
2014-04-10 22:13:43 +00:00
< li class = "class-depth-1" >
2013-10-03 00:21:08 +00:00
< a href = "Phaser.World.html" > World< / a >
< / li >
2014-11-15 20:01:46 +00:00
< li class = "class-depth-1" >
< a href = "PIXI.AbstractFilter.html" > AbstractFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.AjaxRequest.html" > AjaxRequest< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.AlphaMaskFilter.html" > AlphaMaskFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.AsciiFilter.html" > AsciiFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.AssetLoader.html" > AssetLoader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.AtlasLoader.html" > AtlasLoader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.BaseTexture.html" > BaseTexture< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.BitmapFontLoader.html" > BitmapFontLoader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.BitmapText.html" > BitmapText< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.BlurFilter.html" > BlurFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.BlurXFilter.html" > BlurXFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.BlurYFilter.html" > BlurYFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.CanvasBuffer.html" > CanvasBuffer< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.CanvasGraphics.html" > CanvasGraphics< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.CanvasMaskManager.html" > CanvasMaskManager< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.CanvasRenderer.html" > CanvasRenderer< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.CanvasTinter.html" > CanvasTinter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Circle.html" > Circle< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.ColorMatrixFilter.html" > ColorMatrixFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.ColorStepFilter.html" > ColorStepFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.ComplexPrimitiveShader.html" > ComplexPrimitiveShader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.ConvolutionFilter.html" > ConvolutionFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.CrossHatchFilter.html" > CrossHatchFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.DisplacementFilter.html" > DisplacementFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.DisplayObject.html" > DisplayObject< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.DisplayObjectContainer.html" > DisplayObjectContainer< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.DotScreenFilter.html" > DotScreenFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Ellipse.html" > Ellipse< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Event.html" > Event< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.EventTarget.html" > EventTarget< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.FilterBlock.html" > FilterBlock< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.FilterTexture.html" > FilterTexture< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Graphics.html" > Graphics< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.GraphicsData.html" > GraphicsData< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.GrayFilter.html" > GrayFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.ImageLoader.html" > ImageLoader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.InteractionData.html" > InteractionData< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.InteractionManager.html" > InteractionManager< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.InvertFilter.html" > InvertFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.JsonLoader.html" > JsonLoader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Matrix.html" > Matrix< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.MovieClip.html" > MovieClip< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.NoiseFilter.html" > NoiseFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.NormalMapFilter.html" > NormalMapFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.PixelateFilter.html" > PixelateFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.PIXI.html" > PIXI< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.PixiFastShader.html" > PixiFastShader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.PixiShader.html" > PixiShader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Point.html" > Point< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Polygon.html" > Polygon< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.PolyK.html" > PolyK< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.PrimitiveShader.html" > PrimitiveShader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Rectangle.html" > Rectangle< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.RenderTexture.html" > RenderTexture< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.RGBSplitFilter.html" > RGBSplitFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Rope.html" > Rope< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.RoundedRectangle.html" > RoundedRectangle< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.SepiaFilter.html" > SepiaFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.SmartBlurFilter.html" > SmartBlurFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Spine.html" > Spine< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.SpineLoader.html" > SpineLoader< / a >
< / li >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" >
< a href = "PIXI.SpineTextureLoader.html" > SpineTextureLoader< / a >
< / li >
2014-11-15 20:01:46 +00:00
< li class = "class-depth-1" >
< a href = "PIXI.Sprite.html" > Sprite< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.SpriteBatch.html" > SpriteBatch< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.SpriteSheetLoader.html" > SpriteSheetLoader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Stage.html" > Stage< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Strip.html" > Strip< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.StripShader.html" > StripShader< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Text.html" > Text< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.Texture.html" > Texture< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.TilingSprite.html" > TilingSprite< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.TiltShiftFilter.html" > TiltShiftFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.TiltShiftXFilter.html" > TiltShiftXFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.TiltShiftYFilter.html" > TiltShiftYFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.TwistFilter.html" > TwistFilter< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.VideoTexture.html" > VideoTexture< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.WebGLBlendModeManager.html" > WebGLBlendModeManager< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.WebGLFastSpriteBatch.html" > WebGLFastSpriteBatch< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.WebGLFilterManager.html" > WebGLFilterManager< / a >
< / li >
< li class = "class-depth-1" >
< a href = "PIXI.WebGLRenderer.html" > WebGLRenderer< / a >
< / li >
2013-10-03 00:21:08 +00:00
< / ul >
< / li >
2014-11-25 00:23:44 +00:00
2014-11-15 20:01:46 +00:00
< li class = "dropdown" >
2014-11-25 00:23:44 +00:00
< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" > Core< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu " >
2014-12-03 10:39:11 +00:00
< li class = "class-depth-1" > < a href = "Phaser.Game.html" > Game< / a > < / li >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" > < a href = "Phaser.Group.html" > Group< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.World.html" > World< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Loader.html" > Loader< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Time.html" > Time< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Camera.html" > Camera< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.StateManager.html" > State Manager< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.TweenManager.html" > Tween Manager< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.SoundManager.html" > Sound Manager< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.InputManager.html" > Input Manager< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.ScaleManager.html" > Scale Manager< / a > < / li >
< / ul >
< / li >
2014-11-15 20:01:46 +00:00
2014-11-25 00:23:44 +00:00
< li class = "dropdown" >
< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" > Game Objects< b class = "caret" > < / b > < / a >
2014-11-15 20:01:46 +00:00
< ul class = "dropdown-menu " >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" > < a href = "Phaser.GameObjectFactory.html" > Factory (game.add)< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.GameObjectCreator.html" > Creator (game.make)< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Sprite.html" > Sprite< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Image.html" > Image< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Sound.html" > Sound< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Emitter.html" > Emitter< / a > < / li >
2014-12-03 10:39:11 +00:00
< li class = "class-depth-1" > < a href = "Phaser.Particle.html" > Particle< / a > < / li >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" > < a href = "Phaser.Text.html" > Text< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Tween.html" > Tween< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.BitmapText.html" > BitmapText< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Tilemap.html" > Tilemap< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.BitmapData.html" > BitmapData< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.RetroFont.html" > RetroFont< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Button.html" > Button< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Animation.html" > Animation< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Graphics.html" > Graphics< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.RenderTexture.html" > RenderTexture< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.TileSprite.html" > TileSprite< / a > < / li >
< / ul >
< / li >
< li class = "dropdown" >
< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" > Geometry< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu " >
< li class = "class-depth-1" > < a href = "Phaser.Circle.html" > Circle< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Rectangle.html" > Rectangle< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Point.html" > Point< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Line.html" > Line< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Ellipse.html" > Ellipse< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Polygon.html" > Polygon< / a > < / li >
< / ul >
< / li >
2014-11-15 20:01:46 +00:00
2014-11-25 00:23:44 +00:00
< li class = "dropdown" >
< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" > Physics< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu " >
< li class = "class-depth-1" > < a href = "Phaser.Physics.Arcade.html" > Arcade Physics< / a > < / li >
< li class = "class-depth-2" > < a href = "Phaser.Physics.Arcade.Body.html" > Body< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Physics.P2.html" > P2 Physics< / a > < / li >
< li class = "class-depth-2" > < a href = "Phaser.Physics.P2.Body.html" > Body< / a > < / li >
< li class = "class-depth-2" > < a href = "Phaser.Physics.P2.Spring.html" > Spring< / a > < / li >
< li class = "class-depth-2" > < a href = "Phaser.Physics.P2.CollisionGroup.html" > CollisionGroup< / a > < / li >
< li class = "class-depth-2" > < a href = "Phaser.Physics.P2.ContactMaterial.html" > ContactMaterial< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Physics.Ninja.html" > Ninja Physics< / a > < / li >
< li class = "class-depth-2" > < a href = "Phaser.Physics.Body.html" > Body< / a > < / li >
2014-11-15 20:01:46 +00:00
< / ul >
< / li >
2014-11-25 00:23:44 +00:00
< li class = "dropdown" >
< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" > Input< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu " >
< li class = "class-depth-1" > < a href = "Phaser.InputHandler.html" > Input Handler< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Pointer.html" > Pointer< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Mouse.html" > Mouse< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Keyboard.html" > Keyboard< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Key.html" > Key< / a > < / li >
< li class = "class-depth-1" > < a href = "Phaser.Gamepad.html" > Gamepad< / a > < / li >
< / ul >
< / li >
< li class = "dropdown" >
< a href = "#" class = "dropdown-toggle" data-toggle = "dropdown" > Community< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu " >
< li class = "class-depth-1" > < a href = "https://github.com/photonstorm/phaser" > Phaser Github< / a > < / li >
< li class = "class-depth-1" > < a href = "http://examples.phaser.io" > Phaser Examples< / a > < / li >
< li class = "class-depth-1" > < a href = "https://github.com/photonstorm/phaser-plugins" > Phaser Plugins< / a > < / li >
< li class = "class-depth-1" > < a href = "http://www.html5gamedevs.com/forum/14-phaser/" > Forum< / a > < / li >
< li class = "class-depth-1" > < a href = "http://stackoverflow.com/questions/tagged/phaser-framework" > Stack Overflow< / a > < / li >
< li class = "class-depth-1" > < a href = "https://confirmsubscription.com/h/r/369DE48E3E86AF1E" > Newsletter< / a > < / li >
< li class = "class-depth-1" > < a href = "https://twitter.com/photonstorm" > Twitter< / a > < / li >
< li class = "class-depth-1" > < a href = "http://www.html5gamedevs.com/topic/4470-official-phaserio-irc-channel-phaserio-on-freenode/" > IRC< / a > < / li >
2014-12-03 10:39:11 +00:00
< li class = "class-depth-1" > < a href = "https://leanpub.com/u/photonstorm" > Phaser Books< / a > < / li >
2014-11-25 00:23:44 +00:00
< li class = "class-depth-1" > < a href = "https://www.gittip.com/photonstorm/" > GitTip< / a > < / li >
< / ul >
< / li >
2013-10-03 00:21:08 +00:00
< / ul >
< / div >
< / div >
< div class = "row-fluid" >
< div class = "span12" >
< div id = "main" >
2014-11-15 20:01:46 +00:00
< h1 class = "page-title" > Source: D:/wamp/www/phaser/src/system/Device.js< / h1 >
2013-10-03 00:21:08 +00:00
< section >
< article >
< pre class = "sunlight-highlight-javascript linenums" > /**
* @author Richard Davey < rich@photonstorm.com>
2014-02-05 06:29:17 +00:00
* @copyright 2014 Photon Storm Ltd.
2013-10-03 00:21:08 +00:00
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
/**
2014-11-15 20:01:46 +00:00
* @classdesc
* Detects device support capabilities and is responsible for device intialization - see {@link Phaser.Device.whenReady whenReady}.
*
* This class represents a singleton object that can be accessed directly as `game.device`
* (or, as a fallback, `Phaser.Device` when a game instance is not available) without the need to instantiate it.
*
* Unless otherwise noted the device capabilities are only guaranteed after initialization. Initialization
* occurs automatically and is guaranteed complete before {@link Phaser.Game} begins its "boot" phase.
* Feature detection can be modified in the {@link Phaser.Device.onInitialized onInitialized} signal.
*
* When checking features using the exposed properties only the *truth-iness* of the value should be relied upon
* unless the documentation states otherwise: properties may return `false`, `''`, `null`, or even `undefined`
* when indicating the lack of a feature.
2013-10-03 00:21:08 +00:00
*
2014-11-15 20:01:46 +00:00
* Uses elements from System.js by MrDoob and Modernizr
*
* @description
* It is not possible to instantiate the Device class manually.
*
* @class
* @protected
2013-10-03 00:21:08 +00:00
*/
2014-11-15 20:01:46 +00:00
Phaser.Device = function () {
/**
* The time the device became ready.
* @property {integer} deviceReadyAt
* @protected
*/
this.deviceReadyAt = 0;
2014-03-14 06:36:05 +00:00
/**
2014-11-15 20:01:46 +00:00
* The time as which initialization has completed.
* @property {boolean} initialized
* @protected
2014-03-14 06:36:05 +00:00
*/
2014-11-15 20:01:46 +00:00
this.initialized = false;
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
// Browser / Host / Operating System
2013-10-03 00:21:08 +00:00
/**
2014-11-15 20:01:46 +00:00
* @property {boolean} desktop - Is running on a desktop?
2013-10-03 00:21:08 +00:00
* @default
*/
this.desktop = false;
/**
* @property {boolean} iOS - Is running on iOS?
* @default
*/
this.iOS = false;
2013-11-28 15:57:09 +00:00
/**
* @property {boolean} cocoonJS - Is the game running under CocoonJS?
* @default
*/
this.cocoonJS = false;
2014-09-09 14:36:56 +00:00
/**
* @property {boolean} cocoonJSApp - Is this game running with CocoonJS.App?
* @default
*/
this.cocoonJSApp = false;
/**
* @property {boolean} cordova - Is the game running under Apache Cordova?
* @default
*/
this.cordova = false;
/**
* @property {boolean} node - Is the game running under Node.js?
* @default
*/
this.node = false;
/**
* @property {boolean} nodeWebkit - Is the game running under Node-Webkit?
* @default
*/
this.nodeWebkit = false;
2014-02-05 06:29:17 +00:00
/**
2014-04-15 14:39:23 +00:00
* @property {boolean} ejecta - Is the game running under Ejecta?
* @default
*/
2014-02-05 06:29:17 +00:00
this.ejecta = false;
2014-04-15 14:39:23 +00:00
/**
* @property {boolean} crosswalk - Is the game running under the Intel Crosswalk XDK?
* @default
*/
this.crosswalk = false;
2013-10-03 00:21:08 +00:00
/**
* @property {boolean} android - Is running on android?
* @default
*/
this.android = false;
/**
* @property {boolean} chromeOS - Is running on chromeOS?
* @default
*/
this.chromeOS = false;
/**
* @property {boolean} linux - Is running on linux?
* @default
*/
this.linux = false;
/**
* @property {boolean} macOS - Is running on macOS?
* @default
*/
this.macOS = false;
/**
* @property {boolean} windows - Is running on windows?
* @default
*/
this.windows = false;
2014-03-14 06:36:05 +00:00
/**
* @property {boolean} windowsPhone - Is running on a Windows Phone?
* @default
*/
this.windowsPhone = false;
2013-10-03 00:21:08 +00:00
// Features
/**
* @property {boolean} canvas - Is canvas available?
* @default
*/
this.canvas = false;
/**
* @property {boolean} file - Is file available?
* @default
*/
this.file = false;
/**
* @property {boolean} fileSystem - Is fileSystem available?
* @default
*/
this.fileSystem = false;
/**
* @property {boolean} localStorage - Is localStorage available?
* @default
*/
this.localStorage = false;
/**
* @property {boolean} webGL - Is webGL available?
* @default
*/
this.webGL = false;
/**
* @property {boolean} worker - Is worker available?
* @default
*/
this.worker = false;
/**
* @property {boolean} css3D - Is css3D available?
* @default
*/
this.css3D = false;
2014-03-28 01:42:49 +00:00
/**
2013-10-03 00:21:08 +00:00
* @property {boolean} pointerLock - Is Pointer Lock available?
* @default
*/
this.pointerLock = false;
2013-11-28 15:57:09 +00:00
/**
* @property {boolean} typedArray - Does the browser support TypedArrays?
* @default
*/
this.typedArray = false;
2014-02-05 06:29:17 +00:00
/**
* @property {boolean} vibration - Does the device support the Vibration API?
* @default
*/
this.vibration = false;
2014-03-24 12:41:45 +00:00
/**
* @property {boolean} getUserMedia - Does the device support the getUserMedia API?
* @default
*/
this.getUserMedia = false;
2014-02-05 06:29:17 +00:00
/**
* @property {boolean} quirksMode - Is the browser running in strict mode (false) or quirks mode? (true)
* @default
*/
this.quirksMode = false;
2014-11-15 20:01:46 +00:00
// Input
/**
* @property {boolean} touch - Is touch available?
* @default
*/
this.touch = false;
/**
* @property {boolean} mspointer - Is mspointer available?
* @default
*/
this.mspointer = false;
/**
* @property {string|null} wheelType - The newest type of Wheel/Scroll event supported: 'wheel', 'mousewheel', 'DOMMouseScroll'
* @default
* @protected
*/
this.wheelEvent = null;
2013-10-03 00:21:08 +00:00
// Browser
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} arora - Set to true if running in Arora.
2013-10-03 00:21:08 +00:00
* @default
*/
this.arora = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} chrome - Set to true if running in Chrome.
2013-10-03 00:21:08 +00:00
* @default
*/
this.chrome = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} epiphany - Set to true if running in Epiphany.
2013-10-03 00:21:08 +00:00
* @default
*/
this.epiphany = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} firefox - Set to true if running in Firefox.
2013-10-03 00:21:08 +00:00
* @default
*/
this.firefox = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} ie - Set to true if running in Internet Explorer.
2013-10-03 00:21:08 +00:00
* @default
*/
this.ie = false;
/**
2014-02-18 03:01:51 +00:00
* @property {number} ieVersion - If running in Internet Explorer this will contain the major version number. Beyond IE10 you should use Device.trident and Device.tridentVersion.
2013-10-03 00:21:08 +00:00
* @default
*/
this.ieVersion = 0;
2014-02-05 06:29:17 +00:00
/**
* @property {boolean} trident - Set to true if running a Trident version of Internet Explorer (IE11+)
* @default
*/
this.trident = false;
/**
2014-11-15 20:01:46 +00:00
* @property {number} tridentVersion - If running in Internet Explorer 11 this will contain the major version number. See {@link http://msdn.microsoft.com/en-us/library/ie/ms537503(v=vs.85).aspx}
2014-02-05 06:29:17 +00:00
* @default
*/
this.tridentVersion = 0;
2013-10-03 00:21:08 +00:00
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} mobileSafari - Set to true if running in Mobile Safari.
2013-10-03 00:21:08 +00:00
* @default
*/
this.mobileSafari = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} midori - Set to true if running in Midori.
2013-10-03 00:21:08 +00:00
* @default
*/
this.midori = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} opera - Set to true if running in Opera.
2013-10-03 00:21:08 +00:00
* @default
*/
this.opera = false;
/**
2013-11-28 15:57:09 +00:00
* @property {boolean} safari - Set to true if running in Safari.
2013-10-03 00:21:08 +00:00
* @default
*/
this.safari = false;
2013-11-28 15:57:09 +00:00
/**
* @property {boolean} webApp - Set to true if running as a WebApp, i.e. within a WebView
* @default
*/
2013-10-03 00:21:08 +00:00
this.webApp = false;
2014-02-05 06:29:17 +00:00
/**
* @property {boolean} silk - Set to true if running in the Silk browser (as used on the Amazon Kindle)
* @default
*/
this.silk = false;
2013-10-03 00:21:08 +00:00
// Audio
/**
* @property {boolean} audioData - Are Audio tags available?
* @default
*/
this.audioData = false;
/**
* @property {boolean} webAudio - Is the WebAudio API available?
* @default
*/
this.webAudio = false;
/**
* @property {boolean} ogg - Can this device play ogg files?
* @default
*/
this.ogg = false;
/**
* @property {boolean} opus - Can this device play opus files?
* @default
*/
this.opus = false;
/**
* @property {boolean} mp3 - Can this device play mp3 files?
* @default
*/
this.mp3 = false;
/**
* @property {boolean} wav - Can this device play wav files?
* @default
*/
this.wav = false;
2013-11-28 15:57:09 +00:00
2013-10-03 00:21:08 +00:00
/**
* Can this device play m4a files?
* @property {boolean} m4a - True if this device can play m4a files.
* @default
*/
this.m4a = false;
/**
* @property {boolean} webm - Can this device play webm files?
* @default
*/
this.webm = false;
// Device
/**
* @property {boolean} iPhone - Is running on iPhone?
* @default
*/
this.iPhone = false;
/**
* @property {boolean} iPhone4 - Is running on iPhone4?
* @default
*/
this.iPhone4 = false;
2014-03-28 01:42:49 +00:00
/**
2013-10-03 00:21:08 +00:00
* @property {boolean} iPad - Is running on iPad?
* @default
*/
this.iPad = false;
/**
* @property {number} pixelRatio - PixelRatio of the host device?
* @default
*/
this.pixelRatio = 0;
2013-11-28 15:57:09 +00:00
/**
* @property {boolean} littleEndian - Is the device big or little endian? (only detected if the browser supports TypedArrays)
* @default
*/
this.littleEndian = false;
2014-11-15 20:01:46 +00:00
/**
* @property {boolean} LITTLE_ENDIAN - Same value as `littleEndian`.
* @default
*/
this.LITTLE_ENDIAN = false;
2014-04-29 14:39:02 +00:00
/**
* @property {boolean} support32bit - Does the device context support 32bit pixel manipulation using array buffer views?
* @default
*/
this.support32bit = false;
2014-03-14 06:36:05 +00:00
/**
* @property {boolean} fullscreen - Does the browser support the Full Screen API?
* @default
*/
this.fullscreen = false;
/**
* @property {string} requestFullscreen - If the browser supports the Full Screen API this holds the call you need to use to activate it.
* @default
*/
this.requestFullscreen = '';
/**
* @property {string} cancelFullscreen - If the browser supports the Full Screen API this holds the call you need to use to cancel it.
* @default
*/
this.cancelFullscreen = '';
/**
* @property {boolean} fullscreenKeyboard - Does the browser support access to the Keyboard during Full Screen mode?
* @default
*/
this.fullscreenKeyboard = false;
2014-11-15 20:01:46 +00:00
};
// Device is really a singleton/static entity; instantiate it
// and add new methods directly sans-prototype.
Phaser.Device = new Phaser.Device();
/**
* This signal is dispatched after device initialization occurs but before any of the ready
* callbacks (see {@link Phaser.Device.whenReady whenReady}) have been invoked.
*
* Local "patching" for a particular device can/should be done in this event.
*
* _Note_: This signal is removed after the device has been readied; if a handler has not been
* added _before_ `new Phaser.Game(..)` it is probably too late.
*
* @type {?Phaser.Signal}
* @static
*/
Phaser.Device.onInitialized = new Phaser.Signal();
/**
* Add a device-ready handler and ensure the device ready sequence is started.
*
* Phaser.Device will _not_ activate or initialize until at least one `whenReady` handler is added,
* which is normally done automatically be calling `new Phaser.Game(..)`.
*
* The handler is invoked when the device is considered "ready", which may be immediately
* if the device is already "ready". See {@link Phaser.Device#deviceReadyAt deviceReadyAt}.
*
* @method
2014-11-25 00:23:44 +00:00
* @param {function} handler - Callback to invoke when the device is ready. It is invoked with the given context the Phaser.Device object is supplied as the first argument.
2014-11-15 20:01:46 +00:00
* @param {object} [context] - Context in which to invoke the handler
2014-11-25 00:23:44 +00:00
* @param {boolean} [nonPrimer=false] - If true the device ready check will not be started.
2014-11-15 20:01:46 +00:00
*/
2014-11-25 00:23:44 +00:00
Phaser.Device.whenReady = function (callback, context, nonPrimer) {
2014-11-15 20:01:46 +00:00
var readyCheck = this._readyCheck;
if (this.deviceReadyAt || !readyCheck)
{
2014-11-25 00:23:44 +00:00
callback.call(context, this);
2014-11-15 20:01:46 +00:00
}
2014-11-25 00:23:44 +00:00
else if (readyCheck._monitor || nonPrimer)
2014-11-15 20:01:46 +00:00
{
2014-11-25 00:23:44 +00:00
readyCheck._queue = readyCheck._queue || [];
2014-11-15 20:01:46 +00:00
readyCheck._queue.push([callback, context]);
}
else
{
readyCheck._monitor = readyCheck.bind(this);
2014-11-25 00:23:44 +00:00
readyCheck._queue = readyCheck._queue || [];
2014-11-15 20:01:46 +00:00
readyCheck._queue.push([callback, context]);
var cordova = typeof window.cordova !== 'undefined';
var cocoonJS = navigator['isCocoonJS'];
if (document.readyState === 'complete' || document.readyState === 'interactive')
{
// Why is there an additional timeout here?
window.setTimeout(readyCheck._monitor, 0);
}
else if (cordova & & !cocoonJS)
{
// Ref. http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready
// Cordova, but NOT Cocoon?
document.addEventListener('deviceready', readyCheck._monitor, false);
}
else
{
document.addEventListener('DOMContentLoaded', readyCheck._monitor, false);
window.addEventListener('load', readyCheck._monitor, false);
}
}
};
/**
* Internal method used for checking when the device is ready.
* This function is removed from Phaser.Device when the device becomes ready.
*
* @method
* @private
*/
Phaser.Device._readyCheck = function () {
var readyCheck = this._readyCheck;
if (!document.body)
{
window.setTimeout(readyCheck._monitor, 20);
}
else if (!this.deviceReadyAt)
{
this.deviceReadyAt = Date.now();
document.removeEventListener('deviceready', readyCheck._monitor);
document.removeEventListener('DOMContentLoaded', readyCheck._monitor);
window.removeEventListener('load', readyCheck._monitor);
this._initialize();
this.initialized = true;
this.onInitialized.dispatch(this);
var item;
while ((item = readyCheck._queue.shift()))
{
var callback = item[0];
var context = item[1];
2014-11-25 00:23:44 +00:00
callback.call(context, this);
2014-11-15 20:01:46 +00:00
}
// Remove no longer useful methods and properties.
this._readyCheck = null;
this._initialize = null;
this.onInitialized = null;
}
2014-03-28 01:42:49 +00:00
2013-10-03 00:21:08 +00:00
};
2014-11-15 20:01:46 +00:00
/**
* Internal method to initialize the capability checks.
* This function is removed from Phaser.Device once the device is initialized.
*
* @method
* @private
*/
Phaser.Device._initialize = function () {
2014-04-29 14:39:02 +00:00
2014-11-15 20:01:46 +00:00
var device = this;
2013-10-03 00:21:08 +00:00
/**
* Check which OS is game running on.
*/
2014-11-15 20:01:46 +00:00
function _checkOS () {
2013-10-03 00:21:08 +00:00
var ua = navigator.userAgent;
2014-09-09 14:36:56 +00:00
if (/Playstation Vita/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.vita = true;
2014-09-09 14:36:56 +00:00
}
else if (/Kindle/.test(ua) || /\bKF[A-Z][A-Z]+/.test(ua) || /Silk.*Mobile Safari/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.kindle = true;
2014-09-09 14:36:56 +00:00
// This will NOT detect early generations of Kindle Fire, I think there is no reliable way...
// E.g. "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true"
}
else if (/Android/.test(ua))
2014-02-05 06:29:17 +00:00
{
2014-11-15 20:01:46 +00:00
device.android = true;
2014-02-05 06:29:17 +00:00
}
else if (/CrOS/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.chromeOS = true;
2014-02-05 06:29:17 +00:00
}
else if (/iP[ao]d|iPhone/i.test(ua))
{
2014-11-15 20:01:46 +00:00
device.iOS = true;
2014-02-05 06:29:17 +00:00
}
else if (/Linux/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.linux = true;
2014-02-05 06:29:17 +00:00
}
else if (/Mac OS/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.macOS = true;
2014-02-05 06:29:17 +00:00
}
else if (/Windows/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.windows = true;
2014-03-14 06:36:05 +00:00
if (/Windows Phone/i.test(ua))
{
2014-11-15 20:01:46 +00:00
device.windowsPhone = true;
2014-03-14 06:36:05 +00:00
}
2013-10-03 00:21:08 +00:00
}
2014-11-25 00:23:44 +00:00
var silk = /Silk/.test(ua); // detected in browsers
if (device.windows || device.macOS || (device.linux & & !silk) || device.chromeOS)
2014-02-05 06:29:17 +00:00
{
2014-11-15 20:01:46 +00:00
device.desktop = true;
2013-10-03 00:21:08 +00:00
}
2014-03-14 06:36:05 +00:00
// Windows Phone / Table reset
2014-11-15 20:01:46 +00:00
if (device.windowsPhone || ((/Windows NT/i.test(ua)) & & (/Touch/i.test(ua))))
2014-03-14 06:36:05 +00:00
{
2014-11-15 20:01:46 +00:00
device.desktop = false;
2014-03-14 06:36:05 +00:00
}
2014-11-15 20:01:46 +00:00
}
2013-10-03 00:21:08 +00:00
/**
* Check HTML5 features of the host environment.
*/
2014-11-15 20:01:46 +00:00
function _checkFeatures () {
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
device.canvas = !!window['CanvasRenderingContext2D'] || device.cocoonJS;
2013-10-03 00:21:08 +00:00
try {
2014-11-15 20:01:46 +00:00
device.localStorage = !!localStorage.getItem;
2013-10-03 00:21:08 +00:00
} catch (error) {
2014-11-15 20:01:46 +00:00
device.localStorage = false;
2013-10-03 00:21:08 +00:00
}
2014-11-15 20:01:46 +00:00
device.file = !!window['File'] & & !!window['FileReader'] & & !!window['FileList'] & & !!window['Blob'];
device.fileSystem = !!window['requestFileSystem'];
device.webGL = ( function () { try { var canvas = document.createElement( 'canvas' ); /*Force screencanvas to false*/ canvas.screencanvas = false; return !! window.WebGLRenderingContext & & ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ); } catch( e ) { return false; } } )();
2013-10-25 15:54:40 +00:00
2014-11-15 20:01:46 +00:00
if (device.webGL === null || device.webGL === false)
2013-10-25 15:54:40 +00:00
{
2014-11-15 20:01:46 +00:00
device.webGL = false;
2013-10-25 15:54:40 +00:00
}
else
{
2014-11-15 20:01:46 +00:00
device.webGL = true;
2013-10-25 15:54:40 +00:00
}
2014-11-15 20:01:46 +00:00
device.worker = !!window['Worker'];
device.pointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;
2014-03-28 01:42:49 +00:00
2014-11-15 20:01:46 +00:00
device.quirksMode = (document.compatMode === 'CSS1Compat') ? false : true;
device.getUserMedia = !!(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
}
/**
* Checks/configures various input.
*/
function _checkInput () {
if ('ontouchstart' in document.documentElement ||
(window.navigator.maxTouchPoints & & window.navigator.maxTouchPoints > 1))
2014-02-05 06:29:17 +00:00
{
2014-11-15 20:01:46 +00:00
device.touch = true;
2013-10-03 00:21:08 +00:00
}
2014-02-05 06:29:17 +00:00
if (window.navigator.msPointerEnabled || window.navigator.pointerEnabled)
{
2014-11-15 20:01:46 +00:00
device.mspointer = true;
2013-10-03 00:21:08 +00:00
}
2014-03-28 01:42:49 +00:00
2014-11-15 20:01:46 +00:00
if (!device.cocoonJS)
{
// See https://developer.mozilla.org/en-US/docs/Web/Events/wheel
if ('onwheel' in window || (device.ie & & 'WheelEvent' in window))
{
// DOM3 Wheel Event: FF 17+, IE 9+, Chrome 31+, Safari 7+
device.wheelEvent = 'wheel';
}
else if ('onmousewheel' in window)
{
// Non-FF legacy: IE 6-9, Chrome 1-31, Safari 5-7.
device.wheelEvent = 'mousewheel';
}
else if (device.firefox & & 'MouseScrollEvent' in window)
{
// FF prior to 17. This should probably be scrubbed.
device.wheelEvent = 'DOMMouseScroll';
}
}
2014-03-14 06:36:05 +00:00
2014-11-15 20:01:46 +00:00
}
2014-03-14 06:36:05 +00:00
/**
* Checks for support of the Full Screen API.
*/
2014-11-15 20:01:46 +00:00
function _checkFullScreenSupport () {
2014-03-14 06:36:05 +00:00
var fs = [
'requestFullscreen',
'requestFullScreen',
'webkitRequestFullscreen',
'webkitRequestFullScreen',
'msRequestFullscreen',
'msRequestFullScreen',
'mozRequestFullScreen',
'mozRequestFullscreen'
];
2014-11-15 20:01:46 +00:00
var element = document.createElement('div');
2014-03-14 06:36:05 +00:00
for (var i = 0; i < fs.length; i++)
{
2014-11-15 20:01:46 +00:00
if (element[fs[i]])
2014-03-14 06:36:05 +00:00
{
2014-11-15 20:01:46 +00:00
device.fullscreen = true;
device.requestFullscreen = fs[i];
2014-07-10 19:31:11 +00:00
break;
2014-03-14 06:36:05 +00:00
}
}
var cfs = [
'cancelFullScreen',
'exitFullscreen',
'webkitCancelFullScreen',
'webkitExitFullscreen',
'msCancelFullScreen',
'msExitFullscreen',
'mozCancelFullScreen',
'mozExitFullscreen'
];
2014-11-15 20:01:46 +00:00
if (device.fullscreen)
2014-03-14 06:36:05 +00:00
{
for (var i = 0; i < cfs.length; i++)
{
2014-07-10 19:31:11 +00:00
if (document[cfs[i]])
2014-03-14 06:36:05 +00:00
{
2014-11-15 20:01:46 +00:00
device.cancelFullscreen = cfs[i];
2014-07-10 19:31:11 +00:00
break;
2014-03-14 06:36:05 +00:00
}
}
}
// Keyboard Input?
2014-04-11 12:09:28 +00:00
if (window['Element'] & & Element['ALLOW_KEYBOARD_INPUT'])
2014-03-14 06:36:05 +00:00
{
2014-11-15 20:01:46 +00:00
device.fullscreenKeyboard = true;
2014-03-14 06:36:05 +00:00
}
2014-11-15 20:01:46 +00:00
}
2013-10-03 00:21:08 +00:00
/**
* Check what browser is game running in.
*/
2014-11-15 20:01:46 +00:00
function _checkBrowser () {
2013-10-03 00:21:08 +00:00
var ua = navigator.userAgent;
2014-02-05 06:29:17 +00:00
if (/Arora/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.arora = true;
2014-02-05 06:29:17 +00:00
}
else if (/Chrome/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.chrome = true;
2014-02-05 06:29:17 +00:00
}
else if (/Epiphany/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.epiphany = true;
2014-02-05 06:29:17 +00:00
}
else if (/Firefox/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.firefox = true;
2014-02-05 06:29:17 +00:00
}
2014-11-15 20:01:46 +00:00
else if (/AppleWebKit/.test(ua) & & device.iOS)
2014-02-05 06:29:17 +00:00
{
2014-11-15 20:01:46 +00:00
device.mobileSafari = true;
2014-02-05 06:29:17 +00:00
}
else if (/MSIE (\d+\.\d+);/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.ie = true;
device.ieVersion = parseInt(RegExp.$1, 10);
2014-02-05 06:29:17 +00:00
}
else if (/Midori/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.midori = true;
2014-02-05 06:29:17 +00:00
}
else if (/Opera/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.opera = true;
2014-02-05 06:29:17 +00:00
}
else if (/Safari/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.safari = true;
2013-10-03 00:21:08 +00:00
}
2014-03-24 12:41:45 +00:00
else if (/Trident\/(\d+\.\d+)(.*)rv:(\d+\.\d+)/.test(ua))
2014-02-05 06:29:17 +00:00
{
2014-11-15 20:01:46 +00:00
device.ie = true;
device.trident = true;
device.tridentVersion = parseInt(RegExp.$1, 10);
device.ieVersion = parseInt(RegExp.$3, 10);
2014-02-05 06:29:17 +00:00
}
2013-10-03 00:21:08 +00:00
2014-05-20 09:12:48 +00:00
//Silk gets its own if clause because its ua also contains 'Safari'
if (/Silk/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.silk = true;
2014-05-20 09:12:48 +00:00
}
2013-10-03 00:21:08 +00:00
// WebApp mode in iOS
2014-02-05 06:29:17 +00:00
if (navigator['standalone'])
{
2014-11-15 20:01:46 +00:00
device.webApp = true;
2013-10-03 00:21:08 +00:00
}
2014-09-09 14:36:56 +00:00
if (typeof window.cordova !== "undefined")
{
2014-11-15 20:01:46 +00:00
device.cordova = true;
2014-09-09 14:36:56 +00:00
}
if (typeof process !== "undefined" & & typeof require !== "undefined")
{
2014-11-15 20:01:46 +00:00
device.node = true;
2014-09-09 14:36:56 +00:00
}
2014-11-15 20:01:46 +00:00
if (device.node)
2014-09-09 14:36:56 +00:00
{
try {
2014-11-15 20:01:46 +00:00
device.nodeWebkit = (typeof require('nw.gui') !== "undefined");
2014-09-09 14:36:56 +00:00
}
catch(error)
{
2014-11-15 20:01:46 +00:00
device.nodeWebkit = false;
2014-09-09 14:36:56 +00:00
}
}
2014-02-05 06:29:17 +00:00
if (navigator['isCocoonJS'])
{
2014-11-15 20:01:46 +00:00
device.cocoonJS = true;
2013-11-28 15:57:09 +00:00
}
2014-09-09 14:36:56 +00:00
2014-11-15 20:01:46 +00:00
if (device.cocoonJS)
2014-09-09 14:36:56 +00:00
{
try {
2014-11-15 20:01:46 +00:00
device.cocoonJSApp = (typeof CocoonJS !== "undefined");
2014-09-09 14:36:56 +00:00
}
catch(error)
{
2014-11-15 20:01:46 +00:00
device.cocoonJSApp = false;
2014-09-09 14:36:56 +00:00
}
}
2013-11-28 15:57:09 +00:00
2014-02-05 06:29:17 +00:00
if (typeof window.ejecta !== "undefined")
{
2014-11-15 20:01:46 +00:00
device.ejecta = true;
2014-02-05 06:29:17 +00:00
}
2014-04-15 14:39:23 +00:00
if (/Crosswalk/.test(ua))
{
2014-11-15 20:01:46 +00:00
device.crosswalk = true;
2014-04-15 14:39:23 +00:00
}
2014-11-15 20:01:46 +00:00
}
2013-10-03 00:21:08 +00:00
/**
* Check audio support.
*/
2014-11-15 20:01:46 +00:00
function _checkAudio () {
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
device.audioData = !!(window['Audio']);
device.webAudio = !!(window['webkitAudioContext'] || window['AudioContext']);
2013-10-03 00:21:08 +00:00
var audioElement = document.createElement('audio');
var result = false;
try {
if (result = !!audioElement.canPlayType) {
2014-03-28 01:42:49 +00:00
2013-10-03 00:21:08 +00:00
if (audioElement.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, '')) {
2014-11-15 20:01:46 +00:00
device.ogg = true;
2013-10-03 00:21:08 +00:00
}
2014-10-22 20:49:44 +00:00
if (audioElement.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, '') || audioElement.canPlayType('audio/opus;').replace(/^no$/, '')) {
2014-11-15 20:01:46 +00:00
device.opus = true;
2013-10-03 00:21:08 +00:00
}
if (audioElement.canPlayType('audio/mpeg;').replace(/^no$/, '')) {
2014-11-15 20:01:46 +00:00
device.mp3 = true;
2013-10-03 00:21:08 +00:00
}
// Mimetypes accepted:
// developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
// bit.ly/iphoneoscodecs
if (audioElement.canPlayType('audio/wav; codecs="1"').replace(/^no$/, '')) {
2014-11-15 20:01:46 +00:00
device.wav = true;
2013-10-03 00:21:08 +00:00
}
if (audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, '')) {
2014-11-15 20:01:46 +00:00
device.m4a = true;
2013-10-03 00:21:08 +00:00
}
if (audioElement.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, '')) {
2014-11-15 20:01:46 +00:00
device.webm = true;
2013-10-03 00:21:08 +00:00
}
}
} catch (e) {
}
2014-11-15 20:01:46 +00:00
}
2013-10-03 00:21:08 +00:00
/**
2014-04-29 14:39:02 +00:00
* Check PixelRatio, iOS device, Vibration API, ArrayBuffers and endianess.
2013-10-03 00:21:08 +00:00
*/
2014-11-15 20:01:46 +00:00
function _checkDevice () {
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
device.pixelRatio = window['devicePixelRatio'] || 1;
device.iPhone = navigator.userAgent.toLowerCase().indexOf('iphone') != -1;
device.iPhone4 = (device.pixelRatio == 2 & & device.iPhone);
device.iPad = navigator.userAgent.toLowerCase().indexOf('ipad') != -1;
2013-10-03 00:21:08 +00:00
2013-11-28 15:57:09 +00:00
if (typeof Int8Array !== 'undefined')
{
2014-11-15 20:01:46 +00:00
device.typedArray = true;
2013-11-28 15:57:09 +00:00
}
else
{
2014-11-15 20:01:46 +00:00
device.typedArray = false;
2013-11-28 15:57:09 +00:00
}
2014-04-29 14:39:02 +00:00
if (typeof ArrayBuffer !== 'undefined' & & typeof Uint8Array !== 'undefined' & & typeof Uint32Array !== 'undefined')
{
2014-11-15 20:01:46 +00:00
device.littleEndian = _checkIsLittleEndian();
device.LITTLE_ENDIAN = device.littleEndian;
2014-04-29 14:39:02 +00:00
}
2014-11-15 20:01:46 +00:00
device.support32bit = (typeof ArrayBuffer !== "undefined" & & typeof Uint8ClampedArray !== "undefined" & & typeof Int32Array !== "undefined" & & device.littleEndian !== null & & _checkIsUint8ClampedImageData());
2014-04-29 14:39:02 +00:00
2014-02-05 06:29:17 +00:00
navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
2014-03-28 01:42:49 +00:00
2014-02-05 06:29:17 +00:00
if (navigator.vibrate)
{
2014-11-15 20:01:46 +00:00
device.vibration = true;
2014-02-05 06:29:17 +00:00
}
2014-11-15 20:01:46 +00:00
}
2013-10-03 00:21:08 +00:00
2014-04-29 14:39:02 +00:00
/**
* Check Little or Big Endian system.
2014-11-15 20:01:46 +00:00
*
2014-04-29 14:39:02 +00:00
* @author Matt DesLauriers (@mattdesl)
*/
2014-11-15 20:01:46 +00:00
function _checkIsLittleEndian () {
2014-04-29 14:39:02 +00:00
var a = new ArrayBuffer(4);
var b = new Uint8Array(a);
var c = new Uint32Array(a);
b[0] = 0xa1;
b[1] = 0xb2;
b[2] = 0xc3;
b[3] = 0xd4;
if (c[0] == 0xd4c3b2a1)
{
return true;
}
if (c[0] == 0xa1b2c3d4)
{
return false;
}
else
{
// Could not determine endianness
return null;
}
2014-11-15 20:01:46 +00:00
}
2014-04-29 14:39:02 +00:00
/**
* Test to see if ImageData uses CanvasPixelArray or Uint8ClampedArray.
2014-11-15 20:01:46 +00:00
*
2014-04-29 14:39:02 +00:00
* @author Matt DesLauriers (@mattdesl)
*/
2014-11-15 20:01:46 +00:00
function _checkIsUint8ClampedImageData () {
2014-04-29 14:39:02 +00:00
if (typeof Uint8ClampedArray === "undefined")
{
return false;
}
var elem = document.createElement('canvas');
var ctx = elem.getContext('2d');
if (!ctx)
{
return false;
}
var image = ctx.createImageData(1, 1);
2014-09-09 14:36:56 +00:00
2014-04-29 14:39:02 +00:00
return image.data instanceof Uint8ClampedArray;
2014-11-15 20:01:46 +00:00
}
2014-04-29 14:39:02 +00:00
2013-10-03 00:21:08 +00:00
/**
* Check whether the host environment support 3D CSS.
*/
2014-11-15 20:01:46 +00:00
function _checkCSS3D () {
2013-10-03 00:21:08 +00:00
var el = document.createElement('p');
var has3d;
var transforms = {
'webkitTransform': '-webkit-transform',
'OTransform': '-o-transform',
'msTransform': '-ms-transform',
'MozTransform': '-moz-transform',
'transform': 'transform'
};
// Add it to the body to get the computed style.
document.body.insertBefore(el, null);
2014-02-05 06:29:17 +00:00
for (var t in transforms)
{
if (el.style[t] !== undefined)
{
2013-10-03 00:21:08 +00:00
el.style[t] = "translate3d(1px,1px,1px)";
has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);
}
}
2014-03-28 01:42:49 +00:00
2013-10-03 00:21:08 +00:00
document.body.removeChild(el);
2014-11-15 20:01:46 +00:00
device.css3D = (has3d !== undefined & & has3d.length > 0 & & has3d !== "none");
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
}
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
// Run the checks
_checkOS();
_checkAudio();
_checkBrowser();
_checkCSS3D();
_checkDevice();
_checkFeatures();
_checkFullScreenSupport();
_checkInput();
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
};
/**
* Check whether the host environment can play audio.
*
* @method canPlayAudio
* @memberof Phaser.Device.prototype
* @param {string} type - One of 'mp3, 'ogg', 'm4a', 'wav', 'webm' or 'opus'.
* @return {boolean} True if the given file type is supported by the browser, otherwise false.
*/
Phaser.Device.canPlayAudio = function (type) {
if (type == 'mp3' & & this.mp3)
{
return true;
}
else if (type == 'ogg' & & (this.ogg || this.opus))
{
return true;
}
else if (type == 'm4a' & & this.m4a)
{
return true;
}
else if (type == 'opus' & & this.opus)
{
return true;
}
else if (type == 'wav' & & this.wav)
{
return true;
}
else if (type == 'webm' & & this.webm)
{
return true;
}
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
return false;
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
};
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
/**
* Check whether the console is open.
* Note that this only works in Firefox with Firebug and earlier versions of Chrome.
* It used to work in Chrome, but then they removed the ability: {@link http://src.chromium.org/viewvc/blink?view=revision& revision=151136}
*
* @method isConsoleOpen
* @memberof Phaser.Device.prototype
*/
Phaser.Device.isConsoleOpen = function () {
2013-10-03 00:21:08 +00:00
2014-11-15 20:01:46 +00:00
if (window.console & & window.console['firebug'])
{
return true;
}
if (window.console)
{
console.profile();
console.profileEnd();
if (console.clear)
2013-10-03 00:21:08 +00:00
{
2014-11-15 20:01:46 +00:00
console.clear();
2013-10-03 00:21:08 +00:00
}
2014-11-15 20:01:46 +00:00
if (console['profiles'])
2013-10-03 00:21:08 +00:00
{
2014-11-15 20:01:46 +00:00
return console['profiles'].length > 0;
2013-10-03 00:21:08 +00:00
}
}
2014-11-15 20:01:46 +00:00
return false;
2014-02-05 06:29:17 +00:00
2014-11-15 20:01:46 +00:00
};
2014-09-09 14:36:56 +00:00
/**
2014-11-15 20:01:46 +00:00
* Detect if the host is a an Android Stock browser.
* This is available before the device "ready" event.
*
* Authors might want to scale down on effects and switch to the CANVAS rendering method on those devices.
*
* @example
* var defaultRenderingMode = Phaser.Device.isAndroidStockBrowser() ? Phaser.CANVAS : Phaser.AUTO;
2014-09-09 14:36:56 +00:00
*
2014-11-15 20:01:46 +00:00
* @method isAndroidStockBrowser
* @memberof Phaser.Device.prototype
2014-09-09 14:36:56 +00:00
*/
2014-11-15 20:01:46 +00:00
Phaser.Device.isAndroidStockBrowser = function () {
2014-09-09 14:36:56 +00:00
var matches = window.navigator.userAgent.match(/Android.*AppleWebKit\/([\d.]+)/);
return matches & & matches[1] < 537;
2014-11-15 20:01:46 +00:00
2014-09-09 14:36:56 +00:00
};
2013-10-03 00:21:08 +00:00
< / pre >
< / article >
< / section >
< / div >
< div class = "clearfix" > < / div >
< footer >
< span class = "copyright" >
2014-02-05 06:29:17 +00:00
Phaser Copyright © 2012-2014 Photon Storm Ltd.
2013-10-03 00:21:08 +00:00
< / span >
< br / >
< span class = "jsdoc-message" >
2014-04-11 12:09:28 +00:00
Documentation generated by < a href = "https://github.com/jsdoc3/jsdoc" > JSDoc 3.3.0-dev< / a >
2014-12-04 11:33:42 +00:00
on Thu Dec 04 2014 11:32:24 GMT-0000 (GMT) using the < a href = "https://github.com/terryweiss/docstrap" > DocStrap template< / a > .
2013-10-03 00:21:08 +00:00
< / span >
< / footer >
< / div >
< br clear = "both" >
< / div >
< / div >
< script src = "scripts/sunlight.js" > < / script >
< script src = "scripts/sunlight.javascript.js" > < / script >
< script src = "scripts/sunlight-plugin.doclinks.js" > < / script >
< script src = "scripts/sunlight-plugin.linenumbers.js" > < / script >
< script src = "scripts/sunlight-plugin.menu.js" > < / script >
< script src = "scripts/jquery.min.js" > < / script >
< script src = "scripts/jquery.scrollTo.js" > < / script >
< script src = "scripts/jquery.localScroll.js" > < / script >
< script src = "scripts/bootstrap-dropdown.js" > < / script >
< script src = "scripts/toc.js" > < / script >
< script > Sunlight . highlightAll ( { lineNumbers : true , showMenu : true , enableDoclinks : true } ) ; < / script >
< script >
$( function () {
$( "#toc" ).toc( {
2014-04-10 22:13:43 +00:00
anchorName : function(i, heading, prefix) {
2014-03-14 06:36:05 +00:00
return $(heading).attr("id") || ( prefix + i );
},
2013-10-03 00:21:08 +00:00
selectors : "h1,h2,h3,h4",
showAndHide : false,
scrollTo : 60
} );
$( "#toc>ul" ).addClass( "nav nav-pills nav-stacked" );
$( "#main span[id^='toc']" ).addClass( "toc-shim" );
} );
< / script >
< / body >
< / html >