// @input Component.ScreenTransform screenTransform // @input bool dragX // @input bool dragY // @input vec2 limitsHorizontal = {-1, 1} // @input vec2 limitsVertical = {-1, 1} var startPos = script.screenTransform.anchors.getCenter(); global.touchSystem.touchBlocking = true; var canDrag = false; var offset = vec2.zero(); var touchStarEvent = script.createEvent("TouchStartEvent"); touchStarEvent.bind(function (eventData) { var touchPos = eventData.getTouchPosition(); if (script.screenTransform.containsScreenPoint(touchPos)) { var localPosition = script.screenTransform.screenPointToParentPoint(touchPos); offset = localPosition.sub(script.screenTransform.anchors.getCenter()) canDrag = true;// allow dragging if the touch started in the frog area } }); var event = script.createEvent("TouchMoveEvent"); event.bind(function (eventData) { if (canDrag) { var touchPos = eventData.getTouchPosition(); var localPosition = script.screenTransform.screenPointToParentPoint(touchPos).sub(offset); if (!script.dragX) { localPosition.x = startPos.x; } else { localPosition.x = clamp(script.limitsHorizontal.x, script.limitsHorizontal.y, localPosition.x); } if (!script.dragY) { localPosition.y = startPos.y; } else { localPosition.y = clamp(script.limitsVertical.x, script.limitsVertical.y, localPosition.y); } script.screenTransform.anchors.setCenter(localPosition); } }); var touchEndEvent = script.createEvent("TouchEndEvent"); touchEndEvent.bind(function (eventData) { canDrag = false; }); function clamp(min, max, v) { return Math.min(Math.max(v, min), max); }