Exemplo n.º 1
0
    void Update()
    {
        // if currently over another panel
        // don't do anything
        if (MouseOverUIElement.MouseOverElement)
        {
            //_spriteRenderer.enabled = false;
            return;
        }

        // if spriteRenderer has been disabled
        // due to mouse over panel, re-enable
        // if(!_spriteRenderer.enabled)
        //     _spriteRenderer.enabled = true;


        // setup example thing on _current from
        // selected type on game
        if (!CurrentType.HasValue && _currentToBuild != null)
        {
            _currentToBuild = null;
        }
        else if (CurrentType.HasValue && (_currentToBuild == null || _currentToBuild.TypeOfThing != CurrentType.Value))
        {
            _currentToBuild = Assets.GetThingConfig(CurrentType.Value);
        }

        // update cursor position to mouse position
        var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        var position      = new Vector3(
            Mathf.RoundToInt(mousePosition.x),
            Mathf.RoundToInt(mousePosition.y)
            );

        if (_currentToBuild != null)
        {
            _fixCursorPosition = false;
        }

        // if cursor has moved to a different grid position
        if (_cursorPosition != position && !_fixCursorPosition)
        {
            _cursorPosition = position;
            _crosshairCursor.transform.position = position;

            var posVec2 = position.ToVector2IntFloor();

            if (OnCursorMoved != null)
            {
                OnCursorMoved(posVec2);
            }

            if (_game.IsThingOnFloor(posVec2))
            {
                _mouseOverThing = _game.GetThingOnFloor(posVec2);
                if (_actionPanel != null)
                {
                    _actionPanel.Setup(_mouseOverThing);
                }
            }
        }

        // disable cursor mesh if no current selected
        // thing being constructed
        _cursorMeshObj.SetActive(_currentToBuild != null);


        // check for dragging
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            _mouseDown = true;
            _down      = _crosshairCursor.transform.position;
            MouseDown();
        }

        // update move position
        // check if current tile is rule based so we can setup
        // the correct max/min
        if (_mouseDown)
        {
            _move = _crosshairCursor.transform.position;

            if (_currentToBuild != null && _currentToBuild.Pipe)
            {
                if (_max.x - _min.x > _max.y - _min.y)
                {
                    _move.y = _down.y;
                }
                else
                {
                    _move.x = _down.x;
                }
            }

            // move mouse callback for drawing previews etc.
        }
        else
        {
            _down = _crosshairCursor.transform.position;
            _move = _down;
        }

        MouseMove();

        // if player has finished interaction
        // call mouse up event
        if (Input.GetKeyUp(KeyCode.Mouse0))
        {
            _mouseDown = false;
            MouseUp();
        }

        // if right click cancel current
        // tile
        if (Input.GetKeyDown(KeyCode.Mouse1))
        {
            CurrentType        = null;
            _fixCursorPosition = false;
            _actionPanel.Clear();
        }
    }