Files
Leenkx_Tutorials/_tanks_networking/Sources/lnx/TankTrait.hx
2026-10-25 12:43:53 -07:00

67 lines
1.4 KiB
Haxe

package lnx;
import kha.netsync.Entity;
import kha.netsync.Sync;
class TankTrait extends iron.Trait implements Entity implements Sync {
static var q = new iron.math.Quat();
var transform:iron.object.Transform;
public function new() {
super();
notifyOnInit(function() {
transform = object.transform;
});
notifyOnUpdate(register);
}
function register() {
if (SessionTrait.session != null) {
SessionTrait.session.addEntity(this);
removeUpdate(register);
}
}
@synced("all")
public function turnLeft() {
q.fromEuler(0, 0, 0.03);
transform.rot.mult(q);
transform.buildMatrix();
syncRigidBody();
}
@synced("all")
public function turnRight() {
q.fromEuler(0, 0, -0.03);
transform.rot.mult(q);
transform.buildMatrix();
syncRigidBody();
}
@synced("all")
public function forward() {
var vec = transform.look();
vec.mult(0.05);
transform.loc.add(vec);
transform.buildMatrix();
syncRigidBody();
}
@synced("all")
public function backward() {
var vec = transform.look();
vec.mult(-0.05);
transform.loc.add(vec);
transform.buildMatrix();
syncRigidBody();
}
function syncRigidBody() {
var rigidBody = object.getTrait(leenkx.trait.physics.RigidBody);
if (rigidBody != null) rigidBody.syncTransform();
}
}