attempt jank camera fix + fix some bugs

This commit is contained in:
RandomityGuy 2021-07-14 14:57:14 +05:30
parent 40f075e93b
commit 4281833793
3 changed files with 34 additions and 19 deletions

Binary file not shown.

View file

@ -215,8 +215,7 @@ class CameraController extends Object {
var results = level.collisionWorld.rayCast(rayCastOrigin, rayCastDirection); var results = level.collisionWorld.rayCast(rayCastOrigin, rayCastDirection);
var rayCastEnd = rayCastOrigin.add(rayCastDirection.multiply(CameraDistance)); var rayCastEnd = rayCastOrigin.add(rayCastDirection.multiply(CameraDistance));
var firstHit = null; var successHits = [];
var minD = 1e8;
for (result in results) { for (result in results) {
if (result.distance < CameraDistance) { if (result.distance < CameraDistance) {
@ -229,14 +228,13 @@ class CameraController extends Object {
var t3 = (result.point.z - rayCastOrigin.z) / (rayCastEnd.z - rayCastOrigin.z); var t3 = (result.point.z - rayCastOrigin.z) / (rayCastEnd.z - rayCastOrigin.z);
if (t3 < 0 || t3 > 1) if (t3 < 0 || t3 > 1)
continue; continue;
if (result.distance < minD) { successHits.push(result);
minD = result.distance;
firstHit = result;
}
} }
} }
if (firstHit != null) { successHits.sort((a, b) -> a.distance == b.distance ? 0 : a.distance > b.distance ? 1 : -1);
for (firstHit in successHits.slice(0, 1)) {
if (firstHit.distance < CameraDistance) { if (firstHit.distance < CameraDistance) {
// camera.pos = marblePosition.sub(directionVector.multiply(firstHit.distance * 0.7)); // camera.pos = marblePosition.sub(directionVector.multiply(firstHit.distance * 0.7));
var plane = new Plane(firstHit.normal.x, firstHit.normal.y, firstHit.normal.z, firstHit.point.dot(firstHit.normal)); var plane = new Plane(firstHit.normal.x, firstHit.normal.y, firstHit.normal.z, firstHit.point.dot(firstHit.normal));
@ -245,10 +243,22 @@ class CameraController extends Object {
var projected = plane.project(camera.pos.toPoint()); var projected = plane.project(camera.pos.toPoint());
var dist = plane.distance(camera.pos.toPoint()); var dist = plane.distance(camera.pos.toPoint());
if (dist < closeness) {
camera.pos = projected.toVector().add(normal.multiply(-closeness)); if (dist >= closeness)
} break;
camera.pos = projected.toVector().add(normal.multiply(-closeness));
var forwardVec = marblePosition.sub(camera.pos).normalized();
var rightVec = camera.up.cross(forwardVec);
var upVec = forwardVec.cross(rightVec);
camera.target = marblePosition.add(upVec.multiply(0.3));
camera.up = upVec;
continue;
} }
break;
} }
if (oob) { if (oob) {

View file

@ -56,20 +56,25 @@ class PlayGui {
var resizeEv:Void->Void; var resizeEv:Void->Void;
var _init:Bool;
public function dispose() { public function dispose() {
playGuiCtrl.dispose(); if (_init) {
gemImageScene.dispose(); playGuiCtrl.dispose();
gemImageSceneTarget.dispose(); gemImageScene.dispose();
gemImageSceneTargetBitmap.remove(); gemImageSceneTarget.dispose();
powerupImageScene.dispose(); gemImageSceneTargetBitmap.remove();
powerupImageSceneTarget.dispose(); powerupImageScene.dispose();
powerupImageSceneTargetBitmap.remove(); powerupImageSceneTarget.dispose();
RSGOCenterText.remove(); powerupImageSceneTargetBitmap.remove();
Window.getInstance().removeResizeEvent(resizeEv); RSGOCenterText.remove();
Window.getInstance().removeResizeEvent(resizeEv);
}
} }
public function init(scene2d:h2d.Scene) { public function init(scene2d:h2d.Scene) {
this.scene2d = scene2d; this.scene2d = scene2d;
this._init = true;
playGuiCtrl = new GuiControl(); playGuiCtrl = new GuiControl();
playGuiCtrl.position = new Vector(); playGuiCtrl.position = new Vector();