forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package iron.data;
 | |
| 
 | |
| #if lnx_skin
 | |
| 
 | |
| import iron.data.SceneFormat;
 | |
| import iron.math.Mat4;
 | |
| 
 | |
| class Armature {
 | |
| 	public var uid: Int;
 | |
| 	public var name: String;
 | |
| 	public var actions: Array<TAction> = [];
 | |
| 	var matsReady = false;
 | |
| 
 | |
| 	public function new(uid: Int, name: String, actions: Array<TSceneFormat>) {
 | |
| 		this.uid = uid;
 | |
| 		this.name = name;
 | |
| 
 | |
| 		for (a in actions) {
 | |
| 			for (o in a.objects) setParents(o);
 | |
| 			var bones: Array<TObj> = [];
 | |
| 			traverseBones(a.objects, function(object: TObj) { bones.push(object); });
 | |
| 			this.actions.push({ name: a.name, bones: bones, mats: null });
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public function initMats() {
 | |
| 		if (matsReady) return;
 | |
| 		matsReady = true;
 | |
| 
 | |
| 		for (a in actions) {
 | |
| 			if (a.mats != null) continue;
 | |
| 			a.mats = [];
 | |
| 			for (b in a.bones) {
 | |
| 				a.mats.push(Mat4.fromFloat32Array(b.transform.values));
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public function getAction(name: String): TAction {
 | |
| 		for (a in actions) if (a.name == name) return a;
 | |
| 		return null;
 | |
| 	}
 | |
| 
 | |
| 	static function setParents(object: TObj) {
 | |
| 		if (object.children == null) return;
 | |
| 		for (o in object.children) {
 | |
| 			o.parent = object;
 | |
| 			setParents(o);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	static function traverseBones(objects: Array<TObj>, callback: TObj->Void) {
 | |
| 		for (i in 0...objects.length) {
 | |
| 			traverseBonesStep(objects[i], callback);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	static function traverseBonesStep(object: TObj, callback: TObj->Void) {
 | |
| 		if (object.type == "bone_object") callback(object);
 | |
| 		if (object.children == null) return;
 | |
| 		for (i in 0...object.children.length) {
 | |
| 			traverseBonesStep(object.children[i], callback);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| typedef TAction = {
 | |
| 	var name: String;
 | |
| 	var bones: Array<TObj>;
 | |
| 	var mats: Array<Mat4>;
 | |
| }
 | |
| 
 | |
| #end
 |