armory/Sources/armory/trait/GunController.hx

66 lines
1.5 KiB
Haxe
Raw Normal View History

2016-08-21 00:16:13 +02:00
package armory.trait;
import iron.math.Mat4;
import iron.math.Vec4;
import iron.Trait;
2016-09-23 00:34:42 +02:00
import iron.system.Input;
import iron.system.Time;
2016-10-02 19:52:40 +02:00
import iron.object.Object;
2016-08-25 00:26:01 +02:00
import iron.object.Transform;
import iron.object.CameraObject;
2016-08-21 00:16:13 +02:00
import armory.trait.internal.RigidBody;
2016-10-02 19:52:40 +02:00
import armory.system.Keymap;
2016-08-21 00:16:13 +02:00
2016-10-12 17:52:27 +02:00
@:keep
2016-08-21 00:16:13 +02:00
class GunController extends Trait {
2016-10-12 18:26:56 +02:00
#if (!arm_physics)
2016-08-21 00:16:13 +02:00
public function new() { super(); }
#else
2016-10-02 19:52:40 +02:00
var projectileRef:String;
var firePointRef:String;
var firePoint:Transform;
var fireStrength = 25;
2016-08-21 00:16:13 +02:00
2016-10-02 19:52:40 +02:00
public function new(projectileRef:String, firePointRef:String) {
2016-08-21 00:16:13 +02:00
super();
2016-10-02 19:52:40 +02:00
this.projectileRef = projectileRef;
this.firePointRef = firePointRef;
2016-08-21 00:16:13 +02:00
notifyOnInit(init);
}
function init() {
2016-10-02 19:52:40 +02:00
firePoint = object.getChild(firePointRef).transform;
kha.input.Keyboard.get().notify(onDown, null);
2016-08-21 00:16:13 +02:00
}
2016-10-02 19:52:40 +02:00
function onDown(key: kha.Key, char: String) {
if (char == Keymap.fire) {
shoot();
}
}
function shoot() {
// Spawn projectile
Scene.active.spawnObject(projectileRef, null, function(o:Object) {
o.transform.loc.x = firePoint.absx();
o.transform.loc.y = firePoint.absy();
o.transform.loc.z = firePoint.absz();
// Apply force
var rb:RigidBody = o.getTrait(RigidBody);
rb.notifyOnReady(function() {
var look = object.transform.look().normalize();
rb.setLinearVelocity(look.x * fireStrength, look.y * fireStrength, look.z * fireStrength);
});
// Remove projectile after a period of time
kha.Scheduler.addTimeTask(function() {
o.remove();
}, 10);
});
}
2016-08-21 00:16:13 +02:00
#end
}