Advertisement
Guest User

Untitled

a guest
Nov 28th, 2022
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Pathfinding;
  5. using SensorToolkit;
  6. public class AiController : MonoBehaviour
  7. {
  8. private enum AiState{
  9. Idle,
  10. Chasing,
  11. Searching,
  12. }
  13. private Character Character;
  14. [SerializeField]private Transform Player;
  15. [SerializeField]private AiState State;
  16. private Vector3 CurrentPos => Character.transform.position;
  17. [SerializeField]private RichAI Ai;
  18. [SerializeField]private StateText StateText;
  19. [SerializeField]private float distanceToNext;
  20. [SerializeField]private float distanceThreshold;
  21. [SerializeField]private float distanceToPlayer;
  22. [SerializeField]private float aggroRange;
  23. [SerializeField]private Transform lastSeenTransform;
  24. private Vector3 lastSeenPlayerPosition;
  25. private void Start(){
  26. Character = GetComponentInChildren<Character>();
  27. TransitionToState(State);
  28. }
  29. private void Update(){
  30. DistanceCheck();
  31. PostState();
  32. Character.HandleInputs(GetInputs());
  33. }
  34. private AICharacterInputs GetInputs(){
  35. AICharacterInputs inputs = new AICharacterInputs();
  36. inputs.GoalVector = GetNextPath();
  37. inputs.GoalVector.y= CurrentPos.y;
  38. inputs.LookVector = inputs.GoalVector - CurrentPos;
  39. inputs.LookVector.y = 0;
  40. return inputs;
  41. }
  42. private Vector3 GetNextPath(){
  43. switch (State){
  44. case AiState.Chasing:{
  45. lastSeenPlayerPosition = Player.transform.position;
  46. Ai.destination = Player.transform.position;
  47. Ai.SearchPath();
  48. return Ai.steeringTarget;
  49. }
  50. case AiState.Searching:{
  51. Ai.SearchPath();
  52. return Ai.steeringTarget;
  53. }
  54. }
  55. return Character.transform.position;
  56. }
  57. private void DistanceCheck(){
  58. distanceToNext = Vector3.Distance(Ai.destination,CurrentPos);
  59. distanceToPlayer = Vector3.Distance(Player.transform.position,CurrentPos);
  60. lastSeenTransform.position = lastSeenPlayerPosition;
  61. }
  62. private void PostState(){
  63. switch (State){
  64. case AiState.Searching:
  65. if(distanceToNext < distanceThreshold){
  66. TransitionToState(AiState.Idle);
  67. }
  68. break;
  69. }
  70. }
  71. public void PlayerSeen(){
  72. switch (State){
  73. case AiState.Searching:{
  74. TransitionToState(AiState.Chasing);
  75. break;
  76. }
  77. case AiState.Idle:{
  78. TransitionToState(AiState.Chasing);
  79. break;
  80. }
  81. }
  82. }
  83. public void PlayerLost(){
  84. lastSeenPlayerPosition = Player.transform.position;
  85. switch (State){
  86. case AiState.Chasing:{
  87. TransitionToState(AiState.Searching);
  88. break;
  89. }
  90. }
  91.  
  92. }
  93. private void TransitionToState(AiState newState){
  94. State = newState;
  95. if(newState == AiState.Searching){
  96. Ai.destination = lastSeenPlayerPosition;
  97. Ai.SearchPath();
  98. }
  99. StateText.UpdateState(newState.ToString());
  100. }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement