Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Math from "Making Thing Move!" by Keith Peters*/
- public static function lineCircleIntersection(lineStart:Point, lineEnd:Point, entity:Entity):Boolean {
- var angle:Number = Math.atan2((lineEnd.y-lineStart.y), (lineEnd.x-lineStart.x));
- var dx:Number = entity.centerX-((lineStart.x+lineEnd.x) * 0.5);
- var dy:Number = entity.centerY-((lineStart.y+lineEnd.y) * 0.5);
- return (Math.abs(Math.cos(angle)*dy - Math.sin(angle)*dx) < entity.radius);
- }
- public static function distanceSq(lhs:Entity, rhs:Entity):Number{
- var dx:Number = lhs.centerX - rhs.centerX;
- var dy:Number = lhs.centerY - rhs.centerY;
- return (dx * dx + dy * dy);
- }
- public static function distance(lhs:Entity, rhs:Entity):Number{
- var dx:Number = lhs.centerX - rhs.centerX;
- var dy:Number = lhs.centerY - rhs.centerY;
- return Math.sqrt(dx * dx + dy * dy);
- }
- public static function intersectsAABB(lhs:core.Entity, rhs:core.Entity):Boolean {
- return !(lhs.right < rhs.left
- || rhs.right < lhs.left
- || lhs.bottom < rhs.top
- || rhs.bottom < lhs.top);
- }
- //SAT intersection test. http://www.metanetsoftware.com/technique/tutorialA.html
- //returns true on intersection, and sets the least intersecting axis in overlap
- public static function getOverlap(lhs:Entity, rhs:Entity, overlap:Point):Boolean {
- overlap.setTo(0, 0);
- var centerDeltaX:Number = lhs.centerX - rhs.centerX;
- var halfWidths:Number = (lhs.width + rhs.width) * 0.5;
- if (Math.abs(centerDeltaX) > halfWidths) return false; //no overlap on x == no collision
- var centerDeltaY:Number = lhs.centerY - rhs.centerY;
- var halfHeights:Number = (lhs.height + rhs.height) * 0.5;
- if (Math.abs(centerDeltaY) > halfHeights) return false; //no overlap on y == no collision
- var dx:Number = halfWidths - Math.abs(centerDeltaX); //overlap on x
- var dy:Number = halfHeights - Math.abs(centerDeltaY); //overlap on y
- if (dy < dx) {
- overlap.y = (centerDeltaY < 0) ? -dy : dy;
- } else if (dy > dx) {
- overlap.x = (centerDeltaX < 0) ? -dx : dx;
- } else {
- overlap.x = (centerDeltaX < 0) ? -dx : dx;
- overlap.y = (centerDeltaY < 0) ? -dy : dy;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement