protected override void Awake() { base.Awake(); OnDeath += onDeath; navAgent = GetComponent <NavMeshAgent>(); stackOfStates = GetComponent <StackFSM>(); if (PotentialStates.Length > 0) { State patrol = PotentialStates.FirstOrDefault(x => x.StateName == StateNames.PatrolState); State idle = PotentialStates.FirstOrDefault(x => x.StateName == StateNames.IdleState); if (patrol) { stackOfStates.PushState(patrol); } else if (idle) { stackOfStates.PushState(idle); } } GetPlayer(); //TODO when speed changes also set the navAgentSpeed navAgent.speed = Speed; }
public override void OnUpdate(ref StackFSM stackStates) { if (stackStates.aiBase.LineSightToPlayer()) { State follow = stackStates.aiBase.PotentialStates.FirstOrDefault(x => x.StateName == StateNames.FollowState); if (follow) { stackStates.PushState(follow); } } }
protected override void Update() { base.Update(); if (PotentialStates.Length > 0 && stackOfStates.GetCurrentState() == null) { State idle = PotentialStates.FirstOrDefault(x => x.StateName == StateNames.IdleState); if (idle) { stackOfStates.PushState(idle); } } //audio queue if (!CharacterAudio) { return; } var AiStateAudio = Audio.FirstOrDefault(x => x.StateName == stackOfStates.GetCurrentState().StateName); if (AiStateAudio.Clips != null && AiStateAudio.Clips.Length > 0) { if (nextAudioQueueTime <= 0.0f) { nextAudioQueueTime = Random.Range(AiStateAudio.MinQueueTime, AiStateAudio.MaxQueueTime); } if (audioQueueTimer >= nextAudioQueueTime && !CharacterAudio.isPlaying) { //pick random audio clip int audioClipIndex = Random.Range(0, AiStateAudio.Clips.Length); CharacterAudio.clip = AiStateAudio.Clips[audioClipIndex]; CharacterAudio.Play(); nextAudioQueueTime = 0.0f; audioQueueTimer = 0.0f; } audioQueueTimer += Time.deltaTime; } }