commit cd94bb4ba8ce45eece0d57e5dd0233bd2a525438 Author: Onek8 Date: Sun Oct 25 12:43:53 2026 -0700 UUpdate Tutorials diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15755d1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*/build* +*/*.blend? +*/Sources/Main.hx +*/Sources/arm/node/* +*/khafile.js +_themes.json +node_update_failure.* diff --git a/README.md b/README.md new file mode 100644 index 0000000..e017815 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# Lnxnkx Tutorials + +Tutorials to accompany Lnxnkx SDK. + +Note: +- Download the package from [releases](https://github.com/lnxnkx3d/lnxnkx_tutorials/releases). +- Only use the latest revision of this repository if you are using [lnxnkx-git](https://github.com/lnxnkx3d/lnxnkx/wiki/gitversion). + +Check out the [manual](https://github.com/lnxnkx3d/lnxnkx/wiki). + diff --git a/_tanks_networking/Sources/lnx/FireTrait.hx b/_tanks_networking/Sources/lnx/FireTrait.hx new file mode 100644 index 0000000..f2de9c4 --- /dev/null +++ b/_tanks_networking/Sources/lnx/FireTrait.hx @@ -0,0 +1,30 @@ +package lnx; + +import kha.netsync.Entity; +import kha.netsync.Sync; +import iron.object.Object; + +class FireTrait extends iron.Trait implements Entity implements Sync { + public function new() { + super(); + } + + @synced("all") + 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(leenkx.trait.physics.RigidBody); + if (rigidBody != null) rigidBody.syncTransform(); + + var vec = object.transform.look(); + vec.mult(7); + rigidBody.applyImpulse(vec); + + iron.system.Tween.timer(2, o.remove); + }); + } +} diff --git a/_tanks_networking/Sources/lnx/Player1Controls.hx b/_tanks_networking/Sources/lnx/Player1Controls.hx new file mode 100644 index 0000000..32d6839 --- /dev/null +++ b/_tanks_networking/Sources/lnx/Player1Controls.hx @@ -0,0 +1,29 @@ +package lnx; + +class Player1Controls extends iron.Trait { + + public function new() { + super(); + + notifyOnUpdate(function() { + var keyboard = iron.system.Input.getKeyboard(); + var tank = object.getTrait(TankTrait); + + if (keyboard.down("left")) { + tank.turnLeft(); + } + + if (keyboard.down("right")) { + tank.turnRight(); + } + + if (keyboard.down("up")) { + tank.forward(); + } + + if (keyboard.down("down")) { + tank.backward(); + } + }); + } +} diff --git a/_tanks_networking/Sources/lnx/Player1Fire.hx b/_tanks_networking/Sources/lnx/Player1Fire.hx new file mode 100644 index 0000000..a566aa8 --- /dev/null +++ b/_tanks_networking/Sources/lnx/Player1Fire.hx @@ -0,0 +1,15 @@ +package lnx; + +class Player1Fire extends iron.Trait { + public function new() { + super(); + + notifyOnUpdate(function() { + var keyboard = iron.system.Input.getKeyboard(); + + if (keyboard.started("m")) { + object.getTrait(FireTrait).fire(); + } + }); + } +} diff --git a/_tanks_networking/Sources/lnx/Player2Controls.hx b/_tanks_networking/Sources/lnx/Player2Controls.hx new file mode 100644 index 0000000..d353b45 --- /dev/null +++ b/_tanks_networking/Sources/lnx/Player2Controls.hx @@ -0,0 +1,28 @@ +package lnx; + +class Player2Controls extends iron.Trait { + public function new() { + super(); + + notifyOnUpdate(function() { + var keyboard = iron.system.Input.getKeyboard(); + var tank = object.getTrait(TankTrait); + + if (keyboard.down("a")) { + tank.turnLeft(); + } + + if (keyboard.down("d")) { + tank.turnRight(); + } + + if (keyboard.down("w")) { + tank.forward(); + } + + if (keyboard.down("s")) { + tank.backward(); + } + }); + } +} diff --git a/_tanks_networking/Sources/lnx/Player2Fire.hx b/_tanks_networking/Sources/lnx/Player2Fire.hx new file mode 100644 index 0000000..41b6044 --- /dev/null +++ b/_tanks_networking/Sources/lnx/Player2Fire.hx @@ -0,0 +1,15 @@ +package lnx; + +class Player2Fire extends iron.Trait { + public function new() { + super(); + + notifyOnUpdate(function() { + var keyboard = iron.system.Input.getKeyboard(); + + if (keyboard.started("f")) { + object.getTrait(FireTrait).fire(); + } + }); + } +} diff --git a/_tanks_networking/Sources/lnx/SessionTrait.hx b/_tanks_networking/Sources/lnx/SessionTrait.hx new file mode 100644 index 0000000..ed2b178 --- /dev/null +++ b/_tanks_networking/Sources/lnx/SessionTrait.hx @@ -0,0 +1,33 @@ +package lnx; + +class SessionTrait extends iron.Trait { + + public static var session:kha.netsync.Session = null; + + public function new() { + super(); + + session = new kha.netsync.Session(2, "localhost", 6789); + session.waitForStart(startSession, onSessionRefused, onSessionError, onSessionClosed, resetSession); + } + + function startSession() { + + } + + function onSessionRefused() { + + } + + function onSessionError() { + + } + + function onSessionClosed() { + + } + + function resetSession() { + + } +} diff --git a/_tanks_networking/Sources/lnx/TankTrait.hx b/_tanks_networking/Sources/lnx/TankTrait.hx new file mode 100644 index 0000000..d2119e2 --- /dev/null +++ b/_tanks_networking/Sources/lnx/TankTrait.hx @@ -0,0 +1,66 @@ +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(); + } +} diff --git a/_tanks_networking/tanks_networking.blend b/_tanks_networking/tanks_networking.blend new file mode 100644 index 0000000..af0f259 Binary files /dev/null and b/_tanks_networking/tanks_networking.blend differ diff --git a/playground/Bundled/canvas/MyCanvas.files b/playground/Bundled/canvas/MyCanvas.files new file mode 100644 index 0000000..e69de29 diff --git a/playground/Bundled/canvas/MyCanvas.json b/playground/Bundled/canvas/MyCanvas.json new file mode 100644 index 0000000..3b9b76e --- /dev/null +++ b/playground/Bundled/canvas/MyCanvas.json @@ -0,0 +1 @@ +{"name":"untitled","x":0,"y":0,"width":960,"height":540,"elements":[{"id":0,"type":0,"name":"Text","event":"","x":3,"y":3,"width":753,"height":34,"text":"Leenkx Playground (press F to spawn box)","asset":"","color":-1,"anchor":0,"children":[],"visible":true,"rotation":0,"color_text":-1}],"assets":[],"visible":true,"theme":"Default Light"} \ No newline at end of file diff --git a/playground/README.md b/playground/README.md new file mode 100644 index 0000000..42319a5 --- /dev/null +++ b/playground/README.md @@ -0,0 +1 @@ +https://github.com/lnxnkx3d/lnxnkx/wiki/playground diff --git a/playground/Sources/lnx/SpawnBox.hx b/playground/Sources/lnx/SpawnBox.hx new file mode 100644 index 0000000..46be445 --- /dev/null +++ b/playground/Sources/lnx/SpawnBox.hx @@ -0,0 +1,32 @@ +package lnx; + +import iron.object.Object; +import iron.system.Input; +import iron.Scene; +import leenkx.trait.physics.RigidBody; + +class SpawnBox extends iron.Trait { + public function new() { + super(); + // We want to get notified every frame + notifyOnUpdate(update); + } + + function update() { + // f key was pressed + if (Input.getKeyboard().started("f")) { + // Spawn Box object + Scene.active.spawnObject("Box", null, boxSpawned); + } + } + + // Box just got spawned + function boxSpawned(o:Object) { + // Translate cube to the location of empty object + var traitOwner = object; + o.transform.loc.setFrom(traitOwner.transform.loc); + // Box object has a rigid body trait + // Notify physics system to take new location into effect! + o.getTrait(RigidBody).syncTransform(); + } +} diff --git a/playground/Sources/lnx/node/MoveCylinder.hx b/playground/Sources/lnx/node/MoveCylinder.hx new file mode 100644 index 0000000..4430ae4 --- /dev/null +++ b/playground/Sources/lnx/node/MoveCylinder.hx @@ -0,0 +1,64 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class MoveCylinder extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _GetObjectLocation_001 = new leenkx.logicnode.GetLocationNode(this); + _GetObjectLocation_001.preallocInputs(2); + _GetObjectLocation_001.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _GetObjectLocation_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, false), _GetObjectLocation_001, 0, 1); + var _SeparateXYZ = new leenkx.logicnode.SeparateVectorNode(this); + _SeparateXYZ.preallocInputs(1); + _SeparateXYZ.preallocOutputs(3); + leenkx.logicnode.LogicNode.addLink(_GetObjectLocation_001, _SeparateXYZ, 0, 0); + leenkx.logicnode.LogicNode.addLink(_SeparateXYZ, new leenkx.logicnode.FloatNode(this, 0.0), 0, 0); + var _SetObjectLocation_001 = new leenkx.logicnode.SetLocationNode(this); + _SetObjectLocation_001.preallocInputs(4); + _SetObjectLocation_001.preallocOutputs(1); + var _OnUpdate = new leenkx.logicnode.OnUpdateNode(this); + _OnUpdate.property0 = "Update"; + _OnUpdate.preallocInputs(0); + _OnUpdate.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(_OnUpdate, _SetObjectLocation_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SetObjectLocation_001, 0, 1); + var _Vector = new leenkx.logicnode.VectorNode(this); + _Vector.preallocInputs(3); + _Vector.preallocOutputs(1); + var _Math = new leenkx.logicnode.MathNode(this); + _Math.property0 = "Multiply"; + _Math.property1 = false; + _Math.preallocInputs(2); + _Math.preallocOutputs(1); + var _Math_001 = new leenkx.logicnode.MathNode(this); + _Math_001.property0 = "Sine"; + _Math_001.property1 = false; + _Math_001.preallocInputs(1); + _Math_001.preallocOutputs(1); + var _GetApplicationTime = new leenkx.logicnode.TimeNode(this); + _GetApplicationTime.preallocInputs(0); + _GetApplicationTime.preallocOutputs(3); + leenkx.logicnode.LogicNode.addLink(_GetApplicationTime, new leenkx.logicnode.FloatNode(this, 0.0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_GetApplicationTime, new leenkx.logicnode.FloatNode(this, 0.0), 2, 0); + leenkx.logicnode.LogicNode.addLink(_GetApplicationTime, _Math_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Math_001, _Math, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 4.0), _Math, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Math, _Vector, 0, 0); + leenkx.logicnode.LogicNode.addLink(_SeparateXYZ, _Vector, 1, 1); + leenkx.logicnode.LogicNode.addLink(_SeparateXYZ, _Vector, 2, 2); + leenkx.logicnode.LogicNode.addLink(_Vector, _SetObjectLocation_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, false), _SetObjectLocation_001, 0, 3); + leenkx.logicnode.LogicNode.addLink(_SetObjectLocation_001, new leenkx.logicnode.NullNode(this), 0, 0); + } +} \ No newline at end of file diff --git a/playground/playground.blend b/playground/playground.blend new file mode 100644 index 0000000..2d4b1f7 Binary files /dev/null and b/playground/playground.blend differ diff --git a/tanks_nodes/README.md b/tanks_nodes/README.md new file mode 100644 index 0000000..bc17c5c --- /dev/null +++ b/tanks_nodes/README.md @@ -0,0 +1,4 @@ +- Player1: `Up Left Down Right`, `Space` +- Player2: `W A S D`, `F` + +https://github.com/lnxnkx3d/lnxnkx/wiki/tanks diff --git a/tanks_nodes/Sources/lnx/node/FireTree.hx b/tanks_nodes/Sources/lnx/node/FireTree.hx new file mode 100644 index 0000000..58aef40 --- /dev/null +++ b/tanks_nodes/Sources/lnx/node/FireTree.hx @@ -0,0 +1,73 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class FireTree extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _ApplyImpulse_001 = new leenkx.logicnode.ApplyImpulseNode(this); + _ApplyImpulse_001.preallocInputs(4); + _ApplyImpulse_001.preallocOutputs(1); + var _SpawnObject_001 = new leenkx.logicnode.SpawnObjectNode(this); + _SpawnObject_001.preallocInputs(4); + _SpawnObject_001.preallocOutputs(2); + var _OnEvent = new leenkx.logicnode.OnEventNode(this); + _OnEvent.property1 = "init"; + _OnEvent.preallocInputs(1); + _OnEvent.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "fire"), _OnEvent, 0, 0); + leenkx.logicnode.LogicNode.addLink(_OnEvent, _SpawnObject_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, "Bullet"), _SpawnObject_001, 0, 1); + var _GetObjectTransform = new leenkx.logicnode.GetTransformNode(this); + _GetObjectTransform.preallocInputs(2); + _GetObjectTransform.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _GetObjectTransform, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, false), _GetObjectTransform, 0, 1); + leenkx.logicnode.LogicNode.addLink(_GetObjectTransform, _SpawnObject_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _SpawnObject_001, 0, 3); + leenkx.logicnode.LogicNode.addLink(_SpawnObject_001, _ApplyImpulse_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_SpawnObject_001, _ApplyImpulse_001, 1, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.VectorNode(this, 0.0,7.0,0.0), _ApplyImpulse_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _ApplyImpulse_001, 0, 3); + var _ArrayShift_001 = new leenkx.logicnode.ArrayShiftNode(this); + _ArrayShift_001.preallocInputs(1); + _ArrayShift_001.preallocOutputs(1); + var _ArrayObject_001 = new leenkx.logicnode.ArrayObjectNode(this); + _ArrayObject_001.preallocInputs(0); + _ArrayObject_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_ArrayObject_001, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_ArrayObject_001, _ArrayShift_001, 0, 0); + var _Sleep = new leenkx.logicnode.SleepNode(this); + _Sleep.preallocInputs(2); + _Sleep.preallocOutputs(1); + var _ArrayAdd_001 = new leenkx.logicnode.ArrayAddNode(this); + _ArrayAdd_001.preallocInputs(6); + _ArrayAdd_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_ApplyImpulse_001, _ArrayAdd_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_ArrayObject_001, _ArrayAdd_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, false), _ArrayAdd_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _ArrayAdd_001, 0, 3); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, false), _ArrayAdd_001, 0, 4); + leenkx.logicnode.LogicNode.addLink(_SpawnObject_001, _ArrayAdd_001, 1, 5); + leenkx.logicnode.LogicNode.addLink(_ArrayAdd_001, new leenkx.logicnode.NullNode(this), 1, 0); + leenkx.logicnode.LogicNode.addLink(_ArrayAdd_001, _Sleep, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 2.0), _Sleep, 0, 1); + var _RemoveObject_001 = new leenkx.logicnode.RemoveObjectNode(this); + _RemoveObject_001.preallocInputs(4); + _RemoveObject_001.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(_Sleep, _RemoveObject_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_ArrayShift_001, _RemoveObject_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _RemoveObject_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _RemoveObject_001, 0, 3); + leenkx.logicnode.LogicNode.addLink(_RemoveObject_001, new leenkx.logicnode.NullNode(this), 0, 0); + } +} \ No newline at end of file diff --git a/tanks_nodes/Sources/lnx/node/Player1Controls.hx b/tanks_nodes/Sources/lnx/node/Player1Controls.hx new file mode 100644 index 0000000..eead80d --- /dev/null +++ b/tanks_nodes/Sources/lnx/node/Player1Controls.hx @@ -0,0 +1,150 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class Player1Controls extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _Gamepad_003 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_003.property0 = "down"; + _Gamepad_003.property1 = "left"; + _Gamepad_003.preallocInputs(1); + _Gamepad_003.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 0), _Gamepad_003, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_003, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _SendEventtoObject_004 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_004.preallocInputs(3); + _SendEventtoObject_004.preallocOutputs(1); + var _Merge_008 = new leenkx.logicnode.MergeNode(this); + _Merge_008.property0 = "once_per_input"; + _Merge_008.preallocInputs(2); + _Merge_008.preallocOutputs(2); + var _Keyboard_002 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_002.property0 = "down"; + _Keyboard_002.property1 = "right"; + _Keyboard_002.preallocInputs(0); + _Keyboard_002.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_002, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_002, _Merge_008, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_003, _Merge_008, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_008, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_008, _SendEventtoObject_004, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "turn_right"), _SendEventtoObject_004, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_004, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_004, new leenkx.logicnode.NullNode(this), 0, 0); + var _Gamepad_001 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_001.property0 = "down"; + _Gamepad_001.property1 = "up"; + _Gamepad_001.preallocInputs(1); + _Gamepad_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 0), _Gamepad_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_001, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _Gamepad_004 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_004.property0 = "down"; + _Gamepad_004.property1 = "right"; + _Gamepad_004.preallocInputs(1); + _Gamepad_004.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 0), _Gamepad_004, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_004, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _SendEventtoObject_002 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_002.preallocInputs(3); + _SendEventtoObject_002.preallocOutputs(1); + var _Merge_002 = new leenkx.logicnode.MergeNode(this); + _Merge_002.property0 = "once_per_input"; + _Merge_002.preallocInputs(2); + _Merge_002.preallocOutputs(2); + var _Keyboard_004 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_004.property0 = "down"; + _Keyboard_004.property1 = "up"; + _Keyboard_004.preallocInputs(0); + _Keyboard_004.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_004, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_004, _Merge_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_004, _Merge_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_002, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_002, _SendEventtoObject_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "turn_left"), _SendEventtoObject_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_002, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_002, new leenkx.logicnode.NullNode(this), 0, 0); + var _SendEventtoObject = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject.preallocInputs(3); + _SendEventtoObject.preallocOutputs(1); + var _Merge_003 = new leenkx.logicnode.MergeNode(this); + _Merge_003.property0 = "once_per_input"; + _Merge_003.preallocInputs(2); + _Merge_003.preallocOutputs(2); + var _Keyboard_001 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_001.property0 = "down"; + _Keyboard_001.property1 = "left"; + _Keyboard_001.preallocInputs(0); + _Keyboard_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, _Merge_003, 0, 0); + var _Gamepad_002 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_002.property0 = "down"; + _Gamepad_002.property1 = "down"; + _Gamepad_002.preallocInputs(1); + _Gamepad_002.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 0), _Gamepad_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_002, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_002, _Merge_003, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_003, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_003, _SendEventtoObject, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "backward"), _SendEventtoObject, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject, new leenkx.logicnode.NullNode(this), 0, 0); + var _SendEventtoObject_001 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_001.preallocInputs(3); + _SendEventtoObject_001.preallocOutputs(1); + var _Merge_001 = new leenkx.logicnode.MergeNode(this); + _Merge_001.property0 = "once_per_input"; + _Merge_001.preallocInputs(2); + _Merge_001.preallocOutputs(2); + var _Keyboard = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard.property0 = "down"; + _Keyboard.property1 = "back"; + _Keyboard.preallocInputs(0); + _Keyboard.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard, _Merge_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_001, _Merge_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_001, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_001, _SendEventtoObject_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "forward"), _SendEventtoObject_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_001, new leenkx.logicnode.NullNode(this), 0, 0); + var _Merge = new leenkx.logicnode.MergeNode(this); + _Merge.property0 = "once_per_input"; + _Merge.preallocInputs(0); + _Merge.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + var _Merge_005 = new leenkx.logicnode.MergeNode(this); + _Merge_005.property0 = "once_per_input"; + _Merge_005.preallocInputs(0); + _Merge_005.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge_005, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_005, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + var _Merge_006 = new leenkx.logicnode.MergeNode(this); + _Merge_006.property0 = "once_per_input"; + _Merge_006.preallocInputs(0); + _Merge_006.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge_006, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_006, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + var _Merge_007 = new leenkx.logicnode.MergeNode(this); + _Merge_007.property0 = "once_per_input"; + _Merge_007.preallocInputs(0); + _Merge_007.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge_007, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_007, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + } +} \ No newline at end of file diff --git a/tanks_nodes/Sources/lnx/node/Player1Fire.hx b/tanks_nodes/Sources/lnx/node/Player1Fire.hx new file mode 100644 index 0000000..7afbf7c --- /dev/null +++ b/tanks_nodes/Sources/lnx/node/Player1Fire.hx @@ -0,0 +1,51 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class Player1Fire extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _Gamepad = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad.property0 = "started"; + _Gamepad.property1 = "cross"; + _Gamepad.preallocInputs(1); + _Gamepad.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 0), _Gamepad, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _SendEventtoObject_001 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_001.preallocInputs(3); + _SendEventtoObject_001.preallocOutputs(1); + var _Merge_002 = new leenkx.logicnode.MergeNode(this); + _Merge_002.property0 = "once_per_input"; + _Merge_002.preallocInputs(2); + _Merge_002.preallocOutputs(2); + var _Keyboard_001 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_001.property0 = "started"; + _Keyboard_001.property1 = "space"; + _Keyboard_001.preallocInputs(0); + _Keyboard_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, _Merge_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad, _Merge_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_002, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_002, _SendEventtoObject_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "fire"), _SendEventtoObject_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_001, new leenkx.logicnode.NullNode(this), 0, 0); + var _Merge = new leenkx.logicnode.MergeNode(this); + _Merge.property0 = "once_per_input"; + _Merge.preallocInputs(0); + _Merge.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + } +} \ No newline at end of file diff --git a/tanks_nodes/Sources/lnx/node/Player2Controls.hx b/tanks_nodes/Sources/lnx/node/Player2Controls.hx new file mode 100644 index 0000000..16fd418 --- /dev/null +++ b/tanks_nodes/Sources/lnx/node/Player2Controls.hx @@ -0,0 +1,150 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class Player2Controls extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _Gamepad = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad.property0 = "down"; + _Gamepad.property1 = "right"; + _Gamepad.preallocInputs(1); + _Gamepad.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 1), _Gamepad, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _SendEventtoObject_004 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_004.preallocInputs(3); + _SendEventtoObject_004.preallocOutputs(1); + var _Merge_008 = new leenkx.logicnode.MergeNode(this); + _Merge_008.property0 = "once_per_input"; + _Merge_008.preallocInputs(2); + _Merge_008.preallocOutputs(2); + var _Keyboard_002 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_002.property0 = "down"; + _Keyboard_002.property1 = "a"; + _Keyboard_002.preallocInputs(0); + _Keyboard_002.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_002, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_002, _Merge_008, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad, _Merge_008, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_008, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_008, _SendEventtoObject_004, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "turn_right"), _SendEventtoObject_004, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_004, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_004, new leenkx.logicnode.NullNode(this), 0, 0); + var _Gamepad_004 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_004.property0 = "down"; + _Gamepad_004.property1 = "left"; + _Gamepad_004.preallocInputs(1); + _Gamepad_004.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 1), _Gamepad_004, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_004, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _Gamepad_001 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_001.property0 = "down"; + _Gamepad_001.property1 = "up"; + _Gamepad_001.preallocInputs(1); + _Gamepad_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 1), _Gamepad_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_001, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _SendEventtoObject_002 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_002.preallocInputs(3); + _SendEventtoObject_002.preallocOutputs(1); + var _Merge_002 = new leenkx.logicnode.MergeNode(this); + _Merge_002.property0 = "once_per_input"; + _Merge_002.preallocInputs(2); + _Merge_002.preallocOutputs(2); + var _Keyboard = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard.property0 = "down"; + _Keyboard.property1 = "d"; + _Keyboard.preallocInputs(0); + _Keyboard.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard, _Merge_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_004, _Merge_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_002, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_002, _SendEventtoObject_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "turn_left"), _SendEventtoObject_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_002, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_002, new leenkx.logicnode.NullNode(this), 0, 0); + var _Gamepad_002 = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad_002.property0 = "down"; + _Gamepad_002.property1 = "down"; + _Gamepad_002.preallocInputs(1); + _Gamepad_002.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 1), _Gamepad_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_002, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + var _SendEventtoObject = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject.preallocInputs(3); + _SendEventtoObject.preallocOutputs(1); + var _Merge_003 = new leenkx.logicnode.MergeNode(this); + _Merge_003.property0 = "once_per_input"; + _Merge_003.preallocInputs(2); + _Merge_003.preallocOutputs(2); + var _Keyboard_001 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_001.property0 = "down"; + _Keyboard_001.property1 = "w"; + _Keyboard_001.preallocInputs(0); + _Keyboard_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, _Merge_003, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_001, _Merge_003, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_003, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_003, _SendEventtoObject, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "forward"), _SendEventtoObject, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject, new leenkx.logicnode.NullNode(this), 0, 0); + var _SendEventtoObject_001 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_001.preallocInputs(3); + _SendEventtoObject_001.preallocOutputs(1); + var _Merge_001 = new leenkx.logicnode.MergeNode(this); + _Merge_001.property0 = "once_per_input"; + _Merge_001.preallocInputs(2); + _Merge_001.preallocOutputs(2); + var _Keyboard_003 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_003.property0 = "down"; + _Keyboard_003.property1 = "s"; + _Keyboard_003.preallocInputs(0); + _Keyboard_003.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_003, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_003, _Merge_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad_002, _Merge_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge_001, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_001, _SendEventtoObject_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "backward"), _SendEventtoObject_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_001, new leenkx.logicnode.NullNode(this), 0, 0); + var _Merge = new leenkx.logicnode.MergeNode(this); + _Merge.property0 = "once_per_input"; + _Merge.preallocInputs(0); + _Merge.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + var _Merge_005 = new leenkx.logicnode.MergeNode(this); + _Merge_005.property0 = "once_per_input"; + _Merge_005.preallocInputs(0); + _Merge_005.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge_005, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_005, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + var _Merge_006 = new leenkx.logicnode.MergeNode(this); + _Merge_006.property0 = "once_per_input"; + _Merge_006.preallocInputs(0); + _Merge_006.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge_006, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_006, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + var _Merge_007 = new leenkx.logicnode.MergeNode(this); + _Merge_007.property0 = "once_per_input"; + _Merge_007.preallocInputs(0); + _Merge_007.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Merge_007, new leenkx.logicnode.NullNode(this), 0, 0); + leenkx.logicnode.LogicNode.addLink(_Merge_007, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + } +} \ No newline at end of file diff --git a/tanks_nodes/Sources/lnx/node/Player2Fire.hx b/tanks_nodes/Sources/lnx/node/Player2Fire.hx new file mode 100644 index 0000000..577e988 --- /dev/null +++ b/tanks_nodes/Sources/lnx/node/Player2Fire.hx @@ -0,0 +1,45 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class Player2Fire extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _SendEventtoObject_001 = new leenkx.logicnode.SendEventNode(this); + _SendEventtoObject_001.preallocInputs(3); + _SendEventtoObject_001.preallocOutputs(1); + var _Merge = new leenkx.logicnode.MergeNode(this); + _Merge.property0 = "once_per_input"; + _Merge.preallocInputs(2); + _Merge.preallocOutputs(2); + var _Keyboard_001 = new leenkx.logicnode.MergedKeyboardNode(this); + _Keyboard_001.property0 = "started"; + _Keyboard_001.property1 = "f"; + _Keyboard_001.preallocInputs(0); + _Keyboard_001.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Keyboard_001, _Merge, 0, 0); + var _Gamepad = new leenkx.logicnode.MergedGamepadNode(this); + _Gamepad.property0 = "started"; + _Gamepad.property1 = "circle"; + _Gamepad.preallocInputs(1); + _Gamepad.preallocOutputs(2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.IntegerNode(this, 1), _Gamepad, 0, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad, new leenkx.logicnode.BooleanNode(this, false), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Gamepad, _Merge, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Merge, new leenkx.logicnode.IntegerNode(this, 0), 1, 0); + leenkx.logicnode.LogicNode.addLink(_Merge, _SendEventtoObject_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "fire"), _SendEventtoObject_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _SendEventtoObject_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(_SendEventtoObject_001, new leenkx.logicnode.NullNode(this), 0, 0); + } +} \ No newline at end of file diff --git a/tanks_nodes/Sources/lnx/node/TankTree.hx b/tanks_nodes/Sources/lnx/node/TankTree.hx new file mode 100644 index 0000000..fe41681 --- /dev/null +++ b/tanks_nodes/Sources/lnx/node/TankTree.hx @@ -0,0 +1,98 @@ +package lnx.node; + +@:access(leenkx.logicnode.LogicNode)@:keep class TankTree extends leenkx.logicnode.LogicTree { + + var functionNodes:Map; + + var functionOutputNodes:Map; + + public function new() { + super(); + this.functionNodes = new Map(); + this.functionOutputNodes = new Map(); + notifyOnAdd(add); + } + + override public function add() { + var _TranslateObject = new leenkx.logicnode.TranslateObjectNode(this); + _TranslateObject.preallocInputs(4); + _TranslateObject.preallocOutputs(1); + var _OnEvent_001 = new leenkx.logicnode.OnEventNode(this); + _OnEvent_001.property1 = "init"; + _OnEvent_001.preallocInputs(1); + _OnEvent_001.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "backward"), _OnEvent_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(_OnEvent_001, _TranslateObject, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _TranslateObject, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.VectorNode(this, 0.0,-0.05000000074505806,0.0), _TranslateObject, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _TranslateObject, 0, 3); + leenkx.logicnode.LogicNode.addLink(_TranslateObject, new leenkx.logicnode.NullNode(this), 0, 0); + var _TranslateObject_002 = new leenkx.logicnode.TranslateObjectNode(this); + _TranslateObject_002.preallocInputs(4); + _TranslateObject_002.preallocOutputs(1); + var _OnEvent_003 = new leenkx.logicnode.OnEventNode(this); + _OnEvent_003.property1 = "init"; + _OnEvent_003.preallocInputs(1); + _OnEvent_003.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "forward"), _OnEvent_003, 0, 0); + leenkx.logicnode.LogicNode.addLink(_OnEvent_003, _TranslateObject_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _TranslateObject_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.VectorNode(this, 0.0,0.05000000074505806,0.0), _TranslateObject_002, 0, 2); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.BooleanNode(this, true), _TranslateObject_002, 0, 3); + leenkx.logicnode.LogicNode.addLink(_TranslateObject_002, new leenkx.logicnode.NullNode(this), 0, 0); + var _Rotation_001 = new leenkx.logicnode.RotationNode(this); + _Rotation_001.property0 = "EulerAngles"; + _Rotation_001.property1 = "Deg"; + _Rotation_001.property2 = "XYZ"; + _Rotation_001.preallocInputs(2); + _Rotation_001.preallocOutputs(1); + var _Vector_001 = new leenkx.logicnode.VectorNode(this); + _Vector_001.preallocInputs(3); + _Vector_001.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.0), _Vector_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.0), _Vector_001, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.029999999329447746), _Vector_001, 0, 2); + leenkx.logicnode.LogicNode.addLink(_Vector_001, _Rotation_001, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.0), _Rotation_001, 0, 1); + var _RotateObject = new leenkx.logicnode.RotateObjectNode(this); + _RotateObject.property0 = "Local"; + _RotateObject.preallocInputs(3); + _RotateObject.preallocOutputs(1); + var _OnEvent = new leenkx.logicnode.OnEventNode(this); + _OnEvent.property1 = "init"; + _OnEvent.preallocInputs(1); + _OnEvent.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "turn_left"), _OnEvent, 0, 0); + leenkx.logicnode.LogicNode.addLink(_OnEvent, _RotateObject, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _RotateObject, 0, 1); + var _Rotation = new leenkx.logicnode.RotationNode(this); + _Rotation.property0 = "EulerAngles"; + _Rotation.property1 = "Deg"; + _Rotation.property2 = "XYZ"; + _Rotation.preallocInputs(2); + _Rotation.preallocOutputs(1); + var _Vector_002 = new leenkx.logicnode.VectorNode(this); + _Vector_002.preallocInputs(3); + _Vector_002.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.0), _Vector_002, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.0), _Vector_002, 0, 1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, -0.029999999329447746), _Vector_002, 0, 2); + leenkx.logicnode.LogicNode.addLink(_Vector_002, _Rotation, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.FloatNode(this, 0.0), _Rotation, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Rotation, _RotateObject, 0, 2); + leenkx.logicnode.LogicNode.addLink(_RotateObject, new leenkx.logicnode.NullNode(this), 0, 0); + var _RotateObject_003 = new leenkx.logicnode.RotateObjectNode(this); + _RotateObject_003.property0 = "Local"; + _RotateObject_003.preallocInputs(3); + _RotateObject_003.preallocOutputs(1); + var _OnEvent_004 = new leenkx.logicnode.OnEventNode(this); + _OnEvent_004.property1 = "init"; + _OnEvent_004.preallocInputs(1); + _OnEvent_004.preallocOutputs(1); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.StringNode(this, "turn_right"), _OnEvent_004, 0, 0); + leenkx.logicnode.LogicNode.addLink(_OnEvent_004, _RotateObject_003, 0, 0); + leenkx.logicnode.LogicNode.addLink(new leenkx.logicnode.ObjectNode(this, ""), _RotateObject_003, 0, 1); + leenkx.logicnode.LogicNode.addLink(_Rotation_001, _RotateObject_003, 0, 2); + leenkx.logicnode.LogicNode.addLink(_RotateObject_003, new leenkx.logicnode.NullNode(this), 0, 0); + } +} \ No newline at end of file diff --git a/tanks_nodes/tanks_nodes.blend b/tanks_nodes/tanks_nodes.blend new file mode 100644 index 0000000..829bc0a Binary files /dev/null and b/tanks_nodes/tanks_nodes.blend differ diff --git a/tanks_script/README.md b/tanks_script/README.md new file mode 100644 index 0000000..bc17c5c --- /dev/null +++ b/tanks_script/README.md @@ -0,0 +1,4 @@ +- Player1: `Up Left Down Right`, `Space` +- Player2: `W A S D`, `F` + +https://github.com/lnxnkx3d/lnxnkx/wiki/tanks diff --git a/tanks_script/Sources/lnx/FireTrait.hx b/tanks_script/Sources/lnx/FireTrait.hx new file mode 100644 index 0000000..85e3e2b --- /dev/null +++ b/tanks_script/Sources/lnx/FireTrait.hx @@ -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); + }); + } +} diff --git a/tanks_script/Sources/lnx/Player1Controls.hx b/tanks_script/Sources/lnx/Player1Controls.hx new file mode 100644 index 0000000..3c22a11 --- /dev/null +++ b/tanks_script/Sources/lnx/Player1Controls.hx @@ -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(); + } + }); + } +} diff --git a/tanks_script/Sources/lnx/Player1Fire.hx b/tanks_script/Sources/lnx/Player1Fire.hx new file mode 100644 index 0000000..ef5b88a --- /dev/null +++ b/tanks_script/Sources/lnx/Player1Fire.hx @@ -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(); + } + }); + } +} diff --git a/tanks_script/Sources/lnx/Player2Controls.hx b/tanks_script/Sources/lnx/Player2Controls.hx new file mode 100644 index 0000000..2cb0311 --- /dev/null +++ b/tanks_script/Sources/lnx/Player2Controls.hx @@ -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(); + } + }); + } +} diff --git a/tanks_script/Sources/lnx/Player2Fire.hx b/tanks_script/Sources/lnx/Player2Fire.hx new file mode 100644 index 0000000..a68e570 --- /dev/null +++ b/tanks_script/Sources/lnx/Player2Fire.hx @@ -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(); + } + }); + } +} diff --git a/tanks_script/Sources/lnx/TankTrait.hx b/tanks_script/Sources/lnx/TankTrait.hx new file mode 100644 index 0000000..b181474 --- /dev/null +++ b/tanks_script/Sources/lnx/TankTrait.hx @@ -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(); + } +} diff --git a/tanks_script/tanks_script.blend b/tanks_script/tanks_script.blend new file mode 100644 index 0000000..e942c20 Binary files /dev/null and b/tanks_script/tanks_script.blend differ