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 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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue