Class: Body

Phaser.Physics.Arcade. Body

new Body(sprite)

The Physics Body is linked to a single Sprite. All physics operations should be performed against the body rather than the Sprite itself. For example you can set the velocity, acceleration, bounce values etc all on the Body.

Parameters:
Name Type Description
sprite Phaser.Sprite

The Sprite object this physics body belongs to.

Source:
src/physics/arcade/Body.js line 15

Members

acceleration : Phaser.Point

The acceleration is the rate of change of the velocity. Measured in pixels per second squared.

Type:
Source:
src/physics/arcade/Body.js line 161

allowDrag : boolean

Allow this Body to be influenced by drag?

Type:
  • boolean
Default Value:
  • true
Source:
src/physics/arcade/Body.js line 167

allowGravity : boolean

Allow this Body to be influenced by gravity? Either world or local.

Type:
  • boolean
Default Value:
  • true
Source:
src/physics/arcade/Body.js line 178

allowRotation : boolean

Allow this Body to be rotated? (via angularVelocity, etc)

Type:
  • boolean
Default Value:
  • true
Source:
src/physics/arcade/Body.js line 79

<readonly> angle : number

The angle of the Body's velocity in radians.

Type:
  • number
Source:
src/physics/arcade/Body.js line 295

angularAcceleration : number

The angular acceleration is the rate of change of the angular velocity. Measured in degrees per second squared.

Type:
  • number
Source:
src/physics/arcade/Body.js line 271

angularDrag : number

The drag applied during the rotation of the Body. Measured in degrees per second squared.

Type:
  • number
Source:
src/physics/arcade/Body.js line 277

angularVelocity : number

The angular velocity is the rate of change of the Body's rotation. It is measured in degrees per second.

Type:
  • number
Source:
src/physics/arcade/Body.js line 265

blocked : object

This object is populated with boolean values when the Body collides with the World bounds or a Tile. For example if blocked.up is true then the Body cannot move up. An object containing on which faces this Body is blocked from moving, if any (none, up, down, left, right).

Type:
  • object
Source:
src/physics/arcade/Body.js line 402

<readonly> bottom : number

The bottom value of this Body (same as Body.y + Body.height)

Type:
  • number
Source:
src/physics/arcade/Body.js line 1359

bounce : Phaser.Point

The elasticity of the Body when colliding. bounce.x/y = 1 means full rebound, bounce.x/y = 0.5 means 50% rebound velocity.

Type:
Source:
src/physics/arcade/Body.js line 188

<readonly> center : Phaser.Point

The center coordinate of the Physics Body.

Type:
Source:
src/physics/arcade/Body.js line 140

checkCollision : object

Set the checkCollision properties to control which directions collision is processed for this Body. For example checkCollision.up = false means it won't collide when the collision happened while moving up. If you need to disable a Body entirely, use body.enable = false, this will also disable motion. If you need to disable just collision and/or overlap checks, but retain motion, set checkCollision.none = true. An object containing allowed collision (none, up, down, left, right).

Type:
  • object
Source:
src/physics/arcade/Body.js line 382

collideWorldBounds : boolean

A Body can be set to collide against the World bounds automatically and rebound back into the World if this is set to true. Otherwise it will leave the World. Should the Body collide with the World bounds?

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 373

customSeparateX : boolean

This flag allows you to disable the custom x separation that takes place by Physics.Arcade.separate. Used in combination with your own collision processHandler you can create whatever type of collision response you need. Use a custom separation system or the built-in one?

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 335

customSeparateY : boolean

This flag allows you to disable the custom y separation that takes place by Physics.Arcade.separate. Used in combination with your own collision processHandler you can create whatever type of collision response you need. Use a custom separation system or the built-in one?

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 343

deltaMax : Phaser.Point

The Sprite position is updated based on the delta x/y values. You can set a cap on those (both +-) using deltaMax.

Type:
Source:
src/physics/arcade/Body.js line 156

dirty : boolean

If this Body in a preUpdate (true) or postUpdate (false) state?

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 414

drag : Phaser.Point

The drag applied to the motion of the Body (when allowDrag is enabled). Measured in pixels per second squared.

Type:
Source:
src/physics/arcade/Body.js line 172

