phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
104 lines (83 loc) • 3.79 kB
JavaScript
var GetRectangleToTriangle = require('../../../src/geom/intersects/GetRectangleToTriangle');
var Rectangle = require('../../../src/geom/rectangle/Rectangle');
var Triangle = require('../../../src/geom/triangle/Triangle');
describe('Phaser.Geom.Intersects.GetRectangleToTriangle', function ()
{
it('should return an empty array when rectangle and triangle do not intersect', function ()
{
var rect = new Rectangle(0, 0, 10, 10);
var triangle = new Triangle(50, 50, 60, 50, 55, 60);
var result = GetRectangleToTriangle(rect, triangle);
expect(Array.isArray(result)).toBe(true);
expect(result.length).toBe(0);
});
it('should return intersection points when triangle edge crosses rectangle', function ()
{
var rect = new Rectangle(0, 0, 100, 100);
var triangle = new Triangle(-10, 50, 110, 50, 50, -10);
var result = GetRectangleToTriangle(rect, triangle);
expect(Array.isArray(result)).toBe(true);
expect(result.length).toBeGreaterThan(0);
});
it('should use the provided out array', function ()
{
var rect = new Rectangle(0, 0, 100, 100);
var triangle = new Triangle(-10, 50, 110, 50, 50, -10);
var out = [];
var result = GetRectangleToTriangle(rect, triangle, out);
expect(result).toBe(out);
expect(out.length).toBeGreaterThan(0);
});
it('should return the out array unchanged when there is no intersection', function ()
{
var rect = new Rectangle(0, 0, 10, 10);
var triangle = new Triangle(100, 100, 200, 100, 150, 200);
var out = [];
var result = GetRectangleToTriangle(rect, triangle, out);
expect(result).toBe(out);
expect(out.length).toBe(0);
});
it('should create a new array when out is not provided', function ()
{
var rect = new Rectangle(0, 0, 10, 10);
var triangle = new Triangle(100, 100, 200, 100, 150, 200);
var result = GetRectangleToTriangle(rect, triangle);
expect(Array.isArray(result)).toBe(true);
});
it('should return intersection points when triangle overlaps rectangle from two sides', function ()
{
var rect = new Rectangle(40, 40, 20, 20);
var triangle = new Triangle(0, 50, 100, 50, 50, 0);
var result = GetRectangleToTriangle(rect, triangle);
expect(result.length).toBeGreaterThan(0);
});
it('should return intersection points when rectangle is inside the triangle', function ()
{
var rect = new Rectangle(40, 40, 20, 20);
var triangle = new Triangle(0, 0, 200, 0, 100, 200);
var result = GetRectangleToTriangle(rect, triangle);
expect(Array.isArray(result)).toBe(true);
});
it('should handle a triangle that is completely inside the rectangle', function ()
{
var rect = new Rectangle(0, 0, 200, 200);
var triangle = new Triangle(50, 50, 150, 50, 100, 150);
var result = GetRectangleToTriangle(rect, triangle);
expect(Array.isArray(result)).toBe(true);
});
it('should populate existing out array with new intersection points', function ()
{
var rect = new Rectangle(0, 0, 100, 100);
var triangle = new Triangle(-10, 50, 110, 50, 50, -10);
var out = [{ x: 0, y: 0 }];
var result = GetRectangleToTriangle(rect, triangle, out);
expect(result.length).toBeGreaterThan(1);
});
it('should return an array when shapes share only a boundary edge', function ()
{
var rect = new Rectangle(0, 0, 50, 50);
var triangle = new Triangle(50, 0, 100, 0, 75, 50);
var result = GetRectangleToTriangle(rect, triangle);
expect(Array.isArray(result)).toBe(true);
});
});