public void mouseUp(int x, int y) { if (gameInputLock || thread.getState() == GameState.PAUSED) { return; } switch (inputState) { case InputState.RELEASED_NO_SELECTION: { break; } case InputState.SELECTING_ELEMENTS: { selToX = x / gameViewController.getCellWidth(); selToY = y / gameViewController.getCellHeight(); if (selToX < 0) { selToX = 0; } if (selToX >= elementsX) { --selToX; } if (selToY < 0) { selToY = 0; } if (selToY >= elementsY) { --selToY; } gameViewController.continueSelection(selToX, selToY); fixSelection(); if (selFromX - selToX == 0 && selFromY - selToY == 0) { if (lastSelOneItem) { lastSelOneItem = false; if (lastSelX != selFromX || lastSelY != selFromY) { inputState = InputState.ANIMATION; gameInputLock = true; gameViewController.stopSelection(); gameViewController.startMoveTwoPiecesAnimation(lastSelX, lastSelY, this); break; } } else { lastSelOneItem = true; lastSelX = selFromX; lastSelY = selFromY; } } inputState = InputState.RELEASED_SELECTED; break; } case InputState.RELEASED_SELECTED: { break; } case InputState.MOVING_ELEMENTS: { inputState = InputState.ANIMATION; gameInputLock = true; gameViewController.stopSelection(); gameViewController.startMoveAnimation(this); break; } case InputState.ANIMATION: { break; } } }