2016-07-10 00:51:39 +02:00
|
|
|
package armory.trait;
|
2016-05-15 12:12:21 +02:00
|
|
|
|
|
|
|
import kha.Key;
|
2016-07-10 00:51:39 +02:00
|
|
|
import iron.Trait;
|
2016-09-23 00:34:42 +02:00
|
|
|
import iron.system.Input;
|
|
|
|
import iron.system.Time;
|
2016-08-25 00:26:01 +02:00
|
|
|
import iron.object.CameraObject;
|
2016-07-10 00:51:39 +02:00
|
|
|
import iron.math.Vec4;
|
|
|
|
import iron.math.Quat;
|
2016-10-02 19:52:40 +02:00
|
|
|
import armory.system.Keymap;
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-12 17:52:27 +02:00
|
|
|
@:keep
|
2016-07-27 14:25:01 +02:00
|
|
|
class WalkNavigation extends Trait {
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
static inline var speed = 5.0;
|
2016-08-16 23:54:37 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
var camera:CameraObject;
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
public function new() {
|
|
|
|
super();
|
2016-07-21 17:45:39 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
kha.input.Keyboard.get().notify(onKeyDown, onKeyUp);
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
notifyOnInit(init);
|
|
|
|
notifyOnUpdate(update);
|
2016-07-10 00:51:39 +02:00
|
|
|
notifyOnRemove(removed);
|
2016-10-02 19:52:40 +02:00
|
|
|
}
|
2016-05-15 12:12:21 +02:00
|
|
|
|
|
|
|
function removed() {
|
|
|
|
kha.input.Keyboard.get().remove(onKeyDown, onKeyUp);
|
|
|
|
}
|
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
function init() {
|
|
|
|
camera = cast(object, CameraObject);
|
|
|
|
}
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
function update() {
|
2016-05-15 12:12:21 +02:00
|
|
|
if (Input.occupied) return;
|
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
var d = Time.delta * speed * fast * slow;
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
if (moveForward) {
|
|
|
|
camera.move(camera.look(), d);
|
|
|
|
}
|
|
|
|
else if (moveBackward) {
|
|
|
|
camera.move(camera.look(), -d);
|
|
|
|
}
|
|
|
|
if (strafeRight) {
|
|
|
|
camera.move(camera.right(), d);
|
|
|
|
}
|
|
|
|
else if (strafeLeft) {
|
|
|
|
camera.move(camera.right(), -d);
|
|
|
|
}
|
2016-08-16 23:54:37 +02:00
|
|
|
if (strafeUp) {
|
2016-10-02 19:52:40 +02:00
|
|
|
var dir = new Vec4(0, 0, 1);
|
2016-10-12 17:52:27 +02:00
|
|
|
camera.move(dir, d);
|
2016-10-02 19:52:40 +02:00
|
|
|
}
|
|
|
|
else if (strafeDown) {
|
|
|
|
var dir = new Vec4(0, 0, 1);
|
2016-10-12 17:52:27 +02:00
|
|
|
camera.move(dir, -d);
|
2016-10-02 19:52:40 +02:00
|
|
|
}
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
if (Input.touch) {
|
|
|
|
camera.rotate(Vec4.zAxis(), -Input.deltaX / 200);
|
|
|
|
camera.rotate(camera.right(), -Input.deltaY / 200);
|
|
|
|
}
|
|
|
|
}
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
var moveForward = false;
|
|
|
|
var moveBackward = false;
|
|
|
|
var strafeLeft = false;
|
|
|
|
var strafeRight = false;
|
|
|
|
var strafeUp = false;
|
|
|
|
var strafeDown = false;
|
|
|
|
var fast = 1.0;
|
|
|
|
var slow = 1.0;
|
|
|
|
function onKeyDown(key:Key, char:String) {
|
2016-10-15 12:17:33 +02:00
|
|
|
if (char == Keymap.forward || key == Key.UP) moveForward = true;
|
|
|
|
else if (char == Keymap.backward || key == Key.DOWN) moveBackward = true;
|
|
|
|
else if (char == Keymap.left || key == Key.LEFT) strafeLeft = true;
|
|
|
|
else if (char == Keymap.right || key == Key.RIGHT) strafeRight = true;
|
2016-10-02 19:52:40 +02:00
|
|
|
else if (char == Keymap.up) strafeUp = true;
|
|
|
|
else if (char == Keymap.down) strafeDown = true;
|
|
|
|
else if (key == Keymap.fast) fast = 2.0;
|
|
|
|
else if (key == Keymap.slow) slow = 0.5;
|
|
|
|
}
|
2016-05-15 12:12:21 +02:00
|
|
|
|
2016-10-02 19:52:40 +02:00
|
|
|
function onKeyUp(key:kha.Key, char:String) {
|
2016-10-15 12:17:33 +02:00
|
|
|
if (char == Keymap.forward || key == Key.UP) moveForward = false;
|
|
|
|
else if (char == Keymap.backward || key == Key.DOWN) moveBackward = false;
|
|
|
|
else if (char == Keymap.left || key == Key.LEFT) strafeLeft = false;
|
|
|
|
else if (char == Keymap.right || key == Key.RIGHT) strafeRight = false;
|
2016-10-02 19:52:40 +02:00
|
|
|
else if (char == Keymap.up) strafeUp = false;
|
|
|
|
else if (char == Keymap.down) strafeDown = false;
|
|
|
|
else if (key == Keymap.fast) fast = 1.0;
|
|
|
|
else if (key == Keymap.slow) slow = 1.0;
|
|
|
|
}
|
2016-05-15 12:12:21 +02:00
|
|
|
}
|