Skip to content

Commit 068c1a7

Browse files
committed
Merge branch 'master' of https://github.com/photonstorm/phaser
2 parents 71db4ab + 63ddc0b commit 068c1a7

3 files changed

Lines changed: 40 additions & 84 deletions

File tree

src/gameobjects/bitmaptext/static/BitmapText.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var Components = require('../../components');
99
var GameObject = require('../../GameObject');
1010
var GetBitmapTextSize = require('../GetBitmapTextSize');
1111
var ParseFromAtlas = require('../ParseFromAtlas');
12+
var ParseXMLBitmapFont = require('../ParseXMLBitmapFont');
1213
var Render = require('./BitmapTextRender');
1314

1415
/**
@@ -616,4 +617,20 @@ BitmapText.ALIGN_RIGHT = 2;
616617
*/
617618
BitmapText.ParseFromAtlas = ParseFromAtlas;
618619

620+
/**
621+
* Parse an XML font to Bitmap Font data for the Bitmap Font cache.
622+
*
623+
* @name Phaser.GameObjects.BitmapText.ParseXMLBitmapFont
624+
* @type {function}
625+
* @since 3.17.0
626+
*
627+
* @param {XMLDocument} xml - The XML Document to parse the font from.
628+
* @param {integer} [xSpacing=0] - The x-axis spacing to add between each letter.
629+
* @param {integer} [ySpacing=0] - The y-axis spacing to add to the line height.
630+
* @param {Phaser.Textures.Frame} [frame] - The texture frame to take into account while parsing.
631+
*
632+
* @return {Phaser.GameObjects.BitmapText.Types.BitmapFontData} The parsed Bitmap Font data.
633+
*/
634+
BitmapText.ParseXMLBitmapFont = ParseXMLBitmapFont;
635+
619636
module.exports = BitmapText;

