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); } } }
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); } }
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); }
protected override void OnInitialized() { reflectActionAccumulator_ = new ActionHintAccumulator(HintKey.ReflectAction, new EventRouter <Laser, BattlePlayer>(GameNotifications.OnBattlePlayerReflectLaser) .WithPredicate((laser, battlePlayer) => BattlePlayerUtil.IsHuman(battlePlayer))); }