private Vector2?FindAttackDestination() { OnAttackStart?.Invoke(); _spriteRenderer.color = Color.yellow; var directionToPlayer = (_player.transform.position - transform.position).normalized; var projectedDestination = _player.transform.position + directionToPlayer * 10f; _attackDestination = BoundaryHelper.PointBeforeCollisionWithBoundaryWithBuffer(transform.position, projectedDestination, 2f); return(_attackDestination); }
/// <summary> /// Корутина анимации атаки /// </summary> /// <returns></returns> IEnumerator Attack(Collider weaponCollider) { isAttackCoRunning = true; // флажок запущенной корутины включен UpdateAnimationIndex(true); // установка индекса анимации по умолчанию while (isAttackInQueue) // проверка счётчика очереди атак { OnAttackStart?.Invoke(); // вызов события начала атаки animator.SetTrigger(attackAnimList[animationIndex]); // запуск анимации атаки isAttackInQueue = false; // сброс флажка очереди атак yield return(new WaitForSeconds(AttackFrequency)); // ожидание окончания анимации UpdateAnimationIndex(); // обновление индекса анимации OnAttackStop?.Invoke(); // вызов события конца атаки } isAttackCoRunning = false; // флажок запущенной корутины отключен }
public void AttackStart() { OnAttackStart?.Invoke(); }
/// <summary> /// Invoke an attack with the current equipped weapon /// </summary> /// <param name="weapon">Current weapon</param> public void InvokeAttackStart(Weapon weapon) => OnAttackStart?.Invoke(weapon);