summaryrefslogtreecommitdiff
path: root/frontend/_shared/math/collision.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/_shared/math/collision.js')
-rw-r--r--frontend/_shared/math/collision.js25
1 files changed, 14 insertions, 11 deletions
diff --git a/frontend/_shared/math/collision.js b/frontend/_shared/math/collision.js
index 74ec5d8..8e4be7d 100644
--- a/frontend/_shared/math/collision.js
+++ b/frontend/_shared/math/collision.js
@@ -2,22 +2,25 @@
/// <reference path="line2.js" />
/// <reference path="circle.js" />
/// <reference path="mat4.js" />
+/// <reference path="point2.js" />
/**
*
- * @param {circle} pCricle
+ * @param {circle} pCircle
* @param {line2} pLine
*/
-function lineCircleCollision2(pCricle, pLine) {
- // We have a triangle formed by circle's position P and the two points of the line, A and B.
- var lSlope = (pCricle.position.y - pLine.start.y) / (pCricle.position.x - pLine.start.x),
- lAngle = Math.atan(lSlope),
- lAngleDiff = lAngle - pLine.angle,
- lPositionToStart = subVec2(pCricle.position, pLine.start),
- lPosToStartLength = length2(lPositionToStart),
- lHeight = lPosToStartLength * Math.sin(lAngleDiff);
+function lineCircleCollision2(pCircle, pLine) {
+ return distanceFromPoint2ToLine2(pCircle.position, pLine) <= pCircle.radius;
+}
- if (Math.abs(lHeight - pCricle.radius) < pCricle.radius) {
- console.log('Intersection');
+function getLineCircleCollison2Data(pCircle, pLine) {
+ const lCollisionNormal = pLine.normal,
+ lCollisionPoint = addVec2(pCircle.position, scaleVec2(negate2(lCollisionNormal), pCircle.radius));
+
+ return {
+ relativeVelocity: subVec2(pCircle.velocity, pLine.velocity),
+ collisionNormal: lCollisionNormal,
+ firstPointOfApplication: subVec2(lCollisionPoint, pCircle.position),
+ secondPointOfApplication: subVec2(lCollisionPoint, pLine.start)
}
} \ No newline at end of file