53 lines
1.1 KiB
Haxe
53 lines
1.1 KiB
Haxe
|
|
package lnx;
|
||
|
|
|
||
|
|
import leenkx.trait.physics.RigidBody;
|
||
|
|
|
||
|
|
class TankTrait extends iron.Trait {
|
||
|
|
|
||
|
|
static var q = new iron.math.Quat();
|
||
|
|
var transform:iron.object.Transform;
|
||
|
|
|
||
|
|
public function new() {
|
||
|
|
super();
|
||
|
|
|
||
|
|
notifyOnInit(function() {
|
||
|
|
transform = object.transform;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
public function turnLeft() {
|
||
|
|
q.fromEuler(0, 0, 0.03);
|
||
|
|
transform.rot.mult(q);
|
||
|
|
transform.buildMatrix();
|
||
|
|
syncRigidBody();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function turnRight() {
|
||
|
|
q.fromEuler(0, 0, -0.03);
|
||
|
|
transform.rot.mult(q);
|
||
|
|
transform.buildMatrix();
|
||
|
|
syncRigidBody();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function forward() {
|
||
|
|
var vec = transform.look();
|
||
|
|
vec.mult(0.05);
|
||
|
|
transform.loc.add(vec);
|
||
|
|
transform.buildMatrix();
|
||
|
|
syncRigidBody();
|
||
|
|
}
|
||
|
|
|
||
|
|
public function backward() {
|
||
|
|
var vec = transform.look();
|
||
|
|
vec.mult(-0.05);
|
||
|
|
transform.loc.add(vec);
|
||
|
|
transform.buildMatrix();
|
||
|
|
syncRigidBody();
|
||
|
|
}
|
||
|
|
|
||
|
|
function syncRigidBody() {
|
||
|
|
var rigidBody = object.getTrait(RigidBody);
|
||
|
|
if (rigidBody != null) rigidBody.syncTransform();
|
||
|
|
}
|
||
|
|
}
|