コード例 #1
0
    IEnumerator TweenInvalidBrick(Transform t)
    {
        Vector3 vel = Vector3.zero;

        _isTweening = true;

        while (!MathUtils.NearEqual(t.position, _originalPos))
        {
            t.position = Vector3.SmoothDamp(t.position, _originalPos, ref vel, 0.1f);
            yield return(0);
        }

        if (_newBrickCreated)
        {
            Destroy(t.gameObject);
            _dragCellData    = null;
            _newBrickCreated = false;
            selectedPart     = null;
            UpdateAvailableParts(selectedPart);
            UpdateAvailableColors(selectedPart);
        }
        else
        {
            t.position = _originalPos;
            t.parent   = constructionTarget;
            if (_dragCellData != null)
            {
                _dragCellData.Brick.position = _originalPos;
                _builder.construction.AddBrick(_dragCellData.Brick);
                _validPosition = true;
            }
        }
        _isTweening = false;
    }
コード例 #2
0
 void UnselectDragBrick()
 {
     if (draggingScenePart)
     {
         if (_validPosition)
         {
             if (_dragCellData != null)
             {
                 Vector3 position = draggingScenePart.transform.position;
                 //WEIRD HACK...I HAVE TO OFFSET BY HALF A BRICK TO GET THE CORRECT POSITION
                 position.z -= LXFMLHelper.kBrickSize.x / 2f;
                 _dragCellData.Brick.position = position;
                 _builder.construction.AddBrick(_dragCellData.Brick);
             }
             else
             {
                 CreateNewBrickData();
             }
             _modelUI.UpdateColorsList(LXFMLHelper.GetColors(draggingScenePart.designId), _builder.construction.GetBrick(draggingScenePart.id).materialId);
             _dragCellData = null;
             _bricks[draggingScenePart.id].transform.parent = constructionTarget;
             draggingScenePart = null;
             _newBrickCreated  = false;
         }
         else
         {
             StartCoroutine(TweenInvalidBrick(_bricks[draggingScenePart.id].transform));
             draggingScenePart = null;
             _bricks.Remove(-1);
         }
     }
 }
コード例 #3
0
 public void Unselect()
 {
     _modelUI.UpdateColorsList(new int[0], 0);
     _dragCellData     = null;
     selectedPart      = null;
     draggingScenePart = null;
     _newBrickCreated  = false;
 }
コード例 #4
0
    public void AddBrick(BrickData brick)
    {
        _bricks[brick.id]           = brick;
        _bricksCellsCache[brick.id] = new LXFMLCell[brick.design.width * brick.design.height];

        var brickOrigin = GetNormalizedBrickOrigin(brick);

        var normalizedOrigin = new Vector2(brickOrigin.x, brickOrigin.y);

        if (brick.isFlipped)
        {
            normalizedOrigin.x = normalizedOrigin.x - (brick.design.width - 1);
        }

        LXFMLCell     originCell = _grid.GetCellAt(brickOrigin);
        LXFMLCell     cell;
        LXFMLCellData cellData;

        int cellCount = 0;

        for (int y = 0; y < brick.design.height; ++y)
        {
            for (int x = 0; x < brick.design.width; ++x)
            {
                cellData = new LXFMLCellData();

                cell = _grid.GetCellAt(normalizedOrigin.x + x, normalizedOrigin.y + y);

                if (normalizedOrigin.x + x >= LXFMLHelper.kGridSize || normalizedOrigin.y + y >= LXFMLHelper.kGridSize)
                {
                    Debug.LogWarning("Invalid position");
                }

                _bricksCellsCache[brick.id][cellCount++] = cell;

                if (!cell.IsEmpty)
                {
                    //Debug.LogWarningFormat("Overriting cell at {0}.", cell.Coordinates);
                }

                cellData.Brick = brick;

                //TODO: Is it necessary?
                cellData.IsFull = true;

                cell.Data        = cellData;
                cell.BrickOrigin = originCell;
            }
        }

        SetConnectedBricks(brick, brickOrigin);

        originCell.Data.IsOrigin = true;

        CommitChange(ConstructionChangesetOperation.Addition, originCell.Data.Brick, originCell.Coordinates);

        _lastBrickId++;
    }
コード例 #5
0
 public void ReleaseDragPart()
 {
     if (draggingScenePart)
     {
         if (removeButton.IsOverButton)
         {
             DestroyPart();
             _dragCellData             = null;
             removeButton.IsOverButton = false;
         }
         else
         {
             UnselectDragBrick();
         }
     }
 }
コード例 #6
0
    public void CheckSelectedBrick()
    {
        if (!_isTweening)
        {
#if UNITY_EDITOR
            Vector2 mousePos = Input.mousePosition;
#else
            Vector2 mousePos = Input.touchCount > 0 ? Input.GetTouch(0).position : Vector2.zero;
#endif
            Vector2 gridPos = screenPointToGridPosition(mousePos);

            LXFMLCell cell = _builder.construction.Grid.GetCellAt(gridPos);
            if (cell != null && cell.Data != null)
            {
                selectedPart       = draggingScenePart = _bricks[cell.Data.Brick.id];
                _startDragPosition = selectedPart.transform.position;
                _startDragCell     = gridPos;
                UpdateAvailableParts(selectedPart);
                UpdateAvailableColors(selectedPart);

                _dragCellData = cell.Data;

                _originalPos = selectedPart.transform.position;

                Vector2 blockOrigin = _builder.construction.GetBrickCell(selectedPart.id).Coordinates;
                if (cell.Data.Brick.isFlipped)
                {
                    blockOrigin.x -= cell.Data.Brick.design.width - 1;
                }
                _cellOffset.x = gridPos.x - blockOrigin.x;
                _cellOffset.y = gridPos.y - blockOrigin.y;

                _builder.construction.RemoveBrick(cell.Data.Brick.id);
            }
            else
            {
                _modelUI.UpdateColorsList(new int[0], 0);
                selectedPart = null;
                UpdateAvailableParts(null);
                UpdateAvailableColors(null);
            }
        }
    }