private void getStageCoordinatesWithDeadzone (final InputEvent event) { final Actor parent = mimic.getActor().getParent(); if (parent != null) { MIMIC_COORDINATES.set(Vector2.Zero);
private void getStageCoordinatesWithinParent (final InputEvent event) { final Actor parent = mimic.getActor().getParent(); if (parent != null) { MIMIC_COORDINATES.set(Vector2.Zero); parent.localToStageCoordinates(MIMIC_COORDINATES); final float parentX = MIMIC_COORDINATES.x; final float parentY = MIMIC_COORDINATES.y; final float parentEndX = parentX + parent.getWidth(); final float parentEndY = parentY + parent.getHeight(); MIMIC_COORDINATES.set(event.getStageX() + offsetX, event.getStageY() + offsetY); if (MIMIC_COORDINATES.x < parentX) { MIMIC_COORDINATES.x = parentX; } else if (MIMIC_COORDINATES.x + mimic.getWidth() > parentEndX) { MIMIC_COORDINATES.x = parentEndX - mimic.getWidth(); } if (MIMIC_COORDINATES.y < parentY) { MIMIC_COORDINATES.y = parentY; } else if (MIMIC_COORDINATES.y + mimic.getHeight() > parentEndY) { MIMIC_COORDINATES.y = parentEndY - mimic.getHeight(); } STAGE_COORDINATES.set(MathUtils.clamp(event.getStageX(), parentX, parentEndX - 1f), MathUtils.clamp(event.getStageY(), parentY, parentEndY - 1f)); } else { getStageCoordinatesWithOffset(event); } }
@Override public void touchUp (final InputEvent event, final float x, final float y, final int pointer, final int button) { if (isDragged()) { removeBlocker(); getStageCoordinates(event); mimic.setPosition(MIMIC_COORDINATES.x, MIMIC_COORDINATES.y); if (listener == null || mimic.getActor().getStage() != null && listener.onEnd(this, mimic.getActor(), STAGE_COORDINATES.x, STAGE_COORDINATES.y)) { // Drag end approved - fading out. addMimicHidingAction(Actions.fadeOut(fadingTime, fadingInterpolation), fadingTime); } else { // Drag end cancelled - returning to the original position. addMimicHidingAction(Actions.moveTo(dragStartX, dragStartY, movingTime, movingInterpolation), movingTime); } } }
/** @return true if some actor with this listener attached is currently dragged. */ public boolean isDragged () { return mimic.getActor() != null; }
/** @param hidingAction will be attached to the mimic actor. */ protected void addMimicHidingAction (final Action hidingAction, final float delay) { mimic.addAction(Actions.sequence(hidingAction, Actions.removeActor())); mimic.getActor().addAction(Actions.delay(delay, Actions.visible(true))); }
@Override public void touchDragged (final InputEvent event, final float x, final float y, final int pointer) { if (isDragged()) { getStageCoordinates(event); mimic.setPosition(MIMIC_COORDINATES.x, MIMIC_COORDINATES.y); if (listener != null) { listener.onDrag(this, mimic.getActor(), STAGE_COORDINATES.x, STAGE_COORDINATES.y); } } }