2019-11-13 15:17:10 +01:00
|
|
|
package arm.node.brush;
|
2018-02-26 16:59:45 +01:00
|
|
|
|
2018-09-11 10:13:38 +02:00
|
|
|
import iron.math.Vec4;
|
2020-03-18 20:26:28 +01:00
|
|
|
import arm.ui.UISidebar;
|
2018-02-26 16:59:45 +01:00
|
|
|
|
2018-06-20 19:23:49 +02:00
|
|
|
@:keep
|
2018-02-26 16:59:45 +01:00
|
|
|
class InputNode extends LogicNode {
|
|
|
|
|
|
|
|
|
|
var coords = new Vec4();
|
|
|
|
|
|
|
|
|
|
var startX = 0.0;
|
|
|
|
|
var startY = 0.0;
|
2019-03-05 21:07:43 +01:00
|
|
|
|
|
|
|
|
// Brush ruler
|
|
|
|
|
var lockBegin = false;
|
2018-02-26 16:59:45 +01:00
|
|
|
var lockX = false;
|
|
|
|
|
var lockY = false;
|
2019-03-05 21:07:43 +01:00
|
|
|
var lockStartX = 0.0;
|
|
|
|
|
var lockStartY = 0.0;
|
2018-02-26 16:59:45 +01:00
|
|
|
|
2019-12-09 00:28:10 +01:00
|
|
|
public function new(tree: LogicTree) {
|
2018-02-26 16:59:45 +01:00
|
|
|
super(tree);
|
|
|
|
|
tree.notifyOnUpdate(function() {
|
2019-10-11 20:12:31 +02:00
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
if (UISidebar.inst.splitView) {
|
|
|
|
|
UISidebar.inst.viewIndex = iron.system.Input.getMouse().viewX > arm.App.w() / 2 ? 1 : 0;
|
2019-10-11 20:12:31 +02:00
|
|
|
}
|
|
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
UISidebar.inst.brushLazyRadius = inputs[0].get();
|
|
|
|
|
UISidebar.inst.brushLazyStep = inputs[1].get();
|
2020-03-15 18:18:03 +01:00
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
var lazyPaint = UISidebar.inst.brushLazyRadius > 0 && Operator.shortcut(Config.keymap.action_paint);
|
2020-03-15 18:18:03 +01:00
|
|
|
|
2018-08-09 22:51:15 +02:00
|
|
|
var mouse = iron.system.Input.getMouse();
|
2020-03-15 18:18:03 +01:00
|
|
|
var paintX = mouse.viewX / iron.App.w();
|
|
|
|
|
var paintY = mouse.viewY / iron.App.h();
|
2018-02-26 16:59:45 +01:00
|
|
|
if (mouse.started()) {
|
2019-10-11 20:12:31 +02:00
|
|
|
startX = mouse.viewX / iron.App.w();
|
|
|
|
|
startY = mouse.viewY / iron.App.h();
|
2018-02-26 16:59:45 +01:00
|
|
|
}
|
|
|
|
|
|
2018-08-09 22:51:15 +02:00
|
|
|
var pen = iron.system.Input.getPen();
|
2018-03-09 11:16:28 +01:00
|
|
|
if (pen.down()) {
|
2020-03-15 18:18:03 +01:00
|
|
|
paintX = pen.viewX / iron.App.w();
|
|
|
|
|
paintY = pen.viewY / iron.App.h();
|
2018-03-09 11:16:28 +01:00
|
|
|
}
|
2018-10-11 17:55:05 +02:00
|
|
|
if (pen.started()) {
|
2019-10-11 20:12:31 +02:00
|
|
|
startX = pen.viewX / iron.App.w();
|
|
|
|
|
startY = pen.viewY / iron.App.h();
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-15 18:18:03 +01:00
|
|
|
if (Operator.shortcut(Config.keymap.brush_ruler + "+" + Config.keymap.action_paint)) {
|
|
|
|
|
if (lockX) paintX = startX;
|
|
|
|
|
if (lockY) paintY = startY;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
if (UISidebar.inst.brushLazyRadius > 0) {
|
|
|
|
|
UISidebar.inst.brushLazyX = paintX;
|
|
|
|
|
UISidebar.inst.brushLazyY = paintY;
|
2020-03-15 18:18:03 +01:00
|
|
|
}
|
|
|
|
|
if (!lazyPaint) {
|
|
|
|
|
coords.x = paintX;
|
|
|
|
|
coords.y = paintY;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
if (UISidebar.inst.splitView) {
|
|
|
|
|
UISidebar.inst.viewIndex = -1;
|
2018-10-11 17:55:05 +02:00
|
|
|
}
|
2018-03-09 11:16:28 +01:00
|
|
|
|
2019-03-05 21:07:43 +01:00
|
|
|
if (lockBegin) {
|
2019-10-11 20:12:31 +02:00
|
|
|
var dx = Math.abs(lockStartX - mouse.viewX);
|
|
|
|
|
var dy = Math.abs(lockStartY - mouse.viewY);
|
2019-03-05 21:07:43 +01:00
|
|
|
if (dx > 1 || dy > 1) {
|
|
|
|
|
lockBegin = false;
|
2020-03-15 18:18:03 +01:00
|
|
|
dx > dy ? lockY = true : lockX = true;
|
2019-03-05 21:07:43 +01:00
|
|
|
}
|
|
|
|
|
}
|
2019-03-06 10:28:08 +01:00
|
|
|
|
|
|
|
|
var kb = iron.system.Input.getKeyboard();
|
2019-10-11 20:12:31 +02:00
|
|
|
if (kb.started(Config.keymap.brush_ruler)) { lockStartX = mouse.viewX; lockStartY = mouse.viewY; lockBegin = true; }
|
2019-06-23 15:50:07 +02:00
|
|
|
else if (kb.released(Config.keymap.brush_ruler)) { lockX = lockY = lockBegin = false; }
|
2019-03-05 21:07:43 +01:00
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
if (UISidebar.inst.brushLazyRadius > 0) {
|
|
|
|
|
var v1 = new Vec4(UISidebar.inst.brushLazyX, UISidebar.inst.brushLazyY, 0.0);
|
2020-03-15 18:18:03 +01:00
|
|
|
var v2 = new Vec4(coords.x, coords.y, 0.0);
|
|
|
|
|
var d = Vec4.distance(v1, v2);
|
|
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
if (d > UISidebar.inst.brushLazyRadius / 10) {
|
2020-03-15 18:18:03 +01:00
|
|
|
var v3 = new Vec4();
|
|
|
|
|
v3.subvecs(v2, v1);
|
|
|
|
|
v3.normalize();
|
2020-03-18 20:26:28 +01:00
|
|
|
v3.mult(1.0 - UISidebar.inst.brushLazyStep);
|
|
|
|
|
v3.mult(UISidebar.inst.brushLazyRadius / 10);
|
2020-03-15 18:18:03 +01:00
|
|
|
v2.addvecs(v1, v3);
|
|
|
|
|
coords.x = v2.x;
|
|
|
|
|
coords.y = v2.y;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-18 20:26:28 +01:00
|
|
|
UISidebar.inst.lastPaintX = -1;
|
|
|
|
|
UISidebar.inst.lastPaintY = -1;
|
2020-03-15 18:18:03 +01:00
|
|
|
}
|
2018-02-26 16:59:45 +01:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2019-12-09 00:28:10 +01:00
|
|
|
override function get(from: Int): Dynamic {
|
2018-02-26 16:59:45 +01:00
|
|
|
return coords;
|
|
|
|
|
}
|
|
|
|
|
}
|