phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
85 lines (68 loc) • 2.43 kB
JavaScript
/**
* @author Richard Davey <rich@phaser.io>
* @copyright 2013-2025 Phaser Studio Inc.
* @license {@link https://opensource.org/licenses/MIT|MIT License}
*/
var ContainsArray = require('../triangle/ContainsArray');
var Decompose = require('../triangle/Decompose');
var LineToLine = require('./LineToLine');
/**
* Checks if two Triangles intersect.
*
* A Triangle intersects another Triangle if any pair of their lines intersects or if any point of one Triangle is within the other Triangle. Thus, the Triangles are considered "solid".
*
* @function Phaser.Geom.Intersects.TriangleToTriangle
* @since 3.0.0
*
* @param {Phaser.Geom.Triangle} triangleA - The first Triangle to check for intersection.
* @param {Phaser.Geom.Triangle} triangleB - The second Triangle to check for intersection.
*
* @return {boolean} `true` if the Triangles intersect, otherwise `false`.
*/
var TriangleToTriangle = function (triangleA, triangleB)
{
// First the cheapest ones:
if (
triangleA.left > triangleB.right ||
triangleA.right < triangleB.left ||
triangleA.top > triangleB.bottom ||
triangleA.bottom < triangleB.top)
{
return false;
}
var lineAA = triangleA.getLineA();
var lineAB = triangleA.getLineB();
var lineAC = triangleA.getLineC();
var lineBA = triangleB.getLineA();
var lineBB = triangleB.getLineB();
var lineBC = triangleB.getLineC();
// Now check the lines against each line of TriangleB
if (LineToLine(lineAA, lineBA) || LineToLine(lineAA, lineBB) || LineToLine(lineAA, lineBC))
{
return true;
}
if (LineToLine(lineAB, lineBA) || LineToLine(lineAB, lineBB) || LineToLine(lineAB, lineBC))
{
return true;
}
if (LineToLine(lineAC, lineBA) || LineToLine(lineAC, lineBB) || LineToLine(lineAC, lineBC))
{
return true;
}
// Nope, so check to see if any of the points of triangleA are within triangleB
var points = Decompose(triangleA);
var within = ContainsArray(triangleB, points, true);
if (within.length > 0)
{
return true;
}
// Finally check to see if any of the points of triangleB are within triangleA
points = Decompose(triangleB);
within = ContainsArray(triangleA, points, true);
if (within.length > 0)
{
return true;
}
return false;
};
module.exports = TriangleToTriangle;