예제 #1
0
    private void AddObject(int id)
    {
        if (selectedPos != -Vector2Int.one)
        {
            return;
        }

        BoardCell cell = board.GetBoardCell(cursorPos.x, cursorPos.y);

        //If the cursor is in an empty position
        if (cell != null && cell.GetState() != BoardCell.BoardCellState.OCUPPIED)
        {
            board.AddBoardObject(id, cursorPos.x, cursorPos.y);
        }
    }
예제 #2
0
    private void OnLeftUp()
    {
        if (modifiable && dragging && orbitCamera.IsReset())
        {
            dragging = false;
            if (cameraInput != null)
            {
                cameraInput.SetDragging(false);
            }

            Vector3 pos = board.GetLocalPosition(transform.position);
            pos = new Vector3(Mathf.Round(pos.x), Mathf.Round(pos.y), Mathf.Round(pos.z));

            string name = boardObject.GetName();
            TrackerAsset.Instance.setVar("element_type", name.ToLower());
            TrackerAsset.Instance.setVar("element_name", boardObject.GetNameWithIndex().ToLower());
            TrackerAsset.Instance.setVar("old_position", lastPos.ToString());
            TrackerAsset.Instance.setVar("rotation", boardObject.GetDirection().ToString().ToLower());

            if (boardObject != null && pos.x < board.GetColumns() && pos.x >= 0 && pos.z < board.GetRows() && pos.z >= 0)
            {
                Vector2Int newPos = new Vector2Int(Mathf.FloorToInt(pos.x), (Mathf.FloorToInt(pos.z)));
                TrackerAsset.Instance.setVar("new_position", newPos.ToString());

                //Si la posicion en la que se suelta es donde estaba colocado no se hace nada
                if (lastPos == newPos)
                {
                    transform.localPosition = new Vector3(lastPos.x, 0, lastPos.y);
                    TrackerAsset.Instance.setVar("action", "move");
                    TrackerAsset.Instance.setVar("exception", "placed_in_the_same_cell");
                    TrackerAsset.Instance.GameObject.Interacted(boardObject.GetID());
                    return;
                }
                //Si se suelta en una celda ocupada o en un agujero se elimina
                if (board.GetBoardCellType(newPos.x, newPos.y) == 1 || board.IsCellOccupied(newPos.x, newPos.y))
                {
                    //Se elimina el objeto en la posicion anterior
                    board.RemoveBoardObject(lastPos.x, lastPos.y);
                    Destroy(gameObject, 0.3f);
                    TrackerAsset.Instance.setVar("action", "remove");
                    TrackerAsset.Instance.setVar("exception", "placed_on_non_valid_cell");
                    TrackerAsset.Instance.GameObject.Interacted(boardObject.GetID());
                    return;
                }
                //Si el objeto no se ha añadido al tablero
                if (lastPos == -Vector2Int.one)
                {
                    board.AddBoardObject(newPos.x, newPos.y, boardObject);
                    TrackerAsset.Instance.setVar("first_time_placed", true);
                    if (argumentLoader != null)
                    {
                        argumentLoader.SetBoardObject(boardObject);
                    }
                }
                //Se mueve el objeto
                else if (!board.MoveBoardObject(lastPos, newPos))
                {
                    //Si no se ha podido mover se deja donde estaba
                    transform.localPosition = new Vector3(lastPos.x, 0, lastPos.y);

                    TrackerAsset.Instance.setVar("action", "move");
                    TrackerAsset.Instance.setVar("exception", "denied_by_board");
                    TrackerAsset.Instance.GameObject.Interacted(boardObject.GetID());
                    return;
                }
                lastPos = newPos;

                TrackerAsset.Instance.setVar("action", "move");
                TrackerAsset.Instance.GameObject.Interacted(boardObject.GetID());
            }
            else
            {
                board.RemoveBoardObject(lastPos.x, lastPos.y);
                Destroy(gameObject, 0.3f);

                TrackerAsset.Instance.setVar("action", "remove");
                TrackerAsset.Instance.GameObject.Interacted(boardObject.GetID());
            }
        }
    }