public void moveElement() { dir = Utils.mousePos - initPos; newPos = new Vector2(Utils.mousePos.x - holdOffset.x - transform.position.x, Utils.mousePos.y - holdOffset.y - transform.position.y); if (Vector2.Distance(dir, Vector3.zero) < .3f) { if (Mathf.Abs(dir.x) > Mathf.Abs(dir.y)) { moveRestrict = MoveRestrict.HORIZONTAL; } else { moveRestrict = MoveRestrict.VERTICAL; } } else { if (moveRestrict == MoveRestrict.HORIZONTAL) { newPos.y = draggedElement.cellCenter.y; if (dir.x > CELL_STEP) { newPos.x = draggedElement.cellCenter.x + CELL_STEP; } else if (dir.x < -CELL_STEP) { newPos.x = draggedElement.cellCenter.x - CELL_STEP; } } else if (moveRestrict == MoveRestrict.VERTICAL) { newPos.x = draggedElement.cellCenter.x; if (dir.y > CELL_STEP) { newPos.y = draggedElement.cellCenter.y + CELL_STEP; } else if (dir.y < -CELL_STEP) { newPos.y = draggedElement.cellCenter.y - CELL_STEP; } } } if ((draggedElement.getColumn() == 0 && dir.x < 0) || (draggedElement.getColumn() == (COLUMNS - 1) && dir.x > 0)) { newPos.x = draggedElement.cellCenter.x; } if ((draggedElement.getRow() == 0 && dir.y > 0) || (draggedElement.getRow() == (ROWS - 1) && dir.y < 0)) { newPos.y = draggedElement.cellCenter.y; } draggedElement.transform.localPosition = newPos; Vector3 offset = draggedElement.transform.localPosition - draggedElement.cellCenter; if (changeElement == null) { if (offset.x > HALF_CELL_STEP + .1f) { changeElement = elements[draggedElement.getRow(), draggedElement.getColumn() + 1]; } else if (offset.x < -HALF_CELL_STEP - .1f) { changeElement = elements[draggedElement.getRow(), draggedElement.getColumn() - 1]; } else if (offset.y > HALF_CELL_STEP + .1f) { changeElement = elements[draggedElement.getRow() - 1, draggedElement.getColumn()]; } else if (offset.y < -HALF_CELL_STEP - .1f) { changeElement = elements[draggedElement.getRow() + 1, draggedElement.getColumn()]; } if (changeElement != null) { changeElement.target = draggedElement.cellCenter; changeElement.setGoToTarget(); } } else { bool moveBack = false; if (moveRestrict == MoveRestrict.HORIZONTAL && (offset.x < HALF_CELL_STEP - .1f) && (offset.x > -HALF_CELL_STEP + .1f)) { moveBack = true; } if (moveRestrict == MoveRestrict.VERTICAL && (offset.y < HALF_CELL_STEP - .1f) && (offset.y > -HALF_CELL_STEP + .1f)) { moveBack = true; } if (moveBack) { changeElement.target = changeElement.cellCenter; changeElement.setGoToTarget(); changeElement = null; } } }
public void moveelement () { dir = Util.mousePos - initPos; newPos = new Vector2(Util.mousePos.x - holdOffset.x - transform.position.x, Util.mousePos.y - holdOffset.y - transform.position.y); if (Vector2.Distance(dir, Vector3.zero) < .3f) { if (Mathf.Abs(dir.x) > Mathf.Abs(dir.y)) { moveRestrict = MoveRestrict.HORIZONTAL; } else { moveRestrict = MoveRestrict.VERTICAL; } } else { if (moveRestrict == MoveRestrict.HORIZONTAL) { newPos.y = draggedElement.getCellCenter().y; if (dir.x > CELL_STEP) { newPos.x = draggedElement.getCellCenter().x + CELL_STEP; } else if (dir.x < -CELL_STEP) { newPos.x = draggedElement.getCellCenter().x - CELL_STEP; } } else if (moveRestrict == MoveRestrict.VERTICAL) { newPos.x = draggedElement.getCellCenter().x; if (dir.y > CELL_STEP) { newPos.y = draggedElement.getCellCenter().y + CELL_STEP; } else if (dir.y < -CELL_STEP) { newPos.y = draggedElement.getCellCenter().y - CELL_STEP; } } } if ((draggedElement.getColumn() == 0 && dir.x < 0) || (draggedElement.getColumn() == (COLUMNS - 1) && dir.x > 0)) { newPos.x = draggedElement.getCellCenter().x; } if ((draggedElement.getRow() == 0 && dir.y > 0) || (draggedElement.getRow() == (ROWS - 1) && dir.y < 0)) { newPos.y = draggedElement.getCellCenter().y; } draggedElement.transform.localPosition = newPos; Vector3 offset = draggedElement.transform.localPosition - draggedElement.getCellCenter(); if (changeElement == null) { if (offset.x > HALF_CELL_STEP + .1f) { changeElement = elements[draggedElement.getRow(), draggedElement.getColumn() + 1]; } else if (offset.x < -HALF_CELL_STEP - .1f) { changeElement = elements[draggedElement.getRow(), draggedElement.getColumn() - 1]; } else if (offset.y > HALF_CELL_STEP + .1f) { changeElement = elements[draggedElement.getRow() - 1, draggedElement.getColumn()]; } else if (offset.y < -HALF_CELL_STEP - .1f) { changeElement = elements[draggedElement.getRow() + 1, draggedElement.getColumn()]; } if (changeElement != null) { changeElement.setTarget(draggedElement.getCellCenter()); changeElement.setGoToTarget(); } } else { bool moveBack = false; if (moveRestrict == MoveRestrict.HORIZONTAL && (offset.x < HALF_CELL_STEP - .1f) && (offset.x > -HALF_CELL_STEP + .1f)) { moveBack = true; } if (moveRestrict == MoveRestrict.VERTICAL && (offset.y < HALF_CELL_STEP - .1f) && (offset.y > -HALF_CELL_STEP + .1f)) { moveBack = true; } if (moveBack) { changeElement.setTarget(changeElement.getCellCenter()); changeElement.setGoToTarget(); changeElement = null; } } }