embedded : boolean

If a body is overlapping with another body, but neither of them are moving (maybe they spawned on-top of each other?) this is set to true. Body embed value.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 367

enable : boolean

A disabled body won't be checked for any form of collision or overlap or have its pre/post updates run.

Type:
  • boolean
Default Value:
  • true
Source:
src/physics/arcade/Body.js line 36

facing : number

A const reference to the direction the Body is traveling or facing: Phaser.NONE, Phaser.LEFT, Phaser.RIGHT, Phaser.UP, or Phaser.DOWN. If the Body is moving on both axes, UP and DOWN take precedence.

Type:
  • number
Source:
src/physics/arcade/Body.js line 307

friction : Phaser.Point

If this Body is immovable and moving, and another Body is 'riding' this one, this is the amount of motion the riding Body receives on each axis.

Type:
Source:
src/physics/arcade/Body.js line 259

game : Phaser.Game

Local reference to game.

Type:
Source:
src/physics/arcade/Body.js line 25

gravity : Phaser.Point

This Body's local gravity, added to any world gravity, unless Body.allowGravity is set to false.

Type:
Source:
src/physics/arcade/Body.js line 183

<readonly> halfHeight : number

The calculated height / 2 of the physics body.

Type:
  • number
Source:
src/physics/arcade/Body.js line 134

<readonly> halfWidth : number

The calculated width / 2 of the physics body.

Type:
  • number
Source:
src/physics/arcade/Body.js line 128

<readonly> height : number

The calculated height of the physics body.

Type:
  • number
Source:
src/physics/arcade/Body.js line 104

immovable : boolean

An immovable Body will not receive any impacts from other bodies. Two immovable Bodies can't separate or exchange momentum and will pass through each other.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 313

<readonly> isCircle : boolean

If true this Body is using circular collision detection. If false it is using rectangular. Use Body.setCircle to control the collision shape this Body uses.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 45

isMoving : boolean

Set by the moveTo and moveFrom methods.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 434

left : number

The x position of the Body. The same as Body.x.

Type:
  • number
Source:
src/physics/arcade/Body.js line 1319

mass : number

The mass of the Body. When two bodies collide their mass is used in the calculation to determine the exchange of velocity.

Type:
  • number
Default Value:
  • 1
Source:
src/physics/arcade/Body.js line 289

maxAngular : number

The maximum angular velocity in degrees per second that the Body can reach.

Type:
  • number
Default Value:
  • 1000
Source:
src/physics/arcade/Body.js line 283

maxVelocity : Phaser.Point

The maximum velocity (in pixels per second squared) that the Body can reach.

Type:
Source:
src/physics/arcade/Body.js line 254

movementCallback : function

Optional callback. If set, invoked during the running of moveTo or moveFrom events.

Type:
  • function
Source:
src/physics/arcade/Body.js line 479

movementCallbackContext : object

Context in which to call the movementCallback.

Type:
  • object
Source:
src/physics/arcade/Body.js line 484

moves : boolean

Whether the physics system should update the Body's position and rotation based on its velocity, acceleration, drag, and gravity.

If you have a Body that is being moved around the world via a tween or a Group motion, but its local x/y position never actually changes, then you should set Body.moves = false. Otherwise it will most likely fly off the screen. If you want the physics system to move the body around, then set moves to true.

A Body with moves = false can still be moved slightly (but not accelerated) during collision separation unless you set immovable as well. Set to true to allow the Physics system to move this Body, otherwise false to move it manually.

Type:
  • boolean
Default Value:
  • true
Source:
src/physics/arcade/Body.js line 327

<readonly> newVelocity : Phaser.Point

The distanced traveled during the last update, equal to velocity * physicsElapsed. Calculated during the Body.preUpdate and applied to its position.

Type:
Source:
src/physics/arcade/Body.js line 151

offset : Phaser.Point

The offset of the Physics Body from the Sprite's texture.

Type:
Source:
src/physics/arcade/Body.js line 61

onCollide : Phaser.Signal

A Signal that is dispatched when this Body collides with another Body.

You still need to call game.physics.arcade.collide in your update method in order for this signal to be dispatched.

Usually you'd pass a callback to the collide method, but this signal provides for a different level of notification.

