53 lines
1.1 KiB
Haxe
53 lines
1.1 KiB
Haxe
package armory.trait;
|
|
|
|
import iron.Trait;
|
|
import iron.sys.Input;
|
|
import iron.object.CameraObject;
|
|
import iron.math.Vec4;
|
|
import iron.math.Quat;
|
|
|
|
class ArcBallCamera extends Trait {
|
|
|
|
var camera:CameraObject;
|
|
var origin:Vec4;
|
|
|
|
var pitchRad:Float;
|
|
|
|
public function new() {
|
|
super();
|
|
|
|
origin = new Vec4();
|
|
|
|
notifyOnInit(init);
|
|
notifyOnUpdate(update);
|
|
}
|
|
|
|
function init() {
|
|
camera = cast(object, CameraObject);
|
|
|
|
var r = camera.transform.rot;
|
|
var q = new Quat(r.x, r.y, r.z, r.w);
|
|
q.inverse(q);
|
|
|
|
var e = q.getEuler();
|
|
pitchRad = 90 * (std.Math.PI / 180) - e.x;
|
|
}
|
|
|
|
function update() {
|
|
|
|
if (Input.touch) {
|
|
var dist = Vec4.distance3d(camera.transform.loc, origin);
|
|
|
|
camera.move(camera.look(), dist);
|
|
camera.rotate(camera.right(), pitchRad);
|
|
|
|
camera.rotate(camera.look(), -Input.deltaX / 200);
|
|
|
|
camera.rotate(camera.right(), -pitchRad);
|
|
camera.move(camera.look(), -dist);
|
|
|
|
camera.move(camera.look(), Input.deltaY / 50);
|
|
}
|
|
}
|
|
}
|