示例#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
        private void UpdateTarget()
        {
            // if target is valid, do nothing
            if (target_ != null && BattlePlayer.ActivePlayers.Contains(target_))
            {
                StateMachine_.GizmoOutlet.SetSphere("AttackTarget", target_.transform.position, radius: 0.5f);
                return;
            }

            BattlePlayer closestEnemyPlayer = BattlePlayerUtil.GetClosestEnemyPlayerFor(StateMachine_.Player);

            target_ = closestEnemyPlayer;

            fuzzyTargetPosition_ = null;
        }
        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);
            }
        }
示例#4
0
 protected override void OnInitialized()
 {
     celebrateActionAccumulator_ = new ActionHintAccumulator(HintKey.CelebrateAction,
                                                             new EventRouter <BattlePlayer>(GameNotifications.OnBattlePlayerCelebrated)
                                                             .WithPredicate(battlePlayer => BattlePlayerUtil.IsHuman(battlePlayer)));
 }
        protected override void OnStateEntered()
        {
            predictedDashDistance_ = AIUtil.GetRandomPredictedDashDistance();

            target_ = BattlePlayerUtil.GetClosestEnemyPlayerFor(StateMachine_.Player);
        }
示例#6
0
 protected override void OnInitialized()
 {
     reflectActionAccumulator_ = new ActionHintAccumulator(HintKey.ReflectAction,
                                                           new EventRouter <Laser, BattlePlayer>(GameNotifications.OnBattlePlayerReflectLaser)
                                                           .WithPredicate((laser, battlePlayer) => BattlePlayerUtil.IsHuman(battlePlayer)));
 }