Due to the potentially high volume of signals this could create it is disabled by default.

To use this feature set this property to a Phaser.Signal: sprite.body.onCollide = new Phaser.Signal() and it will be called when a collision happens, passing two arguments: the sprites which collided. The first sprite in the argument is always the owner of this Body.

If two Bodies with this Signal set collide, both will dispatch the Signal.

Type:
Source:
src/physics/arcade/Body.js line 228

onMoveComplete : Phaser.Signal

Listen for the completion of moveTo or moveFrom events.

Type:
Source:
src/physics/arcade/Body.js line 474

onOverlap : Phaser.Signal

A Signal that is dispatched when this Body overlaps with another Body.

You still need to call game.physics.arcade.overlap in your update method in order for this signal to be dispatched.

Usually you'd pass a callback to the overlap method, but this signal provides for a different level of notification.

Due to the potentially high volume of signals this could create it is disabled by default.

To use this feature set this property to a Phaser.Signal: sprite.body.onOverlap = new Phaser.Signal() and it will be called when a collision happens, passing two arguments: the sprites which collided. The first sprite in the argument is always the owner of this Body.

If two Bodies with this Signal set collide, both will dispatch the Signal.

Type:
Source:
src/physics/arcade/Body.js line 248

onWorldBounds : Phaser.Signal

A Signal that is dispatched when this Body collides with the world bounds. Due to the potentially high volume of signals this could create it is disabled by default. To use this feature set this property to a Phaser.Signal: sprite.body.onWorldBounds = new Phaser.Signal() and it will be called when a collision happens, passing five arguments: onWorldBounds(sprite, up, down, left, right) where the Sprite is a reference to the Sprite that owns this Body, and the other arguments are booleans indicating on which side of the world the Body collided.

Type:
Source:
src/physics/arcade/Body.js line 208

overlapR : number

If Body.isCircle is true, and this body collides with another circular body, the amount of overlap is stored here. The amount of overlap during the collision.

Type:
  • number
Source:
src/physics/arcade/Body.js line 361

overlapX : number

When this body collides with another, the amount of overlap is stored here. The amount of horizontal overlap during the collision.

Type:
  • number
Source:
src/physics/arcade/Body.js line 349

overlapY : number

When this body collides with another, the amount of overlap is stored here. The amount of vertical overlap during the collision.

Type:
  • number
Source:
src/physics/arcade/Body.js line 355

<readonly> position : Phaser.Point

The position of the physics body, equivalent to (left, top).

Type:
Source:
src/physics/arcade/Body.js line 67

<readonly> preRotation : number

The previous rotation of the physics body, in degrees.

Type:
  • number
Source:
src/physics/arcade/Body.js line 92

<readonly> prev : Phaser.Point

The previous position of the physics body.

Type:
Source:
src/physics/arcade/Body.js line 73

<readonly> radius : number

The radius of the circular collision shape this Body is using if Body.setCircle has been enabled, relative to the Sprite's texture. If you wish to change the radius then call setCircle again with the new value. If you wish to stop the Body using a circle then call setCircle with a radius of zero (or undefined). The actual radius of the Body (at any Sprite scale) is equal to halfWidth and the diameter is equal to width.

Type:
  • number
Source:
src/physics/arcade/Body.js line 56

The right value of this Body (same as Body.x + Body.width)

Type:
  • number
Source:
src/physics/arcade/Body.js line 1332

rotation : number

The Body's rotation in degrees, as calculated by its angularVelocity and angularAcceleration. Please understand that the collision Body itself never rotates, it is always axis-aligned. However these values are passed up to the parent Sprite and updates its rotation.

Type:
  • number
Source:
src/physics/arcade/Body.js line 86

skipQuadTree : boolean

If true and you collide this Sprite against a Group, it will disable the collision check from using a QuadTree.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 419

<readonly> sourceHeight : number

The un-scaled original size.

Type:
  • number
Source:
src/physics/arcade/Body.js line 116

<readonly> sourceWidth : number

The un-scaled original size.

Type:
  • number
Source:
src/physics/arcade/Body.js line 110

<readonly> speed : number

The speed of the Body in pixels per second, equal to the magnitude of the velocity.

