From 720a92df528bc79608f993052ba79932b73efbb1 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Tue, 23 May 2023 02:04:00 +0530 Subject: [PATCH] buff nuke slightly --- src/DtsObject.hx | 4 ++-- src/Marble.hx | 38 +++++++++++++++++++++++++++++--------- src/shapes/Nuke.hx | 8 ++++++-- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/DtsObject.hx b/src/DtsObject.hx index 75d66811..c73c1edc 100644 --- a/src/DtsObject.hx +++ b/src/DtsObject.hx @@ -348,8 +348,8 @@ class DtsObject extends GameObject { for (pt in mesh.vertices) boundthing.addPoint(new h3d.col.Point(-pt.x, pt.y, pt.z)); } - boundthing.addPoint(new h3d.col.Point(this.dts.bounds.minX, this.dts.bounds.minY, this.dts.bounds.minZ)); - boundthing.addPoint(new h3d.col.Point(this.dts.bounds.maxX, this.dts.bounds.maxY, this.dts.bounds.maxZ)); + boundthing.addPoint(new h3d.col.Point(-this.dts.bounds.minX, this.dts.bounds.minY, this.dts.bounds.minZ)); + boundthing.addPoint(new h3d.col.Point(-this.dts.bounds.maxX, this.dts.bounds.maxY, this.dts.bounds.maxZ)); this.boundingCollider = new BoxCollisionEntity(boundthing, cast this); this.boundingCollider.setTransform(this.getTransform()); } diff --git a/src/Marble.hx b/src/Marble.hx index 560a98ef..e375fc0f 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -224,7 +224,7 @@ class Marble extends GameObject { public var contactEntities:Array = []; var queuedContacts:Array = []; - var appliedImpulses:Array = []; + var appliedImpulses:Array<{impulse:Vector, contactImpulse:Bool}> = []; public var heldPowerup:PowerUp; public var lastContactNormal:Vector; @@ -1498,11 +1498,14 @@ class Marble extends GameObject { continue; } - var tsi = Collision.TriangleSphereIntersection(testTri.v[0], testTri.v[1], testTri.v[2], testTri.n, position, radius, testTri.edge, - testTri.concavity); - if (tsi.result) { - var separatingDistance = position.sub(tsi.point).normalized(); - var distToContactPlane = tsi.point.distance(position); + // Intersection with plane of testTri and current position + var t = (testTri.v[0].sub(position)).dot(testTri.n) / testTri.n.lengthSq(); + var intersect = position.add(testTri.n.multiply(t)); + + var tsi = Collision.PointInTriangle(intersect, testTri.v[0], testTri.v[1], testTri.v[2]); + if (tsi) { + var separatingDistance = position.sub(intersect).normalized(); + var distToContactPlane = intersect.distance(position); if (radius - 0.005 - distToContactPlane > 0.0001) { // Nudge to the surface of the contact plane Debug.drawTriangle(testTri.v[0], testTri.v[1], testTri.v[2]); @@ -1512,6 +1515,20 @@ class Marble extends GameObject { } } + // var tsi = Collision.TriangleSphereIntersection(testTri.v[0], testTri.v[1], testTri.v[2], testTri.n, position, radius, testTri.edge, + // testTri.concavity); + // if (tsi.result) { + // var separatingDistance = position.sub(tsi.point).normalized(); + // var distToContactPlane = tsi.point.distance(position); + // if (radius - 0.005 - distToContactPlane > 0.0001) { + // // Nudge to the surface of the contact plane + // Debug.drawTriangle(testTri.v[0], testTri.v[1], testTri.v[2]); + // Debug.drawSphere(position, radius); + // position = position.add(separatingDistance.multiply(radius - distToContactPlane - 0.005)); + // resolved++; + // } + // } + // var distToContactPlane = position.dot(contact.normal) - contact.point.dot(contact.normal); } if (resolved == 0 && prevResolved == 0) @@ -1583,7 +1600,10 @@ class Marble extends GameObject { } for (impulse in appliedImpulses) { - this.velocity = this.velocity.add(impulse); + this.velocity = this.velocity.add(impulse.impulse); + if (m.jump && impulse.contactImpulse) { + this.velocity = this.velocity.add(impulse.impulse.normalized().multiply(this._jumpImpulse)); + } } appliedImpulses = []; @@ -1866,8 +1886,8 @@ class Marble extends GameObject { this.level.blastAmount = 0; } - public function applyImpulse(impulse:Vector) { - this.appliedImpulses.push(impulse); + public function applyImpulse(impulse:Vector, contactImpulse:Bool = false) { + this.appliedImpulses.push({impulse: impulse, contactImpulse: contactImpulse}); } public function enableSuperBounce(time:Float) { diff --git a/src/shapes/Nuke.hx b/src/shapes/Nuke.hx index 080ca098..a1607092 100644 --- a/src/shapes/Nuke.hx +++ b/src/shapes/Nuke.hx @@ -135,11 +135,15 @@ class Nuke extends DtsObject { var marble = this.level.marble; var minePos = this.getAbsPos().getPosition(); + var dtsCenter = this.dts.bounds.center(); + // dtsCenter.x = -dtsCenter.x; + // minePos.x += dtsCenter.x; + // minePos.y += dtsCenter.y; + // minePos.z += dtsCenter.z; var off = marble.getAbsPos().getPosition().sub(minePos); var force = computeExplosionForce(off); - - marble.applyImpulse(force); + marble.applyImpulse(force, true); // for (collider in this.colliders) { // var hull:CollisionHull = cast collider;