UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

120 lines (91 loc) 4.02 kB
var CircleToCircle = require('../../../src/geom/intersects/CircleToCircle'); describe('Phaser.Geom.Intersects.CircleToCircle', function () { it('should return true when two circles overlap', function () { var circleA = { x: 0, y: 0, radius: 10 }; var circleB = { x: 5, y: 0, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return true when two circles are tangent (touching at exactly one point)', function () { var circleA = { x: 0, y: 0, radius: 10 }; var circleB = { x: 20, y: 0, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return false when two circles do not intersect', function () { var circleA = { x: 0, y: 0, radius: 10 }; var circleB = { x: 100, y: 0, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(false); }); it('should return true when circles are concentric (same center)', function () { var circleA = { x: 0, y: 0, radius: 5 }; var circleB = { x: 0, y: 0, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return true when one circle is inside the other', function () { var circleA = { x: 0, y: 0, radius: 20 }; var circleB = { x: 5, y: 5, radius: 5 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return false when circles are just beyond touching distance', function () { var circleA = { x: 0, y: 0, radius: 10 }; var circleB = { x: 20.001, y: 0, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(false); }); it('should return true when both circles have zero radius and share the same center', function () { var circleA = { x: 5, y: 5, radius: 0 }; var circleB = { x: 5, y: 5, radius: 0 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return false when both circles have zero radius and different centers', function () { var circleA = { x: 0, y: 0, radius: 0 }; var circleB = { x: 1, y: 0, radius: 0 }; expect(CircleToCircle(circleA, circleB)).toBe(false); }); it('should work with circles in negative coordinate space', function () { var circleA = { x: -50, y: -50, radius: 10 }; var circleB = { x: -45, y: -50, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return false with circles far apart in negative coordinate space', function () { var circleA = { x: -100, y: -100, radius: 10 }; var circleB = { x: 100, y: 100, radius: 10 }; expect(CircleToCircle(circleA, circleB)).toBe(false); }); it('should work with circles on a diagonal', function () { var circleA = { x: 0, y: 0, radius: 10 }; var circleB = { x: 10, y: 10, radius: 10 }; // distance = sqrt(200) 14.14, sum of radii = 20, so they intersect expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should return false for circles separated on a diagonal', function () { var circleA = { x: 0, y: 0, radius: 5 }; var circleB = { x: 100, y: 100, radius: 5 }; // distance 141.4, sum of radii = 10 expect(CircleToCircle(circleA, circleB)).toBe(false); }); it('should return true for circles with large radii that overlap', function () { var circleA = { x: 0, y: 0, radius: 1000 }; var circleB = { x: 500, y: 0, radius: 1000 }; expect(CircleToCircle(circleA, circleB)).toBe(true); }); it('should handle floating point radii and positions', function () { var circleA = { x: 0.5, y: 0.5, radius: 2.5 }; var circleB = { x: 3.0, y: 0.5, radius: 2.5 }; // distance = 2.5, sum of radii = 5.0, so they are tangent expect(CircleToCircle(circleA, circleB)).toBe(true); }); });