Exemplo n.º 1
0
    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;
            }
        }
    }
Exemplo n.º 2
0
	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;
			}
		}
	}