src/gameobjects/text/static/Text.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,16 @@ var Text = new Class({
11391139
this.height = style.fixedHeight;
11401140
}
11411141

1142+
if (w > this.width)
1143+
{
1144+
w = this.width;
1145+
}
1146+
1147+
if (h > this.height)
1148+
{
1149+
h = this.height;
1150+
}
1151+
11421152
this.updateDisplayOrigin();
11431153

11441154
w *= resolution;

src/physics/arcade/World.js

Lines changed: 13 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,11 +1394,6 @@ var World = new Class({
13941394
GetOverlapX(body1, body2, false, bias);
13951395
GetOverlapY(body1, body2, false, bias);
13961396

1397-
var dx = body2.center.x - body1.center.x;
1398-
var dy = body2.center.y - body1.center.y;
1399-
1400-
var angleCollision = Math.atan2(dy, dx);
1401-
14021397
var overlap = 0;
14031398

14041399
if (body1.isCircle !== body2.isCircle)
@@ -1458,94 +1453,28 @@ var World = new Class({
14581453
return (overlap !== 0);
14591454
}
14601455

1461-
// Transform the velocity vector to the coordinate system oriented along the direction of impact.
1462-
// This is done to eliminate the vertical component of the velocity
1463-
1464-
var b1vx = body1.velocity.x;
1465-
var b1vy = body1.velocity.y;
1466-
var b1mass = body1.mass;
1467-
1468-
var b2vx = body2.velocity.x;
1469-
var b2vy = body2.velocity.y;
1470-
var b2mass = body2.mass;
1471-
1472-
var v1 = {
1473-
x: b1vx * Math.cos(angleCollision) + b1vy * Math.sin(angleCollision),
1474-
y: b1vx * Math.sin(angleCollision) - b1vy * Math.cos(angleCollision)
1475-
};
1476-
1477-
var v2 = {
1478-
x: b2vx * Math.cos(angleCollision) + b2vy * Math.sin(angleCollision),
1479-
y: b2vx * Math.sin(angleCollision) - b2vy * Math.cos(angleCollision)
1480-
};
1481-
1482-
// We expect the new velocity after impact
1483-
var tempVel1 = ((b1mass - b2mass) * v1.x + 2 * b2mass * v2.x) / (b1mass + b2mass);
1484-
var tempVel2 = (2 * b1mass * v1.x + (b2mass - b1mass) * v2.x) / (b1mass + b2mass);
1456+
var dx = body1.position.x - body2.position.x;
1457+
var dy = body1.position.y - body2.position.y;
1458+
var d = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
1459+
var nx = (body2.position.x - body1.position.x) / d;
1460+
var ny = (body2.position.y - body1.position.y) / d;
1461+
var p = 2 * (body1.velocity.x * nx + body1.velocity.y * ny - body2.velocity.x * nx - body2.velocity.y * ny) / (body1.mass + body2.mass);
14851462

1486-
// We convert the vector to the original coordinate system and multiplied by factor of rebound
14871463
if (!body1.immovable)
14881464
{
1489-
body1.velocity.x = (tempVel1 * Math.cos(angleCollision) - v1.y * Math.sin(angleCollision)) * body1.bounce.x;
1490-
body1.velocity.y = (v1.y * Math.cos(angleCollision) + tempVel1 * Math.sin(angleCollision)) * body1.bounce.y;
1491-
1492-
// Reset local var
1493-
b1vx = body1.velocity.x;
1494-
b1vy = body1.velocity.y;
1465+
body1.velocity.x = (body1.velocity.x - p * body1.mass * nx) * body1.bounce.x;
1466+
body1.velocity.y = (body1.velocity.y - p * body1.mass * ny) * body1.bounce.y;
14951467
}
14961468

14971469
if (!body2.immovable)
14981470
{
1499-
body2.velocity.x = (tempVel2 * Math.cos(angleCollision) - v2.y * Math.sin(angleCollision)) * body2.bounce.x;
1500-
body2.velocity.y = (v2.y * Math.cos(angleCollision) + tempVel2 * Math.sin(angleCollision)) * body2.bounce.y;
1501-
1502-
// Reset local var
1503-
b2vx = body2.velocity.x;
1504-
b2vy = body2.velocity.y;
1471+
body2.velocity.x = (body2.velocity.x + p * body2.mass * nx) * body2.bounce.x;
1472+
body2.velocity.y = (body2.velocity.y + p * body2.mass * ny) * body2.bounce.y;
15051473
}
15061474

1507-
// When the collision angle is almost perpendicular to the total initial velocity vector
1508-
// (collision on a tangent) vector direction can be determined incorrectly.
1509-
// This code fixes the problem
1510-
1511-
if (Math.abs(angleCollision) < Math.PI / 2)
1512-
{
1513-
if ((b1vx > 0) && !body1.immovable && (b2vx > b1vx))
1514-
{
1515-
body1.velocity.x *= -1;
1516-
}
1517-
else if ((b2vx < 0) && !body2.immovable && (b1vx < b2vx))
1518-
{
1519-
body2.velocity.x *= -1;
1520-
}
1521-
else if ((b1vy > 0) && !body1.immovable && (b2vy > b1vy))
1522-
{
1523-
body1.velocity.y *= -1;
1524-
}
1525-
else if ((b2vy < 0) && !body2.immovable && (b1vy < b2vy))
1526-
{
1527-
body2.velocity.y *= -1;
1528-
}
1529-
}
1530-
else if (Math.abs(angleCollision) > Math.PI / 2)
1531-
{
1532-
if ((b1vx < 0) && !body1.immovable && (b2vx < b1vx))
1533-
{
1534-
body1.velocity.x *= -1;
1535-
}
1536-
else if ((b2vx > 0) && !body2.immovable && (b1vx > b2vx))
1537-
{
1538-
body2.velocity.x *= -1;
1539-
}
1540-
else if ((b1vy < 0) && !body1.immovable && (b2vy < b1vy))
1541-
{
1542-
body1.velocity.y *= -1;
1543-
}
1544-
else if ((b2vy > 0) && !body2.immovable && (b1vx > b2vy))
1545-
{
1546-
body2.velocity.y *= -1;
1547-
}
1548-
}
1475+
var dvx = body2.velocity.x - body1.velocity.x;
1476+
var dvy = body2.velocity.y - body1.velocity.y;
1477+
var angleCollision = Math.atan2(dvy, dvx);
15491478

15501479
var delta = this._frameTime;
15511480

0 commit comments

Comments
 (0)