Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class StateMachine : MonoBehaviour
- private IState currentlyRunningState;
- private IState PreviousState;
- public void ChangeState(IState newState)
- {
- if (currentlyRunningState != null)
- {
- currentlyRunningState.Exit();
- }
- PreviousState = currentlyRunningState;
- currentlyRunningState = newState;
- currentlyRunningState.Enter();
- }
- public void ExecuteStateUpdate()
- {
- var runningState = this.currentlyRunningState;
- if (runningState != null)
- {
- runningState.Execute();
- }
- }
- public void SwitchToPreviousState()
- {
- this.currentlyRunningState.Exit();
- this.currentlyRunningState = this.PreviousState;
- this.currentlyRunningState.Enter();
- }
- public interface IState
- void Enter();
- void Execute();
- void Exit();
- public class SearchFor : IState
- LayerMask SearchLayer;
- GameObject OwnerGameObject;
- private float SearchRadius;
- private string TagForSearch;
- private NavMeshAgent NavMeshAgentForSearch;
- public bool SearchComplated;
- private System.Action<SearchResult> SearchResultCallBack;
- public SearchFor(LayerMask searchlayer, GameObject owner, float searchradios, string tagforsearch, NavMeshAgent navmeshagent, System.Action<SearchResult>
- searchresultcallback)
- {
- SearchLayer = searchlayer;
- OwnerGameObject = owner;
- SearchRadius = searchradios;
- TagForSearch = tagforsearch;
- NavMeshAgentForSearch = navmeshagent;
- SearchResultCallBack = searchresultcallback;
- }
- public void Enter()
- {
- }
- public void Execute()
- {
- var HitObjects = Physics.OverlapSphere(OwnerGameObject.transform.position, SearchRadius);
- var AllObjectsWithRequaredTag = new List<Collider>();
- for (int i = 0; i < HitObjects.Length; i++)
- {
- if (HitObjects[i].CompareTag(TagForSearch))
- {
- this.NavMeshAgentForSearch.SetDestination(HitObjects[i].transform.position);
- AllObjectsWithRequaredTag.Add(HitObjects[i]);
- }
- }
- var SearchResult = new SearchResult(HitObjects, AllObjectsWithRequaredTag);
- SearchResultCallBack(SearchResult);
- }
- public void Exit()
- {
- }
- public List<Collider> AllHitObjectsInRequaredTag;
- public SearchResult(Collider[] allhitobjectsinseardrad, List<Collider> allhitobjectsinreqtag)
- {
- AllhitObjectInSearchRadius = allhitobjectsinseardrad;
- AllHitObjectsInRequaredTag = allhitobjectsinreqtag;
- }
- public class CubePlayer : MonoBehaviour
- private StateMachine stateMachine = new StateMachine();
- [SerializeField]
- private LayerMask foodItems;
- [SerializeField]
- private float ViewRadius;
- [SerializeField]
- private string FoodItemsTag;
- //private SearchFor searchForFood;
- private NavMeshAgent navMeshAgent;
- public bool SwithState = false;
- private void Start()
- {
- this.navMeshAgent = GetComponent<NavMeshAgent>();
- // Изменение стадии на поиск чего-либо
- stateMachine.ChangeState(new SearchFor(foodItems, this.gameObject, ViewRadius, tag, navMeshAgent, FoodFound));
- }
- private void Update()
- {
- // Выполняет стадию
- stateMachine.ExecuteStateUpdate();
- }
- public void FoodFound(SearchResult searchResult)
- {
- var FoundItemsFood = searchResult.AllHitObjectsInRequaredTag;
- }
- public void EatFood()
- {
- }
Add Comment
Please, Sign In to add comment