Constraint.hx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package hrt.prefab;
  2. class Constraint extends Prefab {
  3. public var object(default,null) : String;
  4. public var target(default,null) : String;
  5. public var positionOnly(default,null) : Bool;
  6. override public function load(v:Dynamic) {
  7. object = v.object;
  8. target = v.target;
  9. positionOnly = v.positionOnly;
  10. }
  11. override function save() {
  12. return { object : object, target : target, positionOnly : positionOnly };
  13. }
  14. public function apply( root : h3d.scene.Object ) {
  15. var srcObj = root.getObjectByName(object.split(".").pop());
  16. var targetObj = root.getObjectByName(target.split(".").pop());
  17. if( srcObj != null && targetObj != null ){
  18. srcObj.follow = targetObj;
  19. srcObj.followPositionOnly = positionOnly;
  20. }
  21. else
  22. trace("failed to resolve constraint");
  23. return srcObj;
  24. }
  25. override function makeInstance( ctx : Context ) {
  26. if(!enabled) return ctx;
  27. var srcObj = ctx.locateObject(object);
  28. var targetObj = ctx.locateObject(target);
  29. if( srcObj != null && targetObj != null ){
  30. srcObj.follow = targetObj;
  31. srcObj.followPositionOnly = positionOnly;
  32. }
  33. return ctx;
  34. }
  35. #if editor
  36. override function getHideProps() : HideProps {
  37. return { icon : "lock", name : "Constraint" };
  38. }
  39. override function edit(ctx:EditContext) {
  40. var curObj = ctx.rootContext.locateObject(object);
  41. var props = ctx.properties.add(new hide.Element('
  42. <dl>
  43. <dt>Source</dt><dd><select field="object"><option value="">-- Choose --</option></select>
  44. <dt>Target</dt><dd><select field="target"><option value="">-- Choose --</option></select>
  45. <dt>Position Only</dt><dd><input type="checkbox" field="positionOnly"/></dd>
  46. </dl>
  47. '),this, function(_) {
  48. if( curObj != null ) curObj.follow = null;
  49. makeInstance(ctx.rootContext);
  50. curObj = ctx.rootContext.locateObject(object);
  51. });
  52. for( select in [props.find("[field=object]"), props.find("[field=target]")] ) {
  53. for( path in ctx.getNamedObjects() ) {
  54. var parts = path.split(".");
  55. var opt = new hide.Element("<option>").attr("value", path).html([for( p in 1...parts.length ) "&nbsp; "].join("") + parts.pop());
  56. select.append(opt);
  57. }
  58. select.val(Reflect.field(this, select.attr("field")));
  59. }
  60. }
  61. #end
  62. static var _ = Library.register("constraint", Constraint);
  63. }