InputNode.hx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package arm.node.brush;
  2. import iron.math.Vec4;
  3. import arm.ui.UISidebar;
  4. import arm.Enums;
  5. @:keep
  6. class InputNode extends LogicNode {
  7. static var coords = new Vec4();
  8. static var startX = 0.0;
  9. static var startY = 0.0;
  10. // Brush ruler
  11. static var lockBegin = false;
  12. static var lockX = false;
  13. static var lockY = false;
  14. static var lockStartX = 0.0;
  15. static var lockStartY = 0.0;
  16. static var registered = false;
  17. public function new(tree: LogicTree) {
  18. super(tree);
  19. if (!registered) {
  20. registered = true;
  21. tree.notifyOnUpdate(update);
  22. }
  23. }
  24. function update() {
  25. if (Context.splitView) {
  26. Context.viewIndex = iron.system.Input.getMouse().viewX > arm.App.w() / 2 ? 1 : 0;
  27. }
  28. var decal = Context.tool == ToolDecal || Context.tool == ToolText;
  29. var decalMask = decal && Operator.shortcut(Config.keymap.decal_mask + "+" + Config.keymap.action_paint, ShortcutDown);
  30. var lazyPaint = Context.brushLazyRadius > 0 &&
  31. (Operator.shortcut(Config.keymap.action_paint, ShortcutDown) ||
  32. Operator.shortcut(Config.keymap.brush_ruler + "+" + Config.keymap.action_paint, ShortcutDown) ||
  33. decalMask);
  34. var mouse = iron.system.Input.getMouse();
  35. var paintX = mouse.viewX / iron.App.w();
  36. var paintY = mouse.viewY / iron.App.h();
  37. if (mouse.started()) {
  38. startX = mouse.viewX / iron.App.w();
  39. startY = mouse.viewY / iron.App.h();
  40. }
  41. var pen = iron.system.Input.getPen();
  42. if (pen.down()) {
  43. paintX = pen.viewX / iron.App.w();
  44. paintY = pen.viewY / iron.App.h();
  45. }
  46. if (pen.started()) {
  47. startX = pen.viewX / iron.App.w();
  48. startY = pen.viewY / iron.App.h();
  49. }
  50. if (Operator.shortcut(Config.keymap.brush_ruler + "+" + Config.keymap.action_paint, ShortcutDown)) {
  51. if (lockX) paintX = startX;
  52. if (lockY) paintY = startY;
  53. }
  54. if (Context.brushLazyRadius > 0) {
  55. Context.brushLazyX = paintX;
  56. Context.brushLazyY = paintY;
  57. }
  58. if (!lazyPaint) {
  59. coords.x = paintX;
  60. coords.y = paintY;
  61. }
  62. if (Context.splitView) {
  63. Context.viewIndex = -1;
  64. }
  65. if (lockBegin) {
  66. var dx = Math.abs(lockStartX - mouse.viewX);
  67. var dy = Math.abs(lockStartY - mouse.viewY);
  68. if (dx > 1 || dy > 1) {
  69. lockBegin = false;
  70. dx > dy ? lockY = true : lockX = true;
  71. }
  72. }
  73. var kb = iron.system.Input.getKeyboard();
  74. if (kb.started(Config.keymap.brush_ruler)) {
  75. lockStartX = mouse.viewX;
  76. lockStartY = mouse.viewY;
  77. lockBegin = true;
  78. }
  79. else if (kb.released(Config.keymap.brush_ruler)) {
  80. lockX = lockY = lockBegin = false;
  81. }
  82. if (Context.brushLazyRadius > 0) {
  83. var v1 = new Vec4(Context.brushLazyX * iron.App.w(), Context.brushLazyY * iron.App.h(), 0.0);
  84. var v2 = new Vec4(coords.x * iron.App.w(), coords.y * iron.App.h(), 0.0);
  85. var d = Vec4.distance(v1, v2);
  86. var r = Context.brushLazyRadius * 85;
  87. if (d > r) {
  88. var v3 = new Vec4();
  89. v3.subvecs(v2, v1);
  90. v3.normalize();
  91. v3.mult(1.0 - Context.brushLazyStep);
  92. v3.mult(r);
  93. v2.addvecs(v1, v3);
  94. coords.x = v2.x / iron.App.w();
  95. coords.y = v2.y / iron.App.h();
  96. // Parse brush inputs once on next draw
  97. Context.painted = -1;
  98. }
  99. Context.lastPaintX = -1;
  100. Context.lastPaintY = -1;
  101. }
  102. Context.parseBrushInputs();
  103. }
  104. override function get(from: Int): Dynamic {
  105. Context.brushLazyRadius = inputs[0].get();
  106. Context.brushLazyStep = inputs[1].get();
  107. return coords;
  108. }
  109. }