summaryrefslogtreecommitdiff
path: root/frontend/_rigidbody/circle.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/_rigidbody/circle.js')
-rw-r--r--frontend/_rigidbody/circle.js117
1 files changed, 0 insertions, 117 deletions
diff --git a/frontend/_rigidbody/circle.js b/frontend/_rigidbody/circle.js
deleted file mode 100644
index 1cec7ce..0000000
--- a/frontend/_rigidbody/circle.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/// <reference path="mat4.js" />
-/// <reference path="vec2.js" />
-
-const BYTES_PER_FLOAT = 4;
-
-/**
- * Initializes a new circle object for the WebGL context.
- *
- * @param {WebGLRenderingContext} pGl
- * @param {number} pRadius
- * @param {number} pSegments
- * @param {Array<Vector4>} pColorList
- * @param {vec2} pInitialPosition
- * @param {number} pMass
- */
-function circle(pGl, pRadius, pSegments, pColorList, pInitialPosition, pMass) {
- const lBuffer = pGl.createBuffer();
-
- pGl.bindBuffer(pGl.ARRAY_BUFFER, lBuffer);
-
- var lBufferedData = [];
- vertexCount = 0;
-
- const lAngleIncrements = (360.0 / pSegments) * (Math.PI / 180.0);
- for (let lSegIdx = 0; lSegIdx < pSegments; lSegIdx++) {
- const lAngle = lAngleIncrements * lSegIdx,
- lNextAngle = lAngleIncrements * (lSegIdx + 1),
- lColorIndex = Math.floor(pColorList.length * (lSegIdx / pSegments)),
- lColor = pColorList[lColorIndex]; // TODO: Calculate which one to use
-
- lBufferedData = lBufferedData.concat([
- 0, 0, lColor.x, lColor.y, lColor.z, lColor.w,
- pRadius * Math.sin(lAngle), pRadius * Math.cos(lAngle), lColor.x, lColor.y, lColor.z, lColor.w,
- pRadius * Math.sin(lNextAngle), pRadius * Math.cos(lNextAngle), lColor.x, lColor.y, lColor.z, lColor.w
- ]);
-
- vertexCount += 3;
- }
-
- pGl.bufferData(pGl.ARRAY_BUFFER, new Float32Array(lBufferedData), pGl.STATIC_DRAW)
- pGl.bindBuffer(pGl.ARRAY_BUFFER, undefined);
-
- return {
- buffer: lBuffer,
- vertexCount: vertexCount,
- prevPos: vec2(),
- position: pInitialPosition || vec2(),
- prevVelocity: vec2(),
- velocity: vec2(),
- force: vec2(),
- torque: 0,
- mass: pMass === undefined ? 1 : pMass,
- rotationVelocity: 0,
- rotationRadians: 0,
- model: translateMatrix(mat4(), pInitialPosition ? pInitialPosition.x : 0, pInitialPosition ? pInitialPosition.y : 0, 0),
- radius: pRadius
- };
-}
-
-function renderCircle(pGl, pProgramInfo, pCircle) {
- pGl.uniformMatrix4fv(pProgramInfo.uniformLocations.model, false, pCircle.model);
- pGl.bindBuffer(pGl.ARRAY_BUFFER, pCircle.buffer);
- {
- pGl.enableVertexAttribArray(pProgramInfo.attributeLocations.position);
- pGl.vertexAttribPointer(pProgramInfo.attributeLocations.position, 2, pGl.FLOAT, false, BYTES_PER_FLOAT * 6, 0);
-
- pGl.enableVertexAttribArray(pProgramInfo.attributeLocations.color);
- pGl.vertexAttribPointer(pProgramInfo.attributeLocations.color, 4, pGl.FLOAT, false, BYTES_PER_FLOAT * 6, BYTES_PER_FLOAT * 2);
- }
-
- pGl.drawArrays(pGl.TRIANGLE_STRIP, 0, pCircle.vertexCount);
-}
-
-function getMomentOfInertia(pCircle) {
- return (Math.PI * Math.pow(pCircle.radius, 4)) / 4;
-}
-
-function doCirclesIntersect(pFirst, pSecond) {
- const lDistanceBetween = Math.pow(pFirst.position.x - pSecond.position.x, 2)
- + Math.pow(pFirst.position.y - pSecond.position.y, 2)
- return lDistanceBetween <= Math.pow(pFirst.radius + pSecond.radius, 2);
-}
-
-/**
- * Returns intersection information about the intersecting circles.
- *
- * Warning! Only use this if doCirclesIntersect returned true for these circles.
- *
- * @param {circle} pFirst
- * @param {circle} pSecond
- */
-function getIntersectionDataForCircles(pFirst, pSecond) {
- // The collision normal is simply the difference between the two current positions
- const lCollisionNormal = normalize2(subVec2(pFirst.position, pSecond.position));
-
- // TODO: Might be useful in the future?
- const lCollisionPoint = vec2(
- ((pFirst.position.x * pSecond.radius) + (pSecond.position.x * pFirst.radius)) / (pFirst.radius + pSecond.radius),
- ((pFirst.position.y * pSecond.radius) + (pSecond.position.y * pFirst.radius)) / (pFirst.radius + pSecond.radius)
- );
-
- const lSecondDeepestPointInFirst = (subVec2(pSecond.position, scaleVec2(lCollisionNormal, pSecond.radius)));
- const lFirstDeepestPointInSecond = (addVec2(pFirst.position, scaleVec2(lCollisionNormal, pFirst.radius)));
- const lLengthOfOverlapByTwo = length2(subVec2(lFirstDeepestPointInSecond, lSecondDeepestPointInFirst)) / 2.0;
- const lMedianIntersectingPoint = addVec2(lSecondDeepestPointInFirst, scaleVec2(lCollisionNormal, lLengthOfOverlapByTwo));
-
- return {
- relativeVelocity: subVec2(pFirst.velocity, pSecond.velocity),
- collisionNormal: lCollisionNormal,
- firstPointOfApplication: subVec2(lMedianIntersectingPoint, pFirst.position),
- secondPointOfApplication: subVec2(lMedianIntersectingPoint, pSecond.position)
- }
-}
-
-function freeCircle(pGl, pCircle) {
- pGl.deleteBuffer(pCircle.buffer);
-} \ No newline at end of file