UUpdate Tutorials

This commit is contained in:
2026-10-25 12:43:53 -07:00
commit cd94bb4ba8
32 changed files with 1077 additions and 0 deletions

View File

@ -0,0 +1,28 @@
package lnx;
import leenkx.trait.physics.RigidBody;
import iron.object.Object;
class FireTrait extends iron.Trait {
public function new() {
super();
}
public function fire() {
iron.Scene.active.spawnObject("Bullet", null, function(o:Object) {
o.visible = true;
object.transform.buildMatrix();
o.transform.loc.setFrom(object.transform.world.getLoc());
o.transform.buildMatrix();
var rigidBody = o.getTrait(RigidBody);
if (rigidBody != null) rigidBody.syncTransform();
var vec = object.transform.look();
vec.mult(7);
rigidBody.applyImpulse(vec);
iron.system.Tween.timer(2, o.remove);
});
}
}

View File

@ -0,0 +1,30 @@
package lnx;
class Player1Controls extends iron.Trait {
public function new() {
super();
notifyOnUpdate(function() {
var keyboard = iron.system.Input.getKeyboard();
var gamepad = iron.system.Input.getGamepad(0);
var tank = object.getTrait(TankTrait);
if (keyboard.down("left") || gamepad.down("left") > 0.0) {
tank.turnLeft();
}
if (keyboard.down("right") || gamepad.down("right") > 0.0) {
tank.turnRight();
}
if (keyboard.down("up") || gamepad.down("up") > 0.0) {
tank.forward();
}
if (keyboard.down("down") || gamepad.down("down") > 0.0) {
tank.backward();
}
});
}
}

View File

@ -0,0 +1,16 @@
package lnx;
class Player1Fire extends iron.Trait {
public function new() {
super();
notifyOnUpdate(function() {
var keyboard = iron.system.Input.getKeyboard();
var gamepad = iron.system.Input.getGamepad(0);
if (keyboard.started("space") || gamepad.started("cross")) {
object.getTrait(FireTrait).fire();
}
});
}
}

View File

@ -0,0 +1,29 @@
package lnx;
class Player2Controls extends iron.Trait {
public function new() {
super();
notifyOnUpdate(function() {
var keyboard = iron.system.Input.getKeyboard();
var gamepad = iron.system.Input.getGamepad(1);
var tank = object.getTrait(TankTrait);
if (keyboard.down("a") || gamepad.down("left") > 0.0) {
tank.turnLeft();
}
if (keyboard.down("d") || gamepad.down("right") > 0.0) {
tank.turnRight();
}
if (keyboard.down("w") || gamepad.down("up") > 0.0) {
tank.forward();
}
if (keyboard.down("s") || gamepad.down("down") > 0.0) {
tank.backward();
}
});
}
}

View File

@ -0,0 +1,16 @@
package lnx;
class Player2Fire extends iron.Trait {
public function new() {
super();
notifyOnUpdate(function() {
var keyboard = iron.system.Input.getKeyboard();
var gamepad = iron.system.Input.getGamepad(1);
if (keyboard.started("f") || gamepad.started("cross")) {
object.getTrait(FireTrait).fire();
}
});
}
}

View File

@ -0,0 +1,52 @@
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();
}
}