/// <summary> /// Is called on mouse click. /// If right clicked, checks whether clicked on a damageable object or the ground. /// If clicked on a damageable object, attack it. If clicked on the ground, cancel attack /// and move to the clicked point. If clicked on a interactable object that is not a damageable object, interact with it. /// </summary> private void OnRightClick(InputAction.CallbackContext obj) { if (IsOverUI) { return; } Ray clickRay = _camera.ScreenPointToRay(Mouse.current.position.ReadValue()); if (Physics.Raycast(clickRay, out RaycastHit hit, 10000, clickableLayers)) { GameObject objectHit = hit.collider.gameObject; if (objectHit.TryGetComponent(out Damageable damageable)) { _interactLogic.RemoveFocus(); // implementation NOT capable of area damage _attackLogic.StartAttack(damageable, objectHit.GetComponent <EnemyController>()); } else if (objectHit.TryGetComponent(out Interactable interactable)) { _attackLogic.StopAttack(); //Set as focus _interactLogic.StartInteract(interactable); } // Get ground position from mouse click else if (Physics.Raycast(clickRay, out RaycastHit groundHit, 10000, groundLayer)) { // cancel possible ongoing attacks _attackLogic.StopAttack(); _interactLogic.RemoveFocus(); Move(groundHit); } } }
/// <summary> /// Starts attacking and chasing the target. /// </summary> /// <param name="target">The target to attack</param> private void StartChasing(Damageable target) { _isChasing = true; NavMeshAgent.speed = runningSpeed; _attackLogic.StartAttack(target); }