Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Pathfinding;
- using SensorToolkit;
- public class AiController : MonoBehaviour
- {
- private enum AiState{
- Idle,
- Chasing,
- Searching,
- }
- private Character Character;
- [SerializeField]private Transform Player;
- [SerializeField]private AiState State;
- private Vector3 CurrentPos => Character.transform.position;
- [SerializeField]private RichAI Ai;
- [SerializeField]private StateText StateText;
- [SerializeField]private float distanceToNext;
- [SerializeField]private float distanceThreshold;
- [SerializeField]private float distanceToPlayer;
- [SerializeField]private float aggroRange;
- [SerializeField]private Transform lastSeenTransform;
- private Vector3 lastSeenPlayerPosition;
- private void Start(){
- Character = GetComponentInChildren<Character>();
- TransitionToState(State);
- }
- private void Update(){
- DistanceCheck();
- PostState();
- Character.HandleInputs(GetInputs());
- }
- private AICharacterInputs GetInputs(){
- AICharacterInputs inputs = new AICharacterInputs();
- inputs.GoalVector = GetNextPath();
- inputs.GoalVector.y= CurrentPos.y;
- inputs.LookVector = inputs.GoalVector - CurrentPos;
- inputs.LookVector.y = 0;
- return inputs;
- }
- private Vector3 GetNextPath(){
- switch (State){
- case AiState.Chasing:{
- lastSeenPlayerPosition = Player.transform.position;
- Ai.destination = Player.transform.position;
- Ai.SearchPath();
- return Ai.steeringTarget;
- }
- case AiState.Searching:{
- Ai.SearchPath();
- return Ai.steeringTarget;
- }
- }
- return Character.transform.position;
- }
- private void DistanceCheck(){
- distanceToNext = Vector3.Distance(Ai.destination,CurrentPos);
- distanceToPlayer = Vector3.Distance(Player.transform.position,CurrentPos);
- lastSeenTransform.position = lastSeenPlayerPosition;
- }
- private void PostState(){
- switch (State){
- case AiState.Searching:
- if(distanceToNext < distanceThreshold){
- TransitionToState(AiState.Idle);
- }
- break;
- }
- }
- public void PlayerSeen(){
- switch (State){
- case AiState.Searching:{
- TransitionToState(AiState.Chasing);
- break;
- }
- case AiState.Idle:{
- TransitionToState(AiState.Chasing);
- break;
- }
- }
- }
- public void PlayerLost(){
- lastSeenPlayerPosition = Player.transform.position;
- switch (State){
- case AiState.Chasing:{
- TransitionToState(AiState.Searching);
- break;
- }
- }
- }
- private void TransitionToState(AiState newState){
- State = newState;
- if(newState == AiState.Searching){
- Ai.destination = lastSeenPlayerPosition;
- Ai.SearchPath();
- }
- StateText.UpdateState(newState.ToString());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement