package hrt.prefab; class Model extends Object3D { var animation : Null; var lockAnimation : Bool = false; public function new(?parent) { super(parent); type = "model"; } override function save() { var obj : Dynamic = super.save(); if( animation != null ) obj.animation = animation; if( lockAnimation ) obj.lockAnimation = lockAnimation; return obj; } override function load( obj : Dynamic ) { super.load(obj); animation = obj.animation; lockAnimation = obj.lockAnimation; } function setCullingCollider( o : h3d.scene.Object, cc : h3d.col.Collider ) { o.cullingCollider = cc; for( c in @:privateAccess o.children ) setCullingCollider(c, cc); } override function makeInstance(ctx:Context):Context { if( source == null) return super.makeInstance(ctx); ctx = ctx.clone(this); try { var obj = ctx.loadModel(source); if(obj.defaultTransform != null && children.length > 0) { obj.name = "root"; var root = new h3d.scene.Object(); root.addChild(obj); obj = root; } obj.name = name; ctx.local3d.addChild(obj); ctx.local3d = obj; updateInstance(ctx); if( animation != null ) obj.playAnimation(ctx.loadAnimation(animation)); return ctx; } catch( e : Dynamic ) { e.message = "Could not load model " + source + ": " + e.message; ctx.shared.onError(e); } ctx.local3d = new h3d.scene.Object(ctx.local3d); ctx.local3d.name = name; updateInstance(ctx); return ctx; } var tmpBounds = new h3d.col.Bounds(); override function updateInstance( ctx: Context, ?propName : String ) { super.updateInstance(ctx, propName); var o = ctx.local3d; #if editor var cc = o.getBounds(tmpBounds).toSphere(); setCullingCollider(o, cc); #end } #if editor override function edit( ctx : EditContext ) { super.edit(ctx); var props = ctx.properties.add(new hide.Element('
Model
Animation
Lock
'),this, function(pname) { ctx.onChange(this, pname); }); var select = props.find("select"); var anims = try ctx.scene.listAnims(source) catch(e: Dynamic) []; for( a in anims ) new hide.Element('