armory/Sources/armory/trait/ArcBallCamera.hx
2016-08-29 09:56:34 +02:00

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);
}
}
}