mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
attempt jank camera fix + fix some bugs
This commit is contained in:
parent
40f075e93b
commit
4281833793
3 changed files with 34 additions and 19 deletions
BIN
marblegame.hl
BIN
marblegame.hl
Binary file not shown.
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue