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 rayCastEnd = rayCastOrigin.add(rayCastDirection.multiply(CameraDistance));
var firstHit = null;
var minD = 1e8;
var successHits = [];
for (result in results) {
if (result.distance < CameraDistance) {
@ -229,14 +228,13 @@ class CameraController extends Object {
var t3 = (result.point.z - rayCastOrigin.z) / (rayCastEnd.z - rayCastOrigin.z);
if (t3 < 0 || t3 > 1)
continue;
if (result.distance < minD) {
minD = result.distance;
firstHit = result;
}
successHits.push(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) {
// 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));
@ -245,10 +243,22 @@ class CameraController extends Object {
var projected = plane.project(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) {

View file

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