A Separating Axis Theorom collision library for haxe
- This is a port of Separating Axis Theorem, for collision detection between shapes.
- Supports polygons, circles, and rays currently.
- 2D only (for now).
- Includes a simple drawing interface for debugging shapes
- COLLISION ONLY. No physics here. By design :)
- Contributions welcome
##Quick look
A simple collision example
var circle = new Circle( 300, 200, 50 );
var box = Polygon.rectangle( 0, 0, 50, 150 );
box.rotation = 45;
var collideInfo = Collision.shapeWithShape( circle, box );
if(collideInfo != null) {
//use collideInfo.separation.x
// collideInfo.separation.y
// collideInfo.normalAxis.x
// collideInfo.normalAxis.y
// collideInfo.overlap
}
- not specific to luxe
- See tests/ for usage examples and tests
- Original code ported from rocketmandevelopment blog
https://underscorediscovery.github.io/differ/
##Demos
##Older Demos (being updated)
#Main Contributors
#History
1.3.0 (github dev)
1.2.0 (Latest release, haxelib)
The biggest change for sure, renamed hxcollision
to differ
Now that the library is getting more use its better to have a consistent name
and to have a more explicit path. Think of "differ" as a diff tool for shapes/rays,
it tells you how shapes differ (i.e the separation).
- Added ray collision information, rather than just true/false
- Added ray vs ray intersection with info on overlap
- Added more granular tests, that will expand further
- New test case uses luxe http://luxeengine.com/
- hxcollision/differ was born for luxe.collision, separate for any framework
- Refactor continued separating code for future 3D vs 2D
- moved all internal 2D code into differ.sat.SAT2D
- moved all internal common code into differ.sat.Common
- Renamed
Collision.test
toCollision.shapeWithShape
- Renamed
Collision.testShapes
toCollision.shapeWithShapes
- Renamed
Collision.rayShape
toCollision.rayWithShape
- Renamed
Collision.rayShapes
toCollision.rayWithShapes
- Renamed
Collision.rayRay
toCollision.rayWithRay
- Renamed
Collision.rayRays
toCollision.rayWithRays
- Renamed
Collision.rayRays
toCollision.rayWithRays
- Renamed
data.CollisionData
todata.ShapeCollision
- Renamed
data.RayCollisionData
todata.RayCollision
- Renamed
data.RayIntersectionData
todata.RayIntersection
- Removed
OpenFLDrawer
, will replace with gist or test later
1.1.0
- Added documentation and clean up of code
- Renamed
Vector2D
toVector
and cleaned up code to ONLY what is needed. This class is meant to be as small and easy to integrate as possible. - Refactor for easier maintaining in embedded libraries
- Renamed
BaseShape
toShape
, continued refactoring - Renamed
Collision.testShapes
toCollision.test
- Renamed
Collision.testShapeList
toCollision.testShapes
- Renamed
Collision.rayCollision
toCollision.ray
- Fixed various bugs in collisions
- Fixed
separation
/unitVector
behaviour (signs bugs) - Fixed bug with
Polygon
/Polygon
collisions not returning best vectors - Fixed bug where you couldn't
beginFill
usingOpenFLDrawer
- Fixed
collisionData
inCheckCircles
, shape2 wasn't assigned. - Fixed
separation
/unitVector
is now bound to shape1 as it should be - Added 2 samples (usage2 & usage3)
- Added
drawVector
inOpenFLDrawer
showing vector direction - Added
drawShape
inShapeDrawer
, will cast proper types and call appropriate drawing functions.
1.0.4
- Renamed
Polygon.normalPolygon
toPolygon.create
- Added
testShapeList
for testing one shape with many - Added changes to the test to display the
unitVector
response (soon to be renamed also) - Refactor to more integration friendly api, and more logical order of arguments for shapes.
- Fixed rotation on the base shapes absolute (submitted by @grapefrukt).
- Added name and data flag to
BaseShape
1.0.3
- Fixed bug in circle vs polygon, when polygon was rotated.
- Added line raycast with collision shapes
- Added a custom
ShapeDrawer
class, for drawing the shapes in a non specific way. - Update to latest haxelib revisions
- Removed dependency on OpenFL, now completely standalone
1.0.2
- uncommitted internal fixes
1.0.1
- Added an option for
Polygon.rectangle()
to be non-centered
1.0.0
- Initial project pull and compile/port, functional