2
0

Object2D.hx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package hrt.prefab;
  2. import hxd.Math;
  3. class Object2D extends Prefab {
  4. public var local2d : h2d.Object = null;
  5. @:s @:range(0,400) public var x : Float = 0.;
  6. @:s @:range(0,400) public var y : Float = 0.;
  7. @:s public var scaleX : Float = 1.;
  8. @:s public var scaleY : Float = 1.;
  9. var scaleArray(get, set) : Array<Float>;
  10. @:s public var rotation : Float = 0.;
  11. @:s public var visible : Bool = true;
  12. @:s public var blendMode : h2d.BlendMode = None;
  13. public inline function get_scaleArray() : Array<Float> {
  14. return [scaleX, scaleY];
  15. }
  16. public inline function set_scaleArray(array: Array<Float>) : Array<Float> {
  17. scaleX = array[0];
  18. scaleY = array[1];
  19. return array;
  20. }
  21. public static inline function getLocal2d(prefab: Prefab) : h2d.Object {
  22. var obj2d = Std.downcast(prefab, Object2D);
  23. if (obj2d != null)
  24. return obj2d.local2d;
  25. return null;
  26. }
  27. function makeObject(parent2d: h2d.Object) : h2d.Object {
  28. return new h2d.Object(parent2d);
  29. }
  30. override function makeInstance() {
  31. local2d = makeObject(shared.current2d);
  32. if (local2d != null)
  33. local2d.name = name;
  34. updateInstance();
  35. }
  36. override function make(?sh:hrt.prefab.Prefab.ContextMake) : Prefab {
  37. makeInstance();
  38. var old2d = shared.current2d;
  39. shared.current2d = local2d ?? shared.current2d;
  40. for (c in children)
  41. makeChild(c);
  42. shared.current2d = old2d;
  43. postMakeInstance();
  44. return this;
  45. }
  46. public function loadTransform(t) {
  47. x = t.x;
  48. y = t.y;
  49. scaleX = t.scaleX;
  50. scaleY = t.scaleY;
  51. rotation = t.rotation;
  52. }
  53. public function saveTransform() {
  54. return { x : x, y : y, scaleX : scaleX, scaleY : scaleY, rotation : rotation };
  55. }
  56. public function setTransform(t) {
  57. x = t.x;
  58. y = t.y;
  59. scaleX = t.scaleX;
  60. scaleY = t.scaleY;
  61. rotation = t.rotation;
  62. }
  63. public function applyTransform( o : h2d.Object ) {
  64. o.x = x;
  65. o.y = y;
  66. o.scaleX = scaleX;
  67. o.scaleY = scaleY;
  68. o.rotation = Math.degToRad(rotation);
  69. }
  70. override function updateInstance(?propName : String ) {
  71. var o = local2d;
  72. o.x = x;
  73. o.y = y;
  74. if(propName == null || propName.indexOf("scale") == 0) {
  75. o.scaleX = scaleX;
  76. o.scaleY = scaleY;
  77. }
  78. if(propName == null || propName.indexOf("rotation") == 0)
  79. o.rotation = Math.degToRad(rotation);
  80. if(propName == null || propName == "visible")
  81. o.visible = visible;
  82. if(propName == null || propName == "blendMode")
  83. if (blendMode != null) o.blendMode = blendMode;
  84. }
  85. override function getDefaultEditorName() {
  86. return type == "object2D" ? "group2D" : super.getDefaultEditorName();
  87. }
  88. #if editor
  89. override function getHideProps() : hide.prefab.HideProps {
  90. // Check children
  91. return {
  92. icon : children == null || children.length > 0 ? "folder-open" : "genderless",
  93. name : "Group 2D"
  94. };
  95. }
  96. override function editorRemoveInstanceObjects() : Void {
  97. if (local2d != null) {
  98. local2d.remove();
  99. }
  100. super.editorRemoveInstanceObjects();
  101. }
  102. override function edit( ctx : hide.prefab.EditContext ) {
  103. var props = new hide.Element('
  104. <div class="group" name="Position">
  105. <dl>
  106. <dt>X</dt><dd><input type="range" min="-100" max="100" value="0" field="x"/></dd>
  107. <dt>Y</dt><dd><input type="range" min="-100" max="100" value="0" field="y"/></dd>
  108. <dt>Scale</dt><dd><input type="multi-range" min="0" max="5" value="0" field="scaleArray" data-subfields="X,Y"/></dd>
  109. <dt>Rotation</dt><dd><input type="range" min="-180" max="180" value="0" field="rotation" /></dd>
  110. </dl>
  111. </div>
  112. <div class="group" name="Display">
  113. <dl>
  114. <dt>Visible</dt><dd><input type="checkbox" field="visible"/></dd>
  115. <dt>Blend Mode</dt><dd><select field="blendMode"/></dd></dd>
  116. </dl>
  117. </div>
  118. ');
  119. ctx.properties.add(props, this, function(pname) {
  120. ctx.onChange(this, pname);
  121. });
  122. }
  123. #end
  124. static var _ = Prefab.register("object2D", Object2D);
  125. }