Пример #1
0
    // Update is called once per frame
    void Update()
    {
        if (!Application.isPlaying)
        {
            return;
        }

        if (keyState == KeyDownState.None)
        {
            if (Input.GetKeyDown(ActivateKey))
            {
                keyState = KeyDownState.ActivationKey;
                HandleKeyDown();
            }
            else if (Input.GetKeyDown(MarkKey))
            {
                keyState = KeyDownState.MarkKey;
                HandleKeyDown();
            }
            else
            {
                this.HandleFocusInput();
            }
        }
        else
        {
            if (activeRevelation != null)
            {
                // Can't accept clicks while we are given a revelation...
                if (!activeRevelation.IsFinished)
                {
                    return;
                }

                activeRevelation = null;
            }

            if (keyState == KeyDownState.ActivationKey && Input.GetKeyUp(ActivateKey) || keyState == KeyDownState.MarkKey && Input.GetKeyUp(MarkKey))
            {
                var ray = Camera.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out var hit, LayerMask))
                {
                    if (keyDownObject != null && keyDownObject == hit.collider.gameObject)
                    {
                        var field = keyDownObject.GetComponentInParent <FieldVisual>();
                        if (field != null)
                        {
                            if (keyState == KeyDownState.ActivationKey && field.BoardCell.State == CellState.Default)
                            {
                                activeRevelation = RevealCellsAnimated(field.BoardCell);
                            }
                            else if (keyState == KeyDownState.MarkKey)
                            {
                                Game.Instance.ToggleMarking(field.BoardCell);
                            }
                        }
                    }
                }

                HandleKeyUp();
            }

            if (keyState == KeyDownState.MarkKey)
            {
                var currentMousePos = Input.mousePosition;
                if ((keyDownPosition - currentMousePos).magnitude >= RotationTriggerMarginPixels)
                {
                    HandleKeyUp();
                }
            }
        }
    }
Пример #2
0
 private void HandleKeyUp()
 {
     keyState      = KeyDownState.None;
     keyDownObject = null;
     SetCameraMovementActive(true);
 }