Type:
  • number
Source:
src/physics/arcade/Body.js line 301

sprite : Phaser.Sprite

Reference to the parent Sprite.

Type:
Source:
src/physics/arcade/Body.js line 20

stopVelocityOnCollide : boolean

Set by the moveTo and moveFrom methods.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 439

syncBounds : boolean

If true the Body will check itself against the Sprite.getBounds() dimensions and adjust its width and height accordingly. If false it will compare its dimensions against the Sprite scale instead, and adjust its width height if the scale has changed. Typically you would need to enable syncBounds if your sprite is the child of a responsive display object such as a FlexLayer, or in any situation where the Sprite scale doesn't change, but its parents scale is effecting the dimensions regardless.

Type:
  • boolean
Source:
src/physics/arcade/Body.js line 429

tilePadding : Phaser.Point

If this is an especially small or fast moving object then it can sometimes skip over tilemap collisions if it moves through a tile in a step. Set this padding value to add extra padding to its bounds. tilePadding.x applied to its width, y to its height. Extra padding to be added to this sprite's dimensions when checking for tile collision.

Type:
Source:
src/physics/arcade/Body.js line 409

top : number

The y position of the Body. The same as Body.y.

Type:
  • number
Source:
src/physics/arcade/Body.js line 1346

touching : object

This object is populated with boolean values when the Body collides with another. touching.up = true means the collision happened to the top of this Body for example. An object containing touching results (none, up, down, left, right).

Type:
  • object
Source:
src/physics/arcade/Body.js line 389

type : number

The type of physics system this body belongs to.

Type:
  • number
Source:
src/physics/arcade/Body.js line 30

velocity : Phaser.Point

The velocity, or rate of change the Body's position. Measured in pixels per second.

Type:
Source:
src/physics/arcade/Body.js line 145

wasTouching : object

This object is populated with previous touching values from the bodies previous collision. An object containing previous touching results (none, up, down, left, right).

Type:
  • object
Source:
src/physics/arcade/Body.js line 395

<readonly> width : number

The calculated width of the physics body.

Type:
  • number
Source:
src/physics/arcade/Body.js line 98

worldBounce : Phaser.Point

The elasticity of the Body when colliding with the World bounds. By default this property is null, in which case Body.bounce is used instead. Set this property to a Phaser.Point object in order to enable a World bounds specific bounce value.

Type:
Source:
src/physics/arcade/Body.js line 196

x : number

The x position.

Type:
  • number
Source:
src/physics/arcade/Body.js line 1373

y : number

The y position.

Type:
  • number
Source:
src/physics/arcade/Body.js line 1391

Methods

<protected> checkWorldBounds()

Internal method.

Source:
src/physics/arcade/Body.js line 824
Returns:

True if the Body collided with the world bounds, otherwise false.

Type
boolean

deltaAbsX()

Returns the absolute delta x value.

Source:
src/physics/arcade/Body.js line 1243
Returns:

The absolute delta value.

Type
number

deltaAbsY()

Returns the absolute delta y value.

Source:
src/physics/arcade/Body.js line 1254
Returns:

The absolute delta value.

Type
number

deltaX()

Returns the delta x value. The difference between Body.x now and in the previous step.

Source:
src/physics/arcade/Body.js line 1265
Returns:

The delta value. Positive if the motion was to the right, negative if to the left.

Type
number

deltaY()

Returns the delta y value. The difference between Body.y now and in the previous step.

Source:
src/physics/arcade/Body.js line 1276
Returns:

The delta value. Positive if the motion was downwards, negative if upwards.

Type
number

deltaZ()

Returns the delta z value. The difference between Body.rotation now and in the previous step.

Source:
src/physics/arcade/Body.js line 1287
Returns:

The delta value. Positive if the motion was clockwise, negative if anti-clockwise.

Type
number

destroy()

Destroys this Body.

First it calls Group.removeFromHash if the Game Object this Body belongs to is part of a Group. Then it nulls the Game Objects body reference, and nulls this Body.sprite reference.

Source:
src/physics/arcade/Body.js line 1298

getBounds(obj)

Returns the bounds of this physics body.

Only used internally by the World collision methods.

Parameters:
Name Type Description
obj object

