private void UpdateTarget() { if (Physics.Raycast(_camera.ScreenPointToRay(Input.mousePosition), out var hit, Mathf.Infinity, InteractableMask)) { // Selection GameObject target = hit.collider.gameObject; if (target.CompareTag("Activity")) { if (_isHovering) { if (_cachedHoveredGameObject != target) { SetHovering(target); } } else { SetHovering(target); } } else { SetHovering(null); } // Interaction (Movement && Activities) if (Input.GetMouseButtonDown(0) && CurrentState != State.Busy) { StopAllCoroutines(); if (hit.collider.CompareTag("Ground")) { StartCoroutine(MoveTo(hit.point, null, Vector3.zero)); } if (hit.collider.CompareTag("Activity")) { BaseActivity activity = hit.collider.gameObject.GetComponent <BaseActivity>(); if (activity == null) { return; } void DoActivity() => StartCoroutine(activity.Do(SetState)); StartCoroutine(MoveTo(activity.GetRigPosition(), DoActivity, activity.transform.position)); } } }