Пример #1
0
        private IEnumerator CheckDashAttack()
        {
            while (true)
            {
                yield return(new WaitForSeconds(GetRandomCheckAttackDelay()));

                if (!ShouldCheckDashAttack(StateMachine_.Player))
                {
                    continue;
                }

                BattlePlayer target = BattlePlayerUtil.GetClosestEnemyPlayerFor(StateMachine_.Player, whereCondition: (otherPlayer) => {
                    return(!AIUtil.DoesWallExistBetweenXZPoints(StateMachine_.Player.transform.position, otherPlayer.transform.position));
                });
                if (target == null)
                {
                    continue;
                }

                Vector2 playerToTargetVector = BattlePlayerUtil.XZVectorFromTo(StateMachine_.Player, target);

                if (playerToTargetVector.magnitude <= kDashAggroDistance)
                {
                    StateMachine_.SwitchState(AIStateMachine.State.DashAttack);
                }
            }
        }
Пример #2
0
        protected override void OnStateUpdated()
        {
            if (target_ == null || !BattlePlayer.ActivePlayers.Contains(target_))
            {
                StateMachine_.SwitchState(AIStateMachine.State.Idle);
                return;
            }

            Vector2 playerToTargetVector = BattlePlayerUtil.XZVectorFromTo(StateMachine_.Player, target_);

            Vector2 targetDirection = playerToTargetVector.normalized;

            if (playerToTargetVector.magnitude <= predictedDashDistance_)
            {
                StateMachine_.Dash(targetDirection);
            }
            else
            {
                StateMachine_.InputState.LerpMovementVectorTowards(targetDirection);
            }
        }