The object in which to set the bounds values.

Source:
src/physics/arcade/Body.js line 1178
Returns:

The object that was given to this method.

Type
object

hitTest(x, y)

Tests if a world point lies within this Body.

Parameters:
Name Type Description
x number

The world x coordinate to test.

y number

The world y coordinate to test.

Source:
src/physics/arcade/Body.js line 1197
Returns:

True if the given coordinates are inside this Body, otherwise false.

Type
boolean

moveFrom(duration [, speed] [, direction])

Note: This method is experimental, and may be changed or removed in a future release.

This method moves the Body in the given direction, for the duration specified. It works by setting the velocity on the Body, and an internal timer, and then monitoring the duration each frame. When the duration is up the movement is stopped and the Body.onMoveComplete signal is dispatched.

Movement also stops if the Body collides or overlaps with any other Body.

You can control if the velocity should be reset to zero on collision, by using the property Body.stopVelocityOnCollide.

Stop the movement at any time by calling Body.stopMovement.

You can optionally set a speed in pixels per second. If not specified it will use the current Body.speed value. If this is zero, the function will return false.

Please note that due to browser timings you should allow for a variance in when the duration will actually expire. Depending on system it may be as much as +- 50ms. Also this method doesn't take into consideration any other forces acting on the Body, such as Gravity, drag or maxVelocity, all of which may impact the movement.

Parameters:
Name Type Argument Description
duration integer

The duration of the movement, in ms.

speed integer <optional>

The speed of the movement, in pixels per second. If not provided Body.speed is used.

direction integer <optional>

The angle of movement. If not provided Body.angle is used.

Source:
src/physics/arcade/Body.js line 873
Returns:

True if the movement successfully started, otherwise false.

Type
boolean

moveTo(duration, distance [, direction])

Note: This method is experimental, and may be changed or removed in a future release.

This method moves the Body in the given direction, for the duration specified. It works by setting the velocity on the Body, and an internal distance counter. The distance is monitored each frame. When the distance equals the distance specified in this call, the movement is stopped, and the Body.onMoveComplete signal is dispatched.

Movement also stops if the Body collides or overlaps with any other Body.

You can control if the velocity should be reset to zero on collision, by using the property Body.stopVelocityOnCollide.

Stop the movement at any time by calling Body.stopMovement.

Please note that due to browser timings you should allow for a variance in when the distance will actually expire.

Note: This method doesn't take into consideration any other forces acting on the Body, such as Gravity, drag or maxVelocity, all of which may impact the movement.

Parameters:
Name Type Argument Description
duration integer

The duration of the movement, in ms.

distance integer

The distance, in pixels, the Body will move.

direction integer <optional>

The angle of movement. If not provided Body.angle is used.

Source:
src/physics/arcade/Body.js line 946
Returns:

True if the movement successfully started, otherwise false.

Type
boolean

onCeiling()

Returns true if the top of this Body is in contact with either the world bounds or a tile.

Source:
src/physics/arcade/Body.js line 1221
Returns:

True if in contact with either the world bounds or a tile.

Type
boolean

onFloor()

Returns true if the bottom of this Body is in contact with either the world bounds or a tile.

Source:
src/physics/arcade/Body.js line 1210
Returns:

True if in contact with either the world bounds or a tile.

Type
boolean

onWall()

Returns true if either side of this Body is in contact with either the world bounds or a tile.

Source:
src/physics/arcade/Body.js line 1232
Returns:

True if in contact with either the world bounds or a tile.

Type
boolean

<protected> postUpdate()

Internal method.

Source:
src/physics/arcade/Body.js line 739

<protected> preUpdate()

Internal method.

Source:
src/physics/arcade/Body.js line 573

render(context, body [, color] [, filled] [, lineWidth])

Render Sprite Body.

Parameters:
Name Type Argument Default Description
context object

The context to render to.

body Phaser.Physics.Arcade.Body

The Body to render the info of.

color string <optional>
'rgba(0,255,0,0.4)'

color of the debug info to be rendered. (format is css color string).

filled boolean <optional>
true

Render the objected as a filled (default, true) or a stroked (false)

lineWidth number <optional>
1

The width of the stroke when unfilled.

