From 9a2779982daebd1b5b6a999385dcdbd5dda96037 Mon Sep 17 00:00:00 2001 From: LeenkxTeam Date: Sat, 18 Jul 2026 16:21:39 +0000 Subject: [PATCH 1/2] Update leenkx/Sources/iron/data/Geometry.hx --- leenkx/Sources/iron/data/Geometry.hx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/leenkx/Sources/iron/data/Geometry.hx b/leenkx/Sources/iron/data/Geometry.hx index 2284e842..9ec9c41c 100644 --- a/leenkx/Sources/iron/data/Geometry.hx +++ b/leenkx/Sources/iron/data/Geometry.hx @@ -55,6 +55,8 @@ class Geometry { // Skinned #if lnx_skin public var skeletonTransformsI: Array = null; + public var actions: Map> = new Map(); + public var mats: Map> = new Map(); #end public function new(data: MeshData, indices: Array, materialIndices: Array, usage: Usage = null) { From 22159c9f37270704e6e0613ee20ed1ffaface1bf Mon Sep 17 00:00:00 2001 From: LeenkxTeam Date: Sat, 18 Jul 2026 16:22:17 +0000 Subject: [PATCH 2/2] Delete leenkx/Sources/leenkx/logicnode/PlayActionFromNode.hx.backup --- .../logicnode/PlayActionFromNode.hx.backup | 193 ------------------ 1 file changed, 193 deletions(-) delete mode 100644 leenkx/Sources/leenkx/logicnode/PlayActionFromNode.hx.backup diff --git a/leenkx/Sources/leenkx/logicnode/PlayActionFromNode.hx.backup b/leenkx/Sources/leenkx/logicnode/PlayActionFromNode.hx.backup deleted file mode 100644 index 72885e00..00000000 --- a/leenkx/Sources/leenkx/logicnode/PlayActionFromNode.hx.backup +++ /dev/null @@ -1,193 +0,0 @@ -package leenkx.logicnode; - -import iron.object.Animation; -import iron.object.Object; -import iron.Scene; -import kha.arrays.Float32Array; -import iron.object.ObjectAnimation; - -class PlayActionFromNode extends LogicNode { - - var animation: Animation; - var startFrame: Int; - var endFrame: Int = -1; - var loop: Bool; - var reverse: Bool; - var action: String; - var actionR: String; - - public function new(tree: LogicTree) { - super(tree); - tree.notifyOnUpdate(update); - } - - function update() { - if (animation != null && action == animation.action) { - if (animation.currentFrame() == endFrame-1) { - if (loop) animation.setFrame(startFrame); - else { - if (!animation.paused) { - animation.pause(); - runOutput(1); - } - } - } - } - } - - override function run(from: Int) { - var object: Object = inputs[1].get(); - action = inputs[2].get(); - startFrame = inputs[3].get(); - endFrame = inputs[4].get(); - var blendTime: Float = inputs[5].get(); - var speed: Float = inputs[6].get(); - loop = inputs[7].get(); - reverse = inputs[8].get(); - - if (object == null) return; - animation = object.animation; - if (animation == null) animation = object.getParentArmature(object.name); - - if (reverse){ - var isnew = true; - actionR = action+'Reverse'; - - if (animation.isSkinned){ - for(a in animation.armature.actions) - if (a.name == actionR) isnew = false; - - if (isnew){ - for(a in animation.armature.actions) - if(a.name == action){ - var bones = []; - var cn = []; - for(bone in a.bones){ - var v = bone.anim.tracks[0]; - var len: Int = v.values.length; - var val = new Float32Array(len); - var l = Std.int(len/16); - for(i in 0...l) - for(j in 0...16){ - val[i*16+j] = v.values[(l-i)*16+j-16]; - } - - if (bone.children != null){ - var cdn = []; - for (child in bone.children) - cdn.push(child.name); - cn.push(cdn); - } else cn.push(null); - - var a: iron.data.SceneFormat.TObj = { - type : bone.type, - name : bone.name, - transform : { - //target : null, - values : bone.transform.values - }, - anim : { - tracks : [{ - target : v.target, - frames : v.frames, - values : val, - ref_values : null - }]//, - //begin : null, - //end : null, - //has_delta : null, - //marker_frames : null, - //marker_names : null - }, - children : bone.children, - data_ref : null - } - - if (bone.parent != null){ - a.parent = bone.parent; - } - - bones.push(a); - } - - for (i in 0...bones.length){ - var cd = []; - if (cn[i] != null) - for (name in cn[i]) - for (bone in bones) - if (bone.name == name) - cd.push(bone); - bones[i].children = cd; - } - - for (i in 0...bones.length){ - if (bones[i].parent != null) - for (bone in bones) - if (bone.name == bones[i].parent.name) - bones[i].parent = bone; - - } - - animation.armature.actions.push({ - name: actionR, - bones: bones, - mats: null}); - - var mats: Array = []; - for (bone in a.bones) mats.push(iron.math.Mat4.fromFloat32Array(bone.transform.values)); - - var castBoneAnim = cast(animation, iron.object.BoneAnimation); - castBoneAnim.data.geom.actions.set(actionR, bones); - castBoneAnim.data.geom.mats.set(actionR, mats); - - for(o in iron.Scene.active.raw.objects) - if (o.name == object.name) o.bone_actions.push('action_'+o.bone_actions[0].split('_')[1]+'_'+actionR); - } - } - } - else { - - var oaction = null; - var tracks: Array = []; - - var oactions = cast(animation, ObjectAnimation).oactions; - - for (a in oactions) - if (a != null && a.objects[0].name == actionR) isnew = false; - - if (isnew){ - for (a in oactions){ - if (a != null && a.objects[0].name == action){ - oaction = a.objects[0]; - for(b in a.objects[0].anim.tracks){ - var val: Array = []; - for(c in b.values) val.unshift(c); - var vali = new Float32Array(val.length); - for(i in 0...val.length) vali[i] = val[i]; - tracks.push({target: b.target, frames: b.frames, values: vali}); - } - - oactions.push({ - objects: [{name: actionR, - anim: {begin: oaction.anim.begin, end: oaction.anim.end, tracks: tracks}, - type: 'object', - data_ref: '', - transform: null}]}); - - for(o in iron.Scene.active.raw.objects) - if (o.name == object.name) o.object_actions.push('action_'+actionR); - } - } - } - } - } - - animation.play(reverse ? actionR : action, function() { - runOutput(1); - }, blendTime, speed, loop); - animation.update(startFrame * Scene.active.raw.frame_time); - - runOutput(0); - - } -}