2018-02-12 16:01:20 +00:00
/ * *
* @ author Richard Davey < rich @ photonstorm . com >
2019-01-15 16:20:22 +00:00
* @ copyright 2019 Photon Storm Ltd .
2018-02-12 16:01:20 +00:00
* @ license { @ link https : //github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
* /
2019-03-18 08:08:46 +00:00
var ArrayAdd = require ( '../../utils/array/Add' ) ;
2017-11-08 17:18:41 +00:00
var CircleContains = require ( '../../geom/circle/Contains' ) ;
var Class = require ( '../../utils/Class' ) ;
var CONST = require ( './const' ) ;
2019-01-17 14:04:36 +00:00
var Events = require ( './events' ) ;
2019-03-18 14:12:52 +00:00
var FuzzyGreaterThan = require ( '../../math/fuzzy/GreaterThan' ) ;
var FuzzyLessThan = require ( '../../math/fuzzy/LessThan' ) ;
2019-03-18 08:08:46 +00:00
var CheckOverlapY = require ( './CheckOverlapY' ) ;
2018-04-11 12:17:53 +00:00
var RadToDeg = require ( '../../math/RadToDeg' ) ;
2017-11-08 17:18:41 +00:00
var Rectangle = require ( '../../geom/rectangle/Rectangle' ) ;
var RectangleContains = require ( '../../geom/rectangle/Contains' ) ;
var Vector2 = require ( '../../math/Vector2' ) ;
2018-02-09 03:44:23 +00:00
/ * *
* @ classdesc
2018-04-24 00:48:15 +00:00
* A Dynamic Arcade Body .
2018-02-09 03:44:23 +00:00
*
2018-06-13 16:41:50 +00:00
* Its static counterpart is { @ link Phaser . Physics . Arcade . StaticBody } .
*
2018-02-09 03:44:23 +00:00
* @ class Body
2018-10-10 09:49:13 +00:00
* @ memberof Phaser . Physics . Arcade
2018-02-09 03:44:23 +00:00
* @ constructor
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { Phaser . Physics . Arcade . World } world - The Arcade Physics simulation this Body belongs to .
* @ param { Phaser . GameObjects . GameObject } gameObject - The Game Object this Body belongs to .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
var Body = new Class ( {
initialize :
function Body ( world , gameObject )
{
2018-04-11 12:37:38 +00:00
var width = ( gameObject . width ) ? gameObject . width : 64 ;
var height = ( gameObject . height ) ? gameObject . height : 64 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Arcade Physics simulation this Body belongs to .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # world
* @ type { Phaser . Physics . Arcade . World }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . world = world ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Game Object this Body belongs to .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # gameObject
* @ type { Phaser . GameObjects . GameObject }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . gameObject = gameObject ;
2018-04-11 12:17:53 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Transformations applied to this Body .
2018-04-11 12:17:53 +00:00
*
* @ name Phaser . Physics . Arcade . Body # transform
* @ type { object }
* @ since 3.4 . 0
* /
this . transform = {
x : gameObject . x ,
y : gameObject . y ,
rotation : gameObject . angle ,
scaleX : gameObject . scaleX ,
scaleY : gameObject . scaleY ,
displayOriginX : gameObject . displayOriginX ,
displayOriginY : gameObject . displayOriginY
} ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether the Body ' s boundary is drawn to the debug display .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # debugShowBody
* @ type { boolean }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . debugShowBody = world . defaults . debugShowBody ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether the Body ' s velocity is drawn to the debug display .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # debugShowVelocity
* @ type { boolean }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . debugShowVelocity = world . defaults . debugShowVelocity ;
2018-02-09 03:44:23 +00:00
2019-03-11 11:05:42 +00:00
/ * *
* Whether the Body ' s blocked faces are drawn to the debug display .
*
* @ name Phaser . Physics . Arcade . Body # debugShowVelocity
* @ type { boolean }
* @ since 3.17 . 0
* /
2019-03-15 12:53:59 +00:00
this . debugShowBlocked = world . defaults . debugShowBlocked ;
2019-03-11 11:05:42 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The color of this Body on the debug display .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # debugBodyColor
* @ type { integer }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . debugBodyColor = world . defaults . bodyDebugColor ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is updated by the physics simulation .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # enable
* @ type { boolean }
* @ default true
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . enable = true ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body ' s boundary is circular ( true ) or rectangular ( false ) .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # isCircle
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # setCircle
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
this . isCircle = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* If this Body is circular , this is the unscaled radius of the Body ' s boundary , as set by setCircle ( ) , in source pixels .
* The true radius is equal to ` halfWidth ` .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # radius
* @ type { number }
* @ default 0
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # setCircle
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
this . radius = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The offset of this Body 's position from its Game Object' s position , in source pixels .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # offset
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # setOffset
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
this . offset = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The position of this Body within the simulation .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # position
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . position = new Vector2 ( gameObject . x , gameObject . y ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The position of this Body during the previous step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # prev
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2018-04-11 12:37:38 +00:00
this . prev = new Vector2 ( gameObject . x , gameObject . y ) ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Whether this Body ' s ` rotation ` is affected by its angular acceleration and angular velocity .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # allowRotation
* @ type { boolean }
* @ default true
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . allowRotation = true ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* This body ' s rotation , in degrees , based on its angular acceleration and angular velocity .
2018-04-24 00:48:15 +00:00
* The Body ' s rotation controls the ` angle ` of its Game Object .
* It doesn 't rotate the Body' s boundary , which is always an axis - aligned rectangle or a circle .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # rotation
* @ type { number }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . rotation = gameObject . angle ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s rotation , in degrees , during the previous step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # preRotation
* @ type { number }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . preRotation = gameObject . angle ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The width of the Body ' s boundary , in pixels .
* If the Body is circular , this is also the Body ' s diameter .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # width
* @ type { number }
2018-04-24 00:48:15 +00:00
* @ default 64
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2018-04-11 12:37:38 +00:00
this . width = width ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The height of the Body ' s boundary , in pixels .
* If the Body is circular , this is also the Body ' s diameter .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # height
* @ type { number }
2018-04-24 00:48:15 +00:00
* @ default 64
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2018-04-11 12:37:38 +00:00
this . height = height ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The unscaled width of the Body , in source pixels , as set by setSize ( ) .
* The default is the width of the Body 's Game Object' s texture frame .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # sourceWidth
* @ type { number }
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # setSize
2018-02-09 03:44:23 +00:00
* /
2018-04-11 12:37:38 +00:00
this . sourceWidth = width ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The unscaled height of the Body , in source pixels , as set by setSize ( ) .
* The default is the height of the Body 's Game Object' s texture frame .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # sourceHeight
* @ type { number }
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # setSize
2018-02-09 03:44:23 +00:00
* /
2018-04-11 12:37:38 +00:00
this . sourceHeight = height ;
2017-11-08 17:18:41 +00:00
if ( gameObject . frame )
{
this . sourceWidth = gameObject . frame . realWidth ;
this . sourceHeight = gameObject . frame . realHeight ;
}
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Half the Body ' s width , in pixels .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # halfWidth
* @ type { number }
* @ since 3.0 . 0
* /
2018-04-11 12:37:38 +00:00
this . halfWidth = Math . abs ( width / 2 ) ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Half the Body ' s height , in pixels .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # halfHeight
* @ type { number }
* @ since 3.0 . 0
* /
2018-04-11 12:37:38 +00:00
this . halfHeight = Math . abs ( height / 2 ) ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The center of the Body ' s boundary .
* The midpoint of its ` position ` ( top - left corner ) and its bottom - right corner .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # center
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . center = new Vector2 ( gameObject . x + this . halfWidth , gameObject . y + this . halfHeight ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The Body ' s velocity , in pixels per second .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # velocity
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . velocity = new Vector2 ( ) ;
2019-03-15 13:31:57 +00:00
this . prevVelocity = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2019-03-15 12:53:59 +00:00
* Is the Body asleep ? .
2018-02-09 03:44:23 +00:00
*
2019-03-15 12:53:59 +00:00
* @ name Phaser . Physics . Arcade . Body # sleeping
* @ type { boolean }
2018-10-09 12:40:00 +00:00
* @ readonly
2019-03-14 14:52:07 +00:00
* @ since 3.17 . 0
2018-02-09 03:44:23 +00:00
* /
2019-03-15 12:53:59 +00:00
this . sleeping = false ;
this . _sleep = 0 ;
2019-03-15 13:31:57 +00:00
this . sleepIterations = 60 ;
2019-03-15 12:53:59 +00:00
this . forcePosition = false ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s absolute maximum change in position , in pixels per step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # deltaMax
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . deltaMax = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s change in velocity , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # acceleration
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . acceleration = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Whether this Body ' s velocity is affected by its ` drag ` .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # allowDrag
* @ type { boolean }
* @ default true
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . allowDrag = true ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Absolute loss of velocity due to movement , in pixels per second squared .
2018-06-13 16:41:50 +00:00
* The x and y components are applied separately .
*
* When ` useDamping ` is true , this is 1 minus the damping factor .
* A value of 1 means the Body loses no velocity .
* A value of 0.95 means the Body loses 5 % of its velocity per step .
* A value of 0.5 means the Body loses 50 % of its velocity per step .
*
* Drag is applied only when ` acceleration ` is zero .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # drag
2018-06-13 16:41:50 +00:00
* @ type { ( Phaser . Math . Vector2 | number ) }
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . drag = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Whether this Body ' s position is affected by gravity ( local or world ) .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # allowGravity
* @ type { boolean }
* @ default true
* @ since 3.0 . 0
2018-06-13 16:41:50 +00:00
* @ see Phaser . Physics . Arcade . Body # gravity
* @ see Phaser . Physics . Arcade . World # gravity
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
this . allowGravity = true ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Acceleration due to gravity ( specific to this Body ) , in pixels per second squared .
* Total gravity is the sum of this vector and the simulation ' s ` gravity ` .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # gravity
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
2018-06-13 16:41:50 +00:00
* @ see Phaser . Physics . Arcade . World # gravity
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
this . gravity = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Rebound following a collision , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # bounce
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . bounce = new Vector2 ( ) ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Rebound following a collision with the world boundary , relative to 1.
2018-06-13 16:41:50 +00:00
* If null , ` bounce ` is used instead .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # worldBounce
2018-03-18 23:29:46 +00:00
* @ type { ? Phaser . Math . Vector2 }
2018-02-09 03:44:23 +00:00
* @ default null
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . worldBounce = null ;
2017-11-09 04:02:59 +00:00
// If true this Body will dispatch events
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether the simulation emits a ` worldbounds ` event when this Body collides with the world boundary ( and ` collideWorldBounds ` is also true ) .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # onWorldBounds
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
2019-03-08 20:10:49 +00:00
* @ see Phaser . Physics . Arcade . Events # WORLD _BOUNDS
2018-02-09 03:44:23 +00:00
* /
2017-11-09 04:02:59 +00:00
this . onWorldBounds = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether the simulation emits a ` collide ` event when this Body collides with another .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # onCollide
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
2019-03-08 20:10:49 +00:00
* @ see Phaser . Physics . Arcade . Events # COLLIDE
2018-02-09 03:44:23 +00:00
* /
2017-11-09 04:02:59 +00:00
this . onCollide = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether the simulation emits an ` overlap ` event when this Body overlaps with another .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # onOverlap
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
2019-03-08 20:10:49 +00:00
* @ see Phaser . Physics . Arcade . Events # OVERLAP
2018-02-09 03:44:23 +00:00
* /
2017-11-09 04:02:59 +00:00
this . onOverlap = false ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The Body ' s absolute maximum velocity , in pixels per second .
2018-09-24 23:58:00 +00:00
* The horizontal and vertical components are applied separately .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # maxVelocity
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . maxVelocity = new Vector2 ( 10000 , 10000 ) ;
2019-01-24 00:30:44 +00:00
/ * *
2019-01-24 00:26:29 +00:00
* The maximum speed this Body is allowed to reach .
*
* If not negative it limits the scalar value of speed .
*
* Any negative value means no maximum is being applied .
*
* @ name Phaser . Physics . Arcade . Body # maxSpeed
* @ type { number }
* @ since 3.16 . 0
* /
this . maxSpeed = - 1 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* If this Body is ` immovable ` and in motion , ` friction ` is the proportion of this Body ' s motion received by the riding Body on each axis , relative to 1.
* The default value ( 1 , 0 ) moves the riding Body horizontally in equal proportion to this Body and vertically not at all .
* The horizontal component ( x ) is applied only when two colliding Bodies are separated vertically .
* The vertical component ( y ) is applied only when two colliding Bodies are separated horizontally .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # friction
* @ type { Phaser . Math . Vector2 }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . friction = new Vector2 ( 1 , 0 ) ;
2018-06-03 16:08:08 +00:00
/ * *
* If this Body is using ` drag ` for deceleration this property controls how the drag is applied .
* If set to ` true ` drag will use a damping effect rather than a linear approach . If you are
* creating a game where the Body moves freely at any angle ( i . e . like the way the ship moves in
* the game Asteroids ) then you will get a far smoother and more visually correct deceleration
* by using damping , avoiding the axis - drift that is prone with linear deceleration .
*
2018-06-03 20:17:33 +00:00
* If you enable this property then you should use far smaller ` drag ` values than with linear , as
2018-06-03 16:08:08 +00:00
* they are used as a multiplier on the velocity . Values such as 0.95 will give a nice slow
* deceleration , where - as smaller values , such as 0.5 will stop an object almost immediately .
*
* @ name Phaser . Physics . Arcade . Body # useDamping
* @ type { boolean }
* @ default false
* @ since 3.10 . 0
* /
this . useDamping = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The rate of change of this Body ' s ` rotation ` , in degrees per second .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # angularVelocity
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . angularVelocity = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The Body ' s angular acceleration ( change in angular velocity ) , in degrees per second squared .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # angularAcceleration
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . angularAcceleration = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Loss of angular velocity due to angular movement , in degrees per second .
2018-02-09 03:44:23 +00:00
*
2018-06-13 16:41:50 +00:00
* Angular drag is applied only when angular acceleration is zero .
*
2018-02-09 03:44:23 +00:00
* @ name Phaser . Physics . Arcade . Body # angularDrag
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . angularDrag = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s maximum angular velocity , in degrees per second .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # maxAngular
* @ type { number }
* @ default 1000
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . maxAngular = 1000 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s inertia , relative to a default unit ( 1 ) .
* With ` bounce ` , this affects the exchange of momentum ( velocities ) during collisions .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # mass
* @ type { number }
* @ default 1
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . mass = 1 ;
2019-03-14 14:52:07 +00:00
/ * *
* The number of times the velocity is allowed to flip - flop before being reset to zero .
*
* @ name Phaser . Physics . Arcade . Body # relaxCount
* @ type { integer }
* @ default 10
* @ since 3.7 . 0
* /
this . relaxCount = 10 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The calculated angle of this Body ' s velocity vector , in degrees , during the last step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # angle
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . angle = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The calculated magnitude of the Body ' s velocity , in pixels per second , during the last step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # speed
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . speed = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The direction of the Body ' s velocity , as calculated during the last step .
* If the Body is moving on both axes ( diagonally ) , this describes motion on the vertical axis only .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # facing
* @ type { integer }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . facing = CONST . FACING _NONE ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Whether this Body can be moved by collisions with another Body .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # immovable
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . immovable = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether the Body ' s position and rotation are affected by its velocity , acceleration , drag , and gravity .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # moves
* @ type { boolean }
* @ default true
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . moves = true ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* A flag disabling the default horizontal separation of colliding bodies .
2018-09-25 20:25:47 +00:00
* Pass your own ` collideCallback ` to the collider .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # customSeparateX
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . customSeparateX = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* A flag disabling the default vertical separation of colliding bodies .
2018-09-25 20:25:47 +00:00
* Pass your own ` collideCallback ` to the collider .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # customSeparateY
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . customSeparateY = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The amount of horizontal overlap ( before separation ) , if this Body is colliding with another .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # overlapX
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . overlapX = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The amount of vertical overlap ( before separation ) , if this Body is colliding with another .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # overlapY
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . overlapY = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The amount of overlap ( before separation ) , if this Body is circular and colliding with another circular body .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # overlapR
* @ type { number }
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . overlapR = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-11-07 17:43:43 +00:00
* Whether this Body is overlapped with another and both are not moving .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # embedded
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . embedded = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body interacts with the world boundary .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # collideWorldBounds
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . collideWorldBounds = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is checked for collisions and for which directions .
2018-10-18 22:42:25 +00:00
* You can set ` checkCollision.none = true ` to disable collision checks .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # checkCollision
2019-02-13 14:45:36 +00:00
* @ type { Phaser . Physics . Arcade . Types . ArcadeBodyCollision }
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . checkCollision = { none : false , up : true , down : true , left : true , right : true } ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is colliding with another and in which direction .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # touching
2019-02-13 14:45:36 +00:00
* @ type { Phaser . Physics . Arcade . Types . ArcadeBodyCollision }
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . touching = { none : true , up : false , down : false , left : false , right : false } ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body was colliding with another during the last step , and in which direction .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # wasTouching
2019-02-13 14:45:36 +00:00
* @ type { Phaser . Physics . Arcade . Types . ArcadeBodyCollision }
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . wasTouching = { none : true , up : false , down : false , left : false , right : false } ;
2018-02-09 03:44:23 +00:00
/ * *
2019-03-11 09:19:41 +00:00
* Whether this Body is blocked from moving in a given direction .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # blocked
2019-02-13 14:45:36 +00:00
* @ type { Phaser . Physics . Arcade . Types . ArcadeBodyCollision }
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2019-03-19 23:21:48 +00:00
this . blocked = { none : true , up : false , down : false , left : false , right : false } ;
2019-03-11 09:19:41 +00:00
/ * *
* Whether this Body is colliding with a tile or the world boundary .
*
* @ name Phaser . Physics . Arcade . Body # worldBlocked
* @ type { Phaser . Physics . Arcade . Types . ArcadeBodyCollision }
* @ since 3.17 . 0
* /
2019-03-11 11:05:42 +00:00
this . worldBlocked = { none : true , up : false , down : false , left : false , right : false } ;
2017-11-08 17:18:41 +00:00
2019-03-18 08:08:46 +00:00
this . blockers = [ ] ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether to automatically synchronize this Body 's dimensions to the dimensions of its Game Object' s visual bounds .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # syncBounds
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . GameObjects . Components . GetBounds # getBounds
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
this . syncBounds = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is being moved by the ` moveTo ` or ` moveFrom ` methods .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # isMoving
* @ type { boolean }
* @ default false
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . isMoving = false ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body ' s movement by ` moveTo ` or ` moveFrom ` will be stopped by collisions with other bodies .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # stopVelocityOnCollide
* @ type { boolean }
* @ default true
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . stopVelocityOnCollide = true ;
2017-11-09 04:02:59 +00:00
// read-only
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s physics type ( dynamic or static ) .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # physicsType
* @ type { integer }
2018-10-09 12:40:00 +00:00
* @ readonly
2018-11-07 17:43:43 +00:00
* @ default Phaser . Physics . Arcade . DYNAMIC _BODY
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-09 15:32:08 +00:00
this . physicsType = CONST . DYNAMIC _BODY ;
2017-11-08 17:18:41 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Cached horizontal scale of the Body ' s Game Object .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # _sx
* @ type { number }
* @ private
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . _sx = gameObject . scaleX ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Cached vertical scale of the Body ' s Game Object .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # _sy
* @ type { number }
* @ private
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . _sy = gameObject . scaleY ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The calculated change in the Body ' s horizontal position during the last step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # _dx
* @ type { number }
* @ private
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . _dx = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* The calculated change in the Body ' s vertical position during the last step .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # _dy
* @ type { number }
* @ private
* @ default 0
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . _dy = 0 ;
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Stores the Game Object ' s bounds .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # _bounds
* @ type { Phaser . Geom . Rectangle }
* @ private
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
this . _bounds = new Rectangle ( ) ;
2019-03-14 14:52:07 +00:00
/ * *
2019-03-18 14:12:52 +00:00
* The amount of gravity that was applied to the body in the current frame .
2019-03-14 14:52:07 +00:00
*
2019-03-18 14:12:52 +00:00
* @ name Phaser . Physics . Arcade . Body # _gx
* @ type { number }
2019-03-14 14:52:07 +00:00
* @ private
* @ default 0
* @ since 3.17 . 0
* /
2019-03-18 14:12:52 +00:00
this . _gx = 0 ;
2019-03-14 14:52:07 +00:00
/ * *
2019-03-18 14:12:52 +00:00
* The amount of gravity that was applied to the body in the current frame .
2019-03-14 14:52:07 +00:00
*
2019-03-18 14:12:52 +00:00
* @ name Phaser . Physics . Arcade . Body # _gy
* @ type { number }
2019-03-14 14:52:07 +00:00
* @ private
* @ default 0
* @ since 3.17 . 0
* /
2019-03-18 14:12:52 +00:00
this . _gy = 0 ;
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-11-07 17:43:43 +00:00
* Updates the Body ' s ` transform ` , ` width ` , ` height ` , and ` center ` from its Game Object .
* The Body 's `position` isn' t changed .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # updateBounds
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
updateBounds : function ( )
{
var sprite = this . gameObject ;
2018-04-11 12:17:53 +00:00
// Container?
var transform = this . transform ;
if ( sprite . parentContainer )
{
2018-08-29 15:06:13 +00:00
var matrix = sprite . getWorldTransformMatrix ( this . world . _tempMatrix , this . world . _tempMatrix2 ) ;
2018-04-11 12:17:53 +00:00
transform . x = matrix . tx ;
transform . y = matrix . ty ;
transform . rotation = RadToDeg ( matrix . rotation ) ;
transform . scaleX = matrix . scaleX ;
transform . scaleY = matrix . scaleY ;
2018-09-26 16:15:22 +00:00
transform . displayOriginX = sprite . displayOriginX ;
transform . displayOriginY = sprite . displayOriginY ;
2018-04-11 12:17:53 +00:00
}
else
{
transform . x = sprite . x ;
transform . y = sprite . y ;
transform . rotation = sprite . angle ;
transform . scaleX = sprite . scaleX ;
transform . scaleY = sprite . scaleY ;
2018-09-26 16:15:22 +00:00
transform . displayOriginX = sprite . displayOriginX ;
transform . displayOriginY = sprite . displayOriginY ;
2018-04-11 12:17:53 +00:00
}
2018-06-01 18:18:40 +00:00
var recalc = false ;
2017-11-08 17:18:41 +00:00
if ( this . syncBounds )
{
var b = sprite . getBounds ( this . _bounds ) ;
2018-06-01 18:18:40 +00:00
this . width = b . width ;
this . height = b . height ;
recalc = true ;
2017-11-08 17:18:41 +00:00
}
else
{
2018-04-11 12:17:53 +00:00
var asx = Math . abs ( transform . scaleX ) ;
var asy = Math . abs ( transform . scaleY ) ;
2017-11-08 17:18:41 +00:00
2018-06-01 18:18:40 +00:00
if ( this . _sx !== asx || this . _sy !== asy )
2017-11-08 17:18:41 +00:00
{
this . width = this . sourceWidth * asx ;
this . height = this . sourceHeight * asy ;
this . _sx = asx ;
this . _sy = asy ;
2018-06-01 18:18:40 +00:00
recalc = true ;
2017-11-08 17:18:41 +00:00
}
}
2018-06-01 18:18:40 +00:00
if ( recalc )
2017-11-08 17:18:41 +00:00
{
this . halfWidth = Math . floor ( this . width / 2 ) ;
this . halfHeight = Math . floor ( this . height / 2 ) ;
this . updateCenter ( ) ;
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-06-13 16:41:50 +00:00
* Updates the Body ' s ` center ` from its ` position ` , ` width ` , and ` height ` .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # updateCenter
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
updateCenter : function ( )
{
this . center . set ( this . position . x + this . halfWidth , this . position . y + this . halfHeight ) ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2019-03-05 14:17:57 +00:00
* Prepares the Body for a physics step by resetting all the states and syncing the position
* with the parent Game Object .
*
* This method is only ever called once per game step .
2018-02-09 03:44:23 +00:00
*
2019-03-05 14:17:57 +00:00
* @ method Phaser . Physics . Arcade . Body # preUpdate
2019-03-07 12:31:06 +00:00
* @ since 3.17 . 0
2018-02-09 03:44:23 +00:00
* /
2019-03-05 14:17:57 +00:00
preUpdate : function ( )
2017-11-08 17:18:41 +00:00
{
2019-03-11 09:19:41 +00:00
var touching = this . touching ;
var blocked = this . blocked ;
var worldBlocked = this . worldBlocked ;
touching . none = true ;
touching . up = false ;
touching . down = false ;
touching . left = false ;
touching . right = false ;
2019-03-13 17:27:11 +00:00
blocked . none = true ;
blocked . up = false ;
blocked . down = false ;
blocked . left = false ;
blocked . right = false ;
2019-03-11 11:05:42 +00:00
worldBlocked . none = true ;
2019-03-11 09:19:41 +00:00
worldBlocked . left = false ;
worldBlocked . right = false ;
worldBlocked . up = false ;
worldBlocked . down = false ;
2017-11-08 17:18:41 +00:00
this . overlapR = 0 ;
this . overlapX = 0 ;
this . overlapY = 0 ;
this . embedded = false ;
2019-03-15 12:53:59 +00:00
this . forcePosition = false ;
2017-11-08 17:18:41 +00:00
2018-04-11 12:17:53 +00:00
// Updates the transform values
2017-11-08 17:18:41 +00:00
this . updateBounds ( ) ;
2019-03-19 23:21:48 +00:00
var parent = this . transform ;
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
this . x = parent . x + parent . scaleX * ( this . offset . x - parent . displayOriginX ) ;
this . y = parent . y + parent . scaleY * ( this . offset . y - parent . displayOriginY ) ;
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
this . rotation = parent . rotation ;
2019-03-18 08:08:46 +00:00
if ( this . collideWorldBounds )
2019-03-11 09:19:41 +00:00
{
2019-03-18 08:08:46 +00:00
this . checkWorldBounds ( ) ;
2019-03-11 09:19:41 +00:00
}
else
{
this . updateCenter ( ) ;
}
2019-03-19 23:21:48 +00:00
/ *
if ( this . collideWorldBounds )
{
if ( this . checkWorldBounds ( ) )
{
// If the bounds check has forced a new position, integrate it here
if ( this . forcePosition )
{
// Maybe reset?
}
}
}
else
{
this . updateCenter ( ) ;
}
* /
// Reset deltas (world bounds checks have no effect on this)
this . prev . x = this . x ;
this . prev . y = this . y ;
2019-03-15 19:22:32 +00:00
this . preRotation = this . rotation ;
2019-03-05 14:17:57 +00:00
} ,
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
sleep : function ( )
{
if ( ! this . sleeping )
{
this . sleeping = true ;
this . velocity . set ( 0 ) ;
this . prevVelocity . set ( 0 ) ;
}
} ,
2019-03-15 13:31:57 +00:00
wake : function ( )
{
if ( this . sleeping )
{
2019-03-18 08:08:46 +00:00
console . log ( this . gameObject . name , 'woken' ) ;
2019-03-15 13:31:57 +00:00
this . sleeping = false ;
this . _sleep = 0 ;
}
} ,
2019-03-18 08:08:46 +00:00
setBlocker : function ( bodyB )
{
2019-03-19 23:21:48 +00:00
if ( bodyB )
{
ArrayAdd ( this . blockers , bodyB ) ;
}
2019-03-18 08:08:46 +00:00
} ,
updateBlockers : function ( )
{
2019-03-19 23:21:48 +00:00
// Iterate through the list of previous frame blockers and see if they are still there
2019-03-18 08:08:46 +00:00
var currentBlockers = [ ] ;
var prevBlockers = this . blockers ;
for ( var i = 0 ; i < prevBlockers . length ; i ++ )
{
var bodyB = prevBlockers [ i ] ;
2019-03-19 23:21:48 +00:00
if ( bodyB && bodyB . enable )
2019-03-18 08:08:46 +00:00
{
if ( CheckOverlapY ( this , bodyB , 1 ) )
{
currentBlockers . push ( bodyB ) ;
}
}
}
2019-03-18 14:12:52 +00:00
// If we can't move anywhere, we need to kill velocity now
2019-03-19 23:21:48 +00:00
/ *
2019-03-18 14:12:52 +00:00
var worldBlocked = this . worldBlocked ;
if ( worldBlocked . up && worldBlocked . down )
{
this . velocity . y = 0 ;
}
if ( worldBlocked . left && worldBlocked . right )
{
this . velocity . x = 0 ;
}
2019-03-19 23:21:48 +00:00
* /
2019-03-18 14:12:52 +00:00
2019-03-18 08:08:46 +00:00
this . blockers = currentBlockers ;
} ,
2019-03-05 14:17:57 +00:00
/ * *
* Performs a single physics step and updates the body velocity , angle , speed and other
* properties .
*
* This method can be called multiple times per game step .
*
* The results are synced back to the Game Object in ` postUpdate ` .
*
* @ method Phaser . Physics . Arcade . Body # update
2019-03-08 20:10:49 +00:00
* @ fires Phaser . Physics . Arcade . Events # WORLD _BOUNDS
2019-03-05 14:17:57 +00:00
* @ since 3.0 . 0
*
* @ param { number } delta - The delta time , in seconds , elapsed since the last frame .
* /
update : function ( delta )
{
2019-03-18 08:08:46 +00:00
this . updateBlockers ( ) ;
2019-03-11 22:47:59 +00:00
var velocity = this . velocity ;
2019-03-13 02:26:52 +00:00
var position = this . position ;
2019-03-11 22:47:59 +00:00
2019-03-15 13:31:57 +00:00
// Has it been woken up?
if ( this . sleeping && ! velocity . equals ( this . prevVelocity ) )
{
2019-03-19 23:21:48 +00:00
if ( ( velocity . y < 0 && ! this . isBlockedUp ( ) ) || ( velocity . y > 0 && ! this . isBlockedDown ( ) ) )
2019-03-18 08:08:46 +00:00
{
this . wake ( ) ;
}
}
if ( this . sleeping )
{
return ;
2019-03-15 13:31:57 +00:00
}
2019-03-18 08:08:46 +00:00
if ( this . moves )
2017-11-08 17:18:41 +00:00
{
2018-06-01 18:18:40 +00:00
this . world . updateMotion ( this , delta ) ;
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
// World Bounds check
if ( ! this . collideWorldBounds || this . worldReboundCheck ( ) )
{
position . x += this . getMoveX ( velocity . x * delta ) ;
position . y += this . getMoveY ( velocity . y * delta ) ;
}
2019-03-08 20:10:49 +00:00
}
2019-03-11 22:47:59 +00:00
// Calculate the delta
2019-03-13 02:26:52 +00:00
this . _dx = position . x - this . prev . x ;
this . _dy = position . y - this . prev . y ;
2019-03-11 22:47:59 +00:00
2019-03-11 11:05:42 +00:00
this . updateCenter ( ) ;
2019-03-15 19:22:32 +00:00
var vx = velocity . x ;
var vy = velocity . y ;
this . angle = Math . atan2 ( vy , vx ) ;
this . speed = Math . sqrt ( vx * vx + vy * vy ) ;
2019-03-11 11:05:42 +00:00
2019-03-08 20:10:49 +00:00
// Now the update will throw collision checks at the Body
// And finally we'll integrate the new position back to the Sprite in postUpdate
2017-11-08 17:18:41 +00:00
} ,
2019-03-19 23:21:48 +00:00
// Return true if body should be repositioned, otherwise return false to avoid positioning
2019-03-18 14:12:52 +00:00
worldReboundCheck : function ( )
{
2019-03-19 23:21:48 +00:00
var blocked = this . blocked ;
2019-03-18 14:12:52 +00:00
var velocity = this . velocity ;
2019-03-19 23:21:48 +00:00
var prevVelocity = this . prevVelocity ;
var worldBlocked = this . worldBlocked ;
2019-03-18 14:12:52 +00:00
var bx = ( this . worldBounce ) ? this . worldBounce . x : this . bounce . x ;
var by = ( this . worldBounce ) ? this . worldBounce . y : this . bounce . y ;
2019-03-19 23:21:48 +00:00
if ( ! this . collideWorldBounds || worldBlocked . none || velocity . equals ( 0 ) || ( bx === 0 && by === 0 ) )
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
// Nothing to do
return true ;
}
// Reverse the velocity for the world bounce?
if ( by !== 0 && velocity . y !== 0 )
{
if ( ( worldBlocked . down && ! blocked . up && velocity . y > 0 ) || ( worldBlocked . up && ! blocked . down && velocity . y < 0 ) )
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
var gravityY = this . _gy ;
var newVelocityY = velocity . y * by ;
if ( gravityY > 0 )
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
// Gravity is pulling them down
if ( newVelocityY > 0 && ( newVelocityY < gravityY || FuzzyLessThan ( newVelocityY , gravityY , 2 ) ) )
{
// velocity.y = 0;
// prevVelocity.y = 0;
this . sleep ( ) ;
2019-03-18 14:12:52 +00:00
2019-03-19 23:21:48 +00:00
console . log ( this . gameObject . name , 'rebound up too small, zeroing' , newVelocityY , gravityY ) ;
console . log ( 'zero y' , this . y , 'gy' , this . gameObject . y , worldBlocked . down ) ;
return false ;
}
else
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
velocity . y *= - by ;
console . log ( this . gameObject . name , 'rebounded up' , newVelocityY , gravityY ) ;
if ( this . onWorldBounds )
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
this . world . emit ( Events . WORLD _BOUNDS , this , worldBlocked . up , worldBlocked . down , worldBlocked . left , worldBlocked . right ) ;
2019-03-18 14:12:52 +00:00
}
2019-03-19 23:21:48 +00:00
return true ;
2019-03-18 14:12:52 +00:00
}
2019-03-19 23:21:48 +00:00
}
else if ( gravityY < 0 )
{
// Gravity is pulling them up
if ( newVelocityY < 0 && ( newVelocityY > gravityY || FuzzyGreaterThan ( newVelocityY , gravityY , 2 ) ) )
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
velocity . y = 0 ;
prevVelocity . y = 0 ;
console . log ( this . gameObject . name , 'rebound down too small, zeroing' , newVelocityY , gravityY ) ;
return false ;
}
else
{
velocity . y *= - by ;
console . log ( this . gameObject . name , 'rebounded down' , newVelocityY , gravityY ) ;
if ( this . onWorldBounds )
2019-03-18 14:12:52 +00:00
{
2019-03-19 23:21:48 +00:00
this . world . emit ( Events . WORLD _BOUNDS , this , worldBlocked . up , worldBlocked . down , worldBlocked . left , worldBlocked . right ) ;
2019-03-18 14:12:52 +00:00
}
2019-03-19 23:21:48 +00:00
return true ;
2019-03-18 14:12:52 +00:00
}
}
}
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Feeds the Body results back into the parent Game Object .
2019-03-05 14:17:57 +00:00
*
* This method is only ever called once per game step .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # postUpdate
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
postUpdate : function ( )
{
2019-03-11 11:05:42 +00:00
var dx = this . position . x - this . prev . x ;
var dy = this . position . y - this . prev . y ;
2019-03-11 09:19:41 +00:00
var gameObject = this . gameObject ;
2019-03-15 12:53:59 +00:00
if ( this . moves && ! this . sleeping )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
var mx = this . deltaMax . x ;
var my = this . deltaMax . y ;
if ( mx !== 0 && dx !== 0 )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
if ( dx < 0 && dx < - mx )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
dx = - mx ;
2017-11-08 17:18:41 +00:00
}
2019-03-05 14:17:57 +00:00
else if ( dx > 0 && dx > mx )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
dx = mx ;
2017-11-08 17:18:41 +00:00
}
}
2019-03-05 14:17:57 +00:00
if ( my !== 0 && dy !== 0 )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
if ( dy < 0 && dy < - my )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
dy = - my ;
2017-11-08 17:18:41 +00:00
}
2019-03-05 14:17:57 +00:00
else if ( dy > 0 && dy > my )
2017-11-08 17:18:41 +00:00
{
2019-03-05 14:17:57 +00:00
dy = my ;
2017-11-08 17:18:41 +00:00
}
}
2019-03-18 14:12:52 +00:00
if ( dx < 0 )
{
this . facing = CONST . FACING _LEFT ;
}
else if ( dx > 0 )
{
this . facing = CONST . FACING _RIGHT ;
}
if ( dy < 0 )
{
this . facing = CONST . FACING _UP ;
}
else if ( dy > 0 )
{
this . facing = CONST . FACING _DOWN ;
}
2019-03-15 12:53:59 +00:00
if ( this . forcePosition )
{
gameObject . x = this . x ;
gameObject . y = this . y ;
2019-03-15 13:31:57 +00:00
dx = 0 ;
dy = 0 ;
2019-03-15 12:53:59 +00:00
}
else
{
gameObject . x += dx ;
gameObject . y += dy ;
}
2019-03-11 12:26:58 +00:00
}
2019-03-11 09:19:41 +00:00
2019-03-05 14:17:57 +00:00
this . _dx = dx ;
this . _dy = dy ;
2019-03-15 13:31:57 +00:00
if ( this . allowRotation && ! this . sleeping )
2017-11-08 17:18:41 +00:00
{
2019-03-11 09:19:41 +00:00
gameObject . angle += this . deltaZ ( ) ;
2017-11-08 17:18:41 +00:00
}
2019-03-15 13:31:57 +00:00
// Check for sleeping state
2019-03-13 17:27:11 +00:00
2019-03-19 23:21:48 +00:00
var worldBlocked = this . worldBlocked ;
// if (Math.abs(dy) < 1 && this.isBlockedUp())
2019-03-18 08:08:46 +00:00
if ( Math . abs ( dy ) < 1 && ! this . worldBlocked . none )
2019-03-15 12:53:59 +00:00
{
2019-03-15 13:31:57 +00:00
if ( this . _sleep < this . sleepIterations )
2019-03-15 12:53:59 +00:00
{
this . _sleep ++ ;
2019-03-14 17:20:47 +00:00
2019-03-15 13:31:57 +00:00
if ( this . _sleep >= this . sleepIterations )
2019-03-15 12:53:59 +00:00
{
2019-03-19 23:21:48 +00:00
this . sleep ( ) ;
2019-03-15 12:53:59 +00:00
}
}
}
2019-03-19 23:21:48 +00:00
// else if (this._sleep > 0 && !this.isBlockedY())
2019-03-18 14:12:52 +00:00
else if ( this . _sleep > 0 && ! this . worldBlocked . up && ! this . worldBlocked . down )
2019-03-15 12:53:59 +00:00
{
2019-03-15 13:31:57 +00:00
// Waking up? Do it progressively, not instantly, to ensure it isn't just a step fluctuation
2019-03-18 08:08:46 +00:00
this . _sleep *= 0.8 ;
2019-03-14 17:20:47 +00:00
2019-03-15 13:31:57 +00:00
if ( this . _sleep <= 0 )
{
2019-03-18 14:12:52 +00:00
console . log ( 'body woken from postUpdate' , dy ) ;
2019-03-15 19:22:32 +00:00
this . wake ( ) ;
2019-03-15 12:53:59 +00:00
}
}
2019-03-14 14:52:07 +00:00
2019-03-15 13:31:57 +00:00
// Store collision flags
var wasTouching = this . wasTouching ;
var touching = this . touching ;
wasTouching . none = touching . none ;
wasTouching . up = touching . up ;
wasTouching . down = touching . down ;
wasTouching . left = touching . left ;
wasTouching . right = touching . right ;
2019-03-18 08:08:46 +00:00
// this.prev.x = this.position.x;
// this.prev.y = this.position.y;
2019-03-15 13:31:57 +00:00
this . prevVelocity . x = this . velocity . x ;
this . prevVelocity . y = this . velocity . y ;
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Checks for collisions between this Body and the world boundary and separates them .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # checkWorldBounds
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { boolean } True if this Body is colliding with the world boundary .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
checkWorldBounds : function ( )
{
var pos = this . position ;
var bounds = this . world . bounds ;
var check = this . world . checkCollision ;
2019-03-08 20:10:49 +00:00
var set = false ;
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
// if (check.left && pos.x < bounds.x)
// {
// set = true;
// pos.x = bounds.x;
// worldBlocked.left = true;
// }
// else if (check.right && this.right > bounds.right)
// {
// set = true;
// pos.x = bounds.right - this.width;
// worldBlocked.right = true;
// }
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
if ( check . up && pos . y <= ( bounds . y + 1 ) )
2017-11-08 17:18:41 +00:00
{
2019-03-08 20:10:49 +00:00
set = true ;
2019-03-15 19:22:32 +00:00
this . setWorldBlockedUp ( bounds . y ) ;
2017-11-08 17:18:41 +00:00
}
2019-03-19 23:21:48 +00:00
else if ( check . down && this . bottom >= ( bounds . bottom - 1 ) )
2017-11-08 17:18:41 +00:00
{
2019-03-08 20:10:49 +00:00
set = true ;
2019-03-15 19:22:32 +00:00
this . setWorldBlockedDown ( bounds . bottom ) ;
2019-03-08 20:10:49 +00:00
}
if ( set )
{
this . updateCenter ( ) ;
2017-11-08 17:18:41 +00:00
}
2019-03-08 20:10:49 +00:00
return set ;
2017-11-08 17:18:41 +00:00
} ,
2019-03-11 17:28:43 +00:00
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the offset of the Body 's position from its Game Object' s position .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setOffset
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal offset , in source pixels .
* @ param { number } [ y = x ] - The vertical offset , in source pixels .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-11 03:52:23 +00:00
setOffset : function ( x , y )
2017-11-08 17:18:41 +00:00
{
2017-11-11 03:52:23 +00:00
if ( y === undefined ) { y = x ; }
this . offset . set ( x , y ) ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sizes and positions this Body ' s boundary , as a rectangle .
2018-07-31 08:39:22 +00:00
* Modifies the Body ` offset ` if ` center ` is true ( the default ) .
* Resets the width and height to match current frame , if no width and height provided and a frame is found .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setSize
* @ since 3.0 . 0
*
2018-07-31 08:39:22 +00:00
* @ param { integer } [ width ] - The width of the Body in pixels . Cannot be zero . If not given , and the parent Game Object has a frame , it will use the frame width .
* @ param { integer } [ height ] - The height of the Body in pixels . Cannot be zero . If not given , and the parent Game Object has a frame , it will use the frame height .
2018-09-01 09:14:22 +00:00
* @ param { boolean } [ center = true ] - Modify the Body 's `offset`, placing the Body' s center on its Game Object ' s center . Only works if the Game Object has the ` getCenter ` method .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-11 03:52:23 +00:00
setSize : function ( width , height , center )
{
if ( center === undefined ) { center = true ; }
2017-11-08 17:18:41 +00:00
2018-02-27 01:08:55 +00:00
var gameObject = this . gameObject ;
2018-07-31 08:39:22 +00:00
if ( ! width && gameObject . frame )
{
width = gameObject . frame . realWidth ;
}
if ( ! height && gameObject . frame )
{
height = gameObject . frame . realHeight ;
}
2018-06-13 16:41:50 +00:00
2017-11-08 17:18:41 +00:00
this . sourceWidth = width ;
this . sourceHeight = height ;
2017-11-11 03:52:23 +00:00
2017-11-08 17:18:41 +00:00
this . width = this . sourceWidth * this . _sx ;
this . height = this . sourceHeight * this . _sy ;
2017-11-11 03:52:23 +00:00
2017-11-08 17:18:41 +00:00
this . halfWidth = Math . floor ( this . width / 2 ) ;
this . halfHeight = Math . floor ( this . height / 2 ) ;
this . updateCenter ( ) ;
2018-02-27 01:08:55 +00:00
if ( center && gameObject . getCenter )
2017-11-11 03:52:23 +00:00
{
var ox = gameObject . displayWidth / 2 ;
var oy = gameObject . displayHeight / 2 ;
this . offset . set ( ox - this . halfWidth , oy - this . halfHeight ) ;
}
2017-11-08 17:18:41 +00:00
this . isCircle = false ;
this . radius = 0 ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sizes and positions this Body ' s boundary , as a circle .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setCircle
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } radius - The radius of the Body , in source pixels .
* @ param { number } [ offsetX ] - The horizontal offset of the Body from its Game Object , in source pixels .
* @ param { number } [ offsetY ] - The vertical offset of the Body from its Game Object , in source pixels .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-08 17:18:41 +00:00
setCircle : function ( radius , offsetX , offsetY )
{
if ( offsetX === undefined ) { offsetX = this . offset . x ; }
if ( offsetY === undefined ) { offsetY = this . offset . y ; }
if ( radius > 0 )
{
this . isCircle = true ;
this . radius = radius ;
this . sourceWidth = radius * 2 ;
this . sourceHeight = radius * 2 ;
this . width = this . sourceWidth * this . _sx ;
this . height = this . sourceHeight * this . _sy ;
this . halfWidth = Math . floor ( this . width / 2 ) ;
this . halfHeight = Math . floor ( this . height / 2 ) ;
this . offset . set ( offsetX , offsetY ) ;
this . updateCenter ( ) ;
}
else
{
this . isCircle = false ;
}
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-02-15 01:49:55 +00:00
* Resets this Body to the given coordinates . Also positions its parent Game Object to the same coordinates .
2018-04-24 00:48:15 +00:00
* If the Body had any velocity or acceleration it is lost as a result of calling this .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # reset
* @ since 3.0 . 0
*
2018-02-15 01:49:55 +00:00
* @ param { number } x - The horizontal position to place the Game Object and Body .
* @ param { number } y - The vertical position to place the Game Object and Body .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
reset : function ( x , y )
{
this . stop ( ) ;
2018-02-15 01:49:55 +00:00
var gameObject = this . gameObject ;
2017-11-08 17:18:41 +00:00
2018-02-15 01:49:55 +00:00
gameObject . setPosition ( x , y ) ;
2017-11-08 17:18:41 +00:00
2018-02-15 01:49:55 +00:00
gameObject . getTopLeft ( this . position ) ;
2017-11-08 17:18:41 +00:00
2018-02-15 01:49:55 +00:00
this . prev . copy ( this . position ) ;
this . rotation = gameObject . angle ;
this . preRotation = gameObject . angle ;
2017-11-08 17:18:41 +00:00
this . updateBounds ( ) ;
this . updateCenter ( ) ;
} ,
2019-03-08 20:10:49 +00:00
zeroX : function ( )
{
this . velocity . x = 0 ;
this . prev . x = this . position . x ;
this . _dx = 0 ;
return this ;
} ,
zeroY : function ( )
{
this . velocity . y = 0 ;
this . prev . y = this . position . y ;
this . _dy = 0 ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets acceleration , velocity , and speed to zero .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # stop
* @ since 3.0 . 0
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-08 17:18:41 +00:00
stop : function ( )
{
this . velocity . set ( 0 ) ;
this . acceleration . set ( 0 ) ;
this . speed = 0 ;
this . angularVelocity = 0 ;
this . angularAcceleration = 0 ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Copies the coordinates of this Body ' s edges into an object .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # getBounds
* @ since 3.0 . 0
*
2019-02-13 14:45:36 +00:00
* @ param { Phaser . Physics . Arcade . Types . ArcadeBodyBounds } obj - An object to copy the values into .
2018-02-09 03:44:23 +00:00
*
2019-02-13 14:45:36 +00:00
* @ return { Phaser . Physics . Arcade . Types . ArcadeBodyBounds } - An object with { x , y , right , bottom } .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
getBounds : function ( obj )
{
obj . x = this . x ;
obj . y = this . y ;
obj . right = this . right ;
obj . bottom = this . bottom ;
return obj ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Tests if the coordinates are within this Body ' s boundary .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # hitTest
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal coordinate .
* @ param { number } y - The vertical coordinate .
2018-02-09 03:44:23 +00:00
*
2018-04-24 00:48:15 +00:00
* @ return { boolean } True if ( x , y ) is within this Body .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
hitTest : function ( x , y )
{
return ( this . isCircle ) ? CircleContains ( this , x , y ) : RectangleContains ( this , x , y ) ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is touching a tile or the world boundary while moving down .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # onFloor
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # blocked
2018-02-09 03:44:23 +00:00
*
2018-04-24 00:48:15 +00:00
* @ return { boolean } True if touching .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
onFloor : function ( )
{
return this . blocked . down ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is touching a tile or the world boundary while moving up .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # onCeiling
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # blocked
2018-02-09 03:44:23 +00:00
*
2018-04-24 00:48:15 +00:00
* @ return { boolean } True if touching .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
onCeiling : function ( )
{
return this . blocked . up ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body is touching a tile or the world boundary while moving left or right .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # onWall
* @ since 3.0 . 0
2018-04-24 00:48:15 +00:00
* @ see Phaser . Physics . Arcade . Body # blocked
2018-02-09 03:44:23 +00:00
*
2018-04-24 00:48:15 +00:00
* @ return { boolean } True if touching .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
onWall : function ( )
{
return ( this . blocked . left || this . blocked . right ) ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-06-01 18:18:40 +00:00
* The absolute ( non - negative ) change in this Body ' s horizontal position from the previous step .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # deltaAbsX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { number } The delta value .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
deltaAbsX : function ( )
{
2019-03-08 20:10:49 +00:00
return Math . abs ( this . _dx ) ;
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-06-01 18:18:40 +00:00
* The absolute ( non - negative ) change in this Body ' s vertical position from the previous step .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # deltaAbsY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { number } The delta value .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
deltaAbsY : function ( )
{
2019-03-08 20:10:49 +00:00
return Math . abs ( this . _dy ) ;
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The change in this Body ' s horizontal position from the previous step .
2018-06-01 18:18:40 +00:00
* This value is set during the Body ' s update phase .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # deltaX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { number } The delta value .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
deltaX : function ( )
{
2018-09-04 11:16:24 +00:00
return this . _dx ;
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The change in this Body ' s vertical position from the previous step .
2018-06-01 18:18:40 +00:00
* This value is set during the Body ' s update phase .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # deltaY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { number } The delta value .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
deltaY : function ( )
{
2018-09-04 11:16:24 +00:00
return this . _dy ;
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The change in this Body ' s rotation from the previous step , in degrees .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # deltaZ
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { number } The delta value .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
deltaZ : function ( )
{
return this . rotation - this . preRotation ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Disables this Body and marks it for deletion by the simulation .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # destroy
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
destroy : function ( )
{
2018-02-15 01:49:55 +00:00
this . enable = false ;
2018-02-14 19:36:34 +00:00
2018-12-06 14:47:06 +00:00
if ( this . world )
{
this . world . pendingDestroy . set ( this ) ;
}
2017-11-08 17:18:41 +00:00
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Draws this Body ' s boundary and velocity , if enabled .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # drawDebug
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { Phaser . GameObjects . Graphics } graphic - The Graphics object to draw on .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
drawDebug : function ( graphic )
{
var pos = this . position ;
2018-09-26 16:15:22 +00:00
2017-11-11 03:52:23 +00:00
var x = pos . x + this . halfWidth ;
var y = pos . y + this . halfHeight ;
2017-11-08 17:18:41 +00:00
2019-03-19 23:21:48 +00:00
var worldBlockedColor = 0xffff00 ;
2019-03-15 12:53:59 +00:00
var blockedColor = this . world . defaults . blockedDebugColor ;
var sleepColor = this . world . defaults . sleepDebugColor ;
2017-11-11 03:52:23 +00:00
2019-03-15 19:22:32 +00:00
// var thickness = graphic.defaultStrokeWidth;
var thickness = 2 ;
2019-03-15 12:53:59 +00:00
var halfThickness = thickness / 2 ;
2017-11-08 17:18:41 +00:00
2019-03-15 12:53:59 +00:00
// Top Left
var x1 = pos . x ;
var y1 = pos . y ;
// Top Right
var x2 = this . right ;
var y2 = y1 ;
2019-03-11 11:05:42 +00:00
2019-03-15 12:53:59 +00:00
// Bottom Left
var x3 = x1 ;
var y3 = this . bottom ;
2019-03-11 11:05:42 +00:00
2019-03-15 12:53:59 +00:00
// Bottom Right
var x4 = x2 ;
var y4 = y3 ;
2019-03-11 11:05:42 +00:00
2019-03-19 23:21:48 +00:00
var blocked = this . blocked ;
var worldBlocked = this . worldBlocked ;
2019-03-11 11:05:42 +00:00
2019-03-15 12:53:59 +00:00
var color ;
2019-03-11 11:05:42 +00:00
2019-03-15 12:53:59 +00:00
if ( this . debugShowBody )
{
// Top
color = ( this . sleeping ) ? sleepColor : this . debugBodyColor ;
2019-03-11 11:05:42 +00:00
2019-03-19 23:21:48 +00:00
if ( blocked . up || worldBlocked . up )
2019-03-11 11:05:42 +00:00
{
2019-03-19 23:21:48 +00:00
color = ( worldBlocked . up ) ? worldBlockedColor : blockedColor ;
2019-03-11 11:05:42 +00:00
}
2019-03-15 12:53:59 +00:00
graphic . lineStyle ( thickness , color ) . lineBetween ( x1 , y1 + halfThickness , x2 , y2 + halfThickness ) ;
// Bottom
color = ( this . sleeping ) ? sleepColor : this . debugBodyColor ;
2019-03-19 23:21:48 +00:00
if ( blocked . down || worldBlocked . down )
2019-03-11 11:05:42 +00:00
{
2019-03-19 23:21:48 +00:00
color = ( worldBlocked . down ) ? worldBlockedColor : blockedColor ;
2019-03-11 11:05:42 +00:00
}
2019-03-11 17:28:43 +00:00
2019-03-15 12:53:59 +00:00
graphic . lineStyle ( thickness , color ) . lineBetween ( x3 , y3 - halfThickness , x4 , y4 - halfThickness ) ;
// Left
color = ( this . sleeping ) ? sleepColor : this . debugBodyColor ;
2019-03-19 23:21:48 +00:00
if ( blocked . left || worldBlocked . left )
2019-03-11 17:28:43 +00:00
{
2019-03-19 23:21:48 +00:00
color = ( worldBlocked . left ) ? worldBlockedColor : blockedColor ;
2019-03-11 17:28:43 +00:00
}
2019-03-15 12:53:59 +00:00
graphic . lineStyle ( thickness , color ) . lineBetween ( x1 + halfThickness , y1 , x3 + halfThickness , y3 ) ;
// Right
color = ( this . sleeping ) ? sleepColor : this . debugBodyColor ;
2019-03-19 23:21:48 +00:00
if ( blocked . right || worldBlocked . right )
2019-03-11 17:28:43 +00:00
{
2019-03-19 23:21:48 +00:00
color = ( worldBlocked . right ) ? worldBlockedColor : blockedColor ;
2019-03-11 17:28:43 +00:00
}
2019-03-15 12:53:59 +00:00
graphic . lineStyle ( thickness , color ) . lineBetween ( x2 - halfThickness , y2 , x4 - halfThickness , y4 ) ;
2019-03-11 11:05:42 +00:00
}
2019-03-15 12:53:59 +00:00
// if (this.isCircle)
// {
// graphic.strokeCircle(x, y, this.width / 2);
// }
2017-11-08 17:18:41 +00:00
if ( this . debugShowVelocity )
{
2018-09-26 16:50:48 +00:00
graphic . lineStyle ( graphic . defaultStrokeWidth , this . world . defaults . velocityDebugColor , 1 ) ;
2017-11-09 23:56:12 +00:00
graphic . lineBetween ( x , y , x + this . velocity . x / 2 , y + this . velocity . y / 2 ) ;
2017-11-08 17:18:41 +00:00
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Whether this Body will be drawn to the debug display .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # willDrawDebug
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ return { boolean } True if either ` debugShowBody ` or ` debugShowVelocity ` are enabled .
2018-02-09 03:44:23 +00:00
* /
2017-11-08 17:18:41 +00:00
willDrawDebug : function ( )
{
return ( this . debugShowBody || this . debugShowVelocity ) ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets whether this Body collides with the world boundary .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setCollideWorldBounds
* @ since 3.0 . 0
*
2018-05-22 15:19:18 +00:00
* @ param { boolean } [ value = true ] - True ( collisions ) or false ( no collisions ) .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setCollideWorldBounds : function ( value )
{
2018-05-22 15:19:18 +00:00
if ( value === undefined ) { value = true ; }
2017-11-09 04:02:59 +00:00
this . collideWorldBounds = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s velocity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setVelocity
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal velocity , in pixels per second .
2018-06-01 18:18:40 +00:00
* @ param { number } [ y = x ] - The vertical velocity , in pixels per second .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setVelocity : function ( x , y )
{
this . velocity . set ( x , y ) ;
2018-08-08 16:31:22 +00:00
this . speed = Math . sqrt ( x * x + y * y ) ;
2017-11-09 04:02:59 +00:00
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s horizontal velocity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setVelocityX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The velocity , in pixels per second .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setVelocityX : function ( value )
{
this . velocity . x = value ;
2018-08-08 16:31:22 +00:00
var vx = value ;
var vy = this . velocity . y ;
this . speed = Math . sqrt ( vx * vx + vy * vy ) ;
2017-11-09 04:02:59 +00:00
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s vertical velocity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setVelocityY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The velocity , in pixels per second .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setVelocityY : function ( value )
{
this . velocity . y = value ;
2018-08-08 16:31:22 +00:00
var vx = this . velocity . x ;
var vy = value ;
this . speed = Math . sqrt ( vx * vx + vy * vy ) ;
2017-11-09 04:02:59 +00:00
return this ;
} ,
2018-06-01 18:18:40 +00:00
/ * *
* Sets the Body ' s maximum velocity .
*
* @ method Phaser . Physics . Arcade . Body # setMaxVelocity
* @ since 3.10 . 0
*
* @ param { number } x - The horizontal velocity , in pixels per second .
* @ param { number } [ y = x ] - The vertical velocity , in pixels per second .
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
setMaxVelocity : function ( x , y )
{
this . maxVelocity . set ( x , y ) ;
return this ;
} ,
2019-01-24 00:26:29 +00:00
/ * *
* Sets the maximum speed the Body can move .
*
* @ method Phaser . Physics . Arcade . Body # setMaxSpeed
* @ since 3.16 . 0
*
* @ param { number } value - The maximum speed value , in pixels per second . Set to a negative value to disable .
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
setMaxSpeed : function ( value )
{
this . maxSpeed = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s bounce .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setBounce
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal bounce , relative to 1.
* @ param { number } y - The vertical bounce , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setBounce : function ( x , y )
{
this . bounce . set ( x , y ) ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s horizontal bounce .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setBounceX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The bounce , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setBounceX : function ( value )
{
this . bounce . x = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s vertical bounce .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setBounceY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The bounce , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setBounceY : function ( value )
{
this . bounce . y = value ;
return this ;
} ,
2019-03-08 20:10:49 +00:00
setTouchingUp : function ( )
{
var touching = this . touching ;
touching . up = true ;
touching . none = false ;
return this ;
} ,
setTouchingDown : function ( )
{
var touching = this . touching ;
touching . down = true ;
touching . none = false ;
return this ;
} ,
setTouchingLeft : function ( )
{
var touching = this . touching ;
touching . left = true ;
touching . none = false ;
return this ;
} ,
setTouchingRight : function ( )
{
var touching = this . touching ;
touching . right = true ;
touching . none = false ;
return this ;
} ,
2019-03-11 12:26:58 +00:00
setBlockedUp : function ( by )
2019-03-08 20:10:49 +00:00
{
var blocked = this . blocked ;
blocked . up = true ;
blocked . none = false ;
2019-03-19 23:21:48 +00:00
this . setBlocker ( by ) ;
2019-03-11 12:26:58 +00:00
2019-03-08 20:10:49 +00:00
return this ;
} ,
2019-03-11 12:26:58 +00:00
setBlockedDown : function ( by )
2019-03-08 20:10:49 +00:00
{
var blocked = this . blocked ;
blocked . down = true ;
blocked . none = false ;
2019-03-19 23:21:48 +00:00
this . setBlocker ( by ) ;
2019-03-11 12:26:58 +00:00
2019-03-08 20:10:49 +00:00
return this ;
} ,
2019-03-11 12:26:58 +00:00
setBlockedLeft : function ( by )
2019-03-08 20:10:49 +00:00
{
var blocked = this . blocked ;
blocked . left = true ;
blocked . none = false ;
2019-03-19 23:21:48 +00:00
this . setBlocker ( by ) ;
2019-03-11 12:26:58 +00:00
2019-03-08 20:10:49 +00:00
return this ;
} ,
2019-03-11 12:26:58 +00:00
setBlockedRight : function ( by )
2019-03-08 20:10:49 +00:00
{
var blocked = this . blocked ;
blocked . right = true ;
blocked . none = false ;
2019-03-19 23:21:48 +00:00
this . setBlocker ( by ) ;
2019-03-11 12:26:58 +00:00
2019-03-08 20:10:49 +00:00
return this ;
} ,
2019-03-15 19:22:32 +00:00
setWorldBlockedUp : function ( forceY )
{
var worldBlocked = this . worldBlocked ;
worldBlocked . up = true ;
worldBlocked . none = false ;
if ( forceY !== undefined )
{
this . y = forceY ;
this . forcePosition = true ;
}
return this ;
} ,
setWorldBlockedDown : function ( forceY )
{
var worldBlocked = this . worldBlocked ;
worldBlocked . down = true ;
worldBlocked . none = false ;
if ( forceY !== undefined )
{
this . bottom = forceY ;
this . forcePosition = true ;
}
return this ;
} ,
setWorldBlockedLeft : function ( )
{
var worldBlocked = this . worldBlocked ;
worldBlocked . left = true ;
worldBlocked . none = false ;
return this ;
} ,
setWorldBlockedRight : function ( )
{
var worldBlocked = this . worldBlocked ;
worldBlocked . right = true ;
worldBlocked . none = false ;
return this ;
} ,
2019-03-19 23:21:48 +00:00
/ *
2019-03-11 09:19:41 +00:00
getMoveX : function ( amount )
2019-03-08 20:10:49 +00:00
{
var blocked = this . blocked ;
if ( amount < 0 && blocked . left || amount > 0 && blocked . right )
{
// If it's already blocked, it can't go anywhere
return 0 ;
}
if ( this . checkWorldBounds )
{
var pos = this . position ;
var bounds = this . world . bounds ;
var check = this . world . checkCollision ;
2019-03-11 09:19:41 +00:00
var worldBlocked = this . worldBlocked ;
2019-03-08 20:10:49 +00:00
if ( amount < 0 && check . left && pos . x + amount < bounds . x )
{
2019-03-11 09:19:41 +00:00
worldBlocked . left = true ;
2019-03-08 20:10:49 +00:00
return amount - ( ( pos . x + amount ) - bounds . x ) ;
}
else if ( amount > 0 && check . right && this . right + amount > bounds . right )
{
2019-03-11 09:19:41 +00:00
worldBlocked . right = true ;
2019-03-08 20:10:49 +00:00
return amount - ( ( this . right + amount ) - bounds . right ) ;
}
}
return amount ;
} ,
2019-03-19 23:21:48 +00:00
* /
2019-03-08 20:10:49 +00:00
2019-03-19 23:21:48 +00:00
getMoveX : function ( amount )
{
return amount ;
} ,
isBlockedUp : function ( )
{
return ( this . blocked . up || this . worldBlocked . up ) ;
} ,
isBlockedDown : function ( )
{
return ( this . blocked . down || this . worldBlocked . down ) ;
} ,
isBlockedY : function ( )
2019-03-08 20:10:49 +00:00
{
var blocked = this . blocked ;
2019-03-15 19:22:32 +00:00
var worldBlocked = this . worldBlocked ;
2019-03-08 20:10:49 +00:00
2019-03-19 23:21:48 +00:00
return (
( blocked . up || worldBlocked . up ) &&
( blocked . down || worldBlocked . down )
) ;
} ,
getMoveY : function ( amount )
{
if ( amount === 0 || amount < 0 && this . isBlockedUp ( ) || amount > 0 && this . isBlockedDown ( ) )
2019-03-08 20:10:49 +00:00
{
2019-03-19 23:21:48 +00:00
// If it's already blocked, or zero, it can't go anywhere
2019-03-08 20:10:49 +00:00
return 0 ;
}
2019-03-19 23:21:48 +00:00
if ( this . collideWorldBounds )
2019-03-08 20:10:49 +00:00
{
var pos = this . position ;
var bounds = this . world . bounds ;
var check = this . world . checkCollision ;
if ( amount < 0 && check . up && pos . y + amount < bounds . y )
{
2019-03-19 23:21:48 +00:00
this . setWorldBlockedUp ( ) ;
2019-03-13 17:27:11 +00:00
2019-03-08 20:10:49 +00:00
return amount - ( ( pos . y + amount ) - bounds . y ) ;
}
else if ( amount > 0 && check . down && this . bottom + amount > bounds . bottom )
{
2019-03-19 23:21:48 +00:00
this . setWorldBlockedDown ( ) ;
2019-03-13 17:27:11 +00:00
2019-03-08 20:10:49 +00:00
return amount - ( ( this . bottom + amount ) - bounds . bottom ) ;
}
}
return amount ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s acceleration .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setAcceleration
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal component , in pixels per second squared .
* @ param { number } y - The vertical component , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setAcceleration : function ( x , y )
{
this . acceleration . set ( x , y ) ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s horizontal acceleration .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setAccelerationX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The acceleration , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setAccelerationX : function ( value )
{
this . acceleration . x = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s vertical acceleration .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setAccelerationY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The acceleration , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setAccelerationY : function ( value )
{
this . acceleration . y = value ;
return this ;
} ,
2018-05-15 14:59:02 +00:00
/ * *
* Enables or disables drag .
*
* @ method Phaser . Physics . Arcade . Body # setAllowDrag
* @ since 3.9 . 0
* @ see Phaser . Physics . Arcade . Body # allowDrag
*
2018-05-22 15:19:18 +00:00
* @ param { boolean } [ value = true ] - ` true ` to allow drag on this body , or ` false ` to disable it .
2018-05-15 14:59:02 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2018-05-22 15:19:18 +00:00
setAllowDrag : function ( value )
2018-05-15 14:59:02 +00:00
{
2018-05-22 15:19:18 +00:00
if ( value === undefined ) { value = true ; }
this . allowDrag = value ;
2018-05-15 14:59:02 +00:00
return this ;
} ,
/ * *
* Enables or disables gravity ' s effect on this Body .
*
* @ method Phaser . Physics . Arcade . Body # setAllowGravity
* @ since 3.9 . 0
* @ see Phaser . Physics . Arcade . Body # allowGravity
*
2018-05-22 15:19:18 +00:00
* @ param { boolean } [ value = true ] - ` true ` to allow gravity on this body , or ` false ` to disable it .
2018-05-15 14:59:02 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2018-05-22 15:19:18 +00:00
setAllowGravity : function ( value )
2018-05-15 14:59:02 +00:00
{
2018-05-22 15:19:18 +00:00
if ( value === undefined ) { value = true ; }
this . allowGravity = value ;
2018-05-15 14:59:02 +00:00
return this ;
} ,
/ * *
* Enables or disables rotation .
*
* @ method Phaser . Physics . Arcade . Body # setAllowRotation
* @ since 3.9 . 0
* @ see Phaser . Physics . Arcade . Body # allowRotation
*
2018-05-22 15:19:18 +00:00
* @ param { boolean } [ value = true ] - ` true ` to allow rotation on this body , or ` false ` to disable it .
2018-05-15 14:59:02 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2018-05-22 15:19:18 +00:00
setAllowRotation : function ( value )
2018-05-15 14:59:02 +00:00
{
2018-05-22 15:19:18 +00:00
if ( value === undefined ) { value = true ; }
this . allowRotation = value ;
2018-05-15 14:59:02 +00:00
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s drag .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setDrag
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal component , in pixels per second squared .
* @ param { number } y - The vertical component , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setDrag : function ( x , y )
{
this . drag . set ( x , y ) ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s horizontal drag .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setDragX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The drag , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setDragX : function ( value )
{
this . drag . x = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s vertical drag .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setDragY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The drag , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setDragY : function ( value )
{
this . drag . y = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s gravity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setGravity
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal component , in pixels per second squared .
* @ param { number } y - The vertical component , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setGravity : function ( x , y )
{
this . gravity . set ( x , y ) ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s horizontal gravity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setGravityX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The gravity , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setGravityX : function ( value )
{
this . gravity . x = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s vertical gravity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setGravityY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The gravity , in pixels per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setGravityY : function ( value )
{
this . gravity . y = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s friction .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setFriction
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } x - The horizontal component , relative to 1.
* @ param { number } y - The vertical component , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setFriction : function ( x , y )
{
this . friction . set ( x , y ) ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s horizontal friction .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setFrictionX
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The friction value , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setFrictionX : function ( value )
{
this . friction . x = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s vertical friction .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setFrictionY
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The friction value , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setFrictionY : function ( value )
{
this . friction . y = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s angular velocity .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setAngularVelocity
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The velocity , in degrees per second .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setAngularVelocity : function ( value )
{
this . angularVelocity = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s angular acceleration .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setAngularAcceleration
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The acceleration , in degrees per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setAngularAcceleration : function ( value )
{
this . angularAcceleration = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s angular drag .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setAngularDrag
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The drag , in degrees per second squared .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setAngularDrag : function ( value )
{
this . angularDrag = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s mass .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setMass
* @ since 3.0 . 0
*
2018-04-24 00:48:15 +00:00
* @ param { number } value - The mass value , relative to 1.
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setMass : function ( value )
{
this . mass = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* Sets the Body ' s ` immovable ` property .
2018-02-09 03:44:23 +00:00
*
* @ method Phaser . Physics . Arcade . Body # setImmovable
* @ since 3.0 . 0
*
2018-05-22 15:19:18 +00:00
* @ param { boolean } [ value = true ] - The value to assign to ` immovable ` .
2018-02-09 03:44:23 +00:00
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
2017-11-09 04:02:59 +00:00
setImmovable : function ( value )
{
2018-05-22 15:19:18 +00:00
if ( value === undefined ) { value = true ; }
2017-11-09 04:02:59 +00:00
this . immovable = value ;
return this ;
} ,
2018-09-26 17:25:45 +00:00
/ * *
* Sets the Body ' s ` enable ` property .
*
* @ method Phaser . Physics . Arcade . Body # setEnable
2018-10-12 17:32:52 +00:00
* @ since 3.15 . 0
2018-09-26 17:25:45 +00:00
*
* @ param { boolean } [ value = true ] - The value to assign to ` enable ` .
*
* @ return { Phaser . Physics . Arcade . Body } This Body object .
* /
setEnable : function ( value )
{
if ( value === undefined ) { value = true ; }
this . enable = value ;
return this ;
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s horizontal position ( left edge ) .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # x
* @ type { number }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
x : {
get : function ( )
{
return this . position . x ;
} ,
set : function ( value )
{
this . position . x = value ;
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The Body ' s vertical position ( top edge ) .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # y
* @ type { number }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
y : {
get : function ( )
{
return this . position . y ;
} ,
set : function ( value )
{
this . position . y = value ;
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The left edge of the Body ' s boundary . Identical to x .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # left
* @ type { number }
2018-10-09 12:40:00 +00:00
* @ readonly
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
left : {
get : function ( )
{
return this . position . x ;
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The right edge of the Body ' s boundary .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # right
* @ type { number }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
right : {
get : function ( )
{
return this . position . x + this . width ;
2019-03-11 09:19:41 +00:00
} ,
set : function ( value )
{
this . position . x = value - this . width ;
2017-11-08 17:18:41 +00:00
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The top edge of the Body ' s boundary . Identical to y .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # top
* @ type { number }
2018-10-09 12:40:00 +00:00
* @ readonly
2018-02-09 03:44:23 +00:00
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
top : {
get : function ( )
{
return this . position . y ;
}
} ,
2018-02-09 03:44:23 +00:00
/ * *
2018-04-24 00:48:15 +00:00
* The bottom edge of this Body ' s boundary .
2018-02-09 03:44:23 +00:00
*
* @ name Phaser . Physics . Arcade . Body # bottom
* @ type { number }
* @ since 3.0 . 0
* /
2017-11-08 17:18:41 +00:00
bottom : {
get : function ( )
{
return this . position . y + this . height ;
2019-03-11 09:19:41 +00:00
} ,
set : function ( value )
{
this . position . y = value - this . height ;
2017-11-08 17:18:41 +00:00
}
}
} ) ;
module . exports = Body ;