Source:
src/physics/arcade/Body.js line 1409

renderBodyInfo(body, x, y [, color])

Render Sprite Body Physics Data as text.

Parameters:
Name Type Argument Default Description
body Phaser.Physics.Arcade.Body

The Body to render the info of.

x number

X position of the debug info to be rendered.

y number

Y position of the debug info to be rendered.

color string <optional>
'rgb(255,255,255)'

color of the debug info to be rendered. (format is css color string).

Source:
src/physics/arcade/Body.js line 1454

reset(x, y)

Resets all Body values (velocity, acceleration, rotation, etc)

Parameters:
Name Type Description
x number

The new x position of the Body.

y number

The new y position of the Body.

Source:
src/physics/arcade/Body.js line 1136

setCircle( [radius] [, offsetX] [, offsetY])

Sets this Body as using a circle, of the given radius, for all collision detection instead of a rectangle. The radius is given in pixels (relative to the Sprite's texture) and is the distance from the center of the circle to the edge.

You can also control the x and y offset, which is the position of the Body relative to the top-left of the Sprite's texture.

To change a Body back to being rectangular again call Body.setSize.

Note: Circular collision only happens with other Arcade Physics bodies, it does not work against tile maps, where rectangular collision is the only method supported.

Parameters:
Name Type Argument Description
radius number <optional>

The radius of the Body in pixels. Pass a value of zero / undefined, to stop the Body using a circle for collision.

offsetX number <optional>

The X offset of the Body from the left of the Sprite's texture.

offsetY number <optional>

The Y offset of the Body from the top of the Sprite's texture.

Source:
src/physics/arcade/Body.js line 1091

setSize(width, height [, offsetX] [, offsetY])

You can modify the size of the physics Body to be any dimension you need. This allows you to make it smaller, or larger, than the parent Sprite. You can also control the x and y offset of the Body.

The width, height, and offset arguments are relative to the Sprite texture and are scaled with the Sprite's Phaser.Sprite#scale (but not the scale of any ancestors or the Camera scale).

For example: If you have a Sprite with a texture that is 80x100 in size, and you want the physics body to be 32x32 pixels in the middle of the texture, you would do:

setSize(32 / Math.abs(this.scale.x), 32 / Math.abs(this.scale.y), 24, 34)

Where the first two parameters are the new Body size (32x32 pixels) relative to the Sprite's scale. 24 is the horizontal offset of the Body from the top-left of the Sprites texture, and 34 is the vertical offset.

If you've scaled a Sprite by altering its width, height, or scale and you want to position the Body relative to the Sprite's dimensions (which will differ from its texture's dimensions), you should divide these arguments by the Sprite's current scale:

setSize(32 / sprite.scale.x, 32 / sprite.scale.y)

Calling setSize on a Body that has already had setCircle will reset all of the Circle properties, making this Body rectangular again.

Parameters:
Name Type Argument Description
width number

The width of the Body, relative to the Sprite's texture.

height number

The height of the Body, relative to the Sprite's texture.

offsetX number <optional>

The X offset of the Body from the left of the Sprite's texture.

offsetY number <optional>

The Y offset of the Body from the top of the Sprite's texture.

Source:
src/physics/arcade/Body.js line 1032

stop()

Sets acceleration, velocity, and speed to 0.

Source:
src/physics/arcade/Body.js line 1164

stopMovement( [stopVelocity])

If this Body is moving as a result of a call to moveTo or moveFrom (i.e. it has Body.isMoving true), then calling this method will stop the movement before either the duration or distance counters expire.

The onMoveComplete signal is dispatched.

Parameters:
Name Type Argument Description
stopVelocity boolean <optional>

Should the Body.velocity be set to zero?

Source:
src/physics/arcade/Body.js line 710

<protected> updateBounds()

Internal method.

Source:
src/physics/arcade/Body.js line 519

<protected> updateCenter()

Update the Body's center from its position.

Source:
src/physics/arcade/Body.js line 562

<protected> updateMovement()

Internal method.

Source:
src/physics/arcade/Body.js line 670

phaser-ce@2.20.0 is on GitHub and NPM

Documentation generated by JSDoc 3.6.7 on 2022-12-10 using Tomorrow.