// 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(); } } } }
private void HandleKeyUp() { keyState = KeyDownState.None; keyDownObject = null; SetCameraMovementActive(true); }