private AI_BehaviorBrain[] FindManagers(AI_BehaviorBrain brain, float range, int minimumFound) { List <AI_BehaviorBrain> returnedBrainList = new List <AI_BehaviorBrain>(); GameObject[] tempManagerList = GameObject.FindGameObjectsWithTag(Tags.manager); // Sort by distance Array.Sort(tempManagerList, delegate(GameObject g1, GameObject g2) { float dist1 = Vector3.Distance(g1.transform.position, brain.transform.position); float dist2 = Vector3.Distance(g2.transform.position, brain.transform.position); return((int)(100 * (dist1 - dist2))); }); // Remove unwanted Managers (outside of range and/or more than min) for (int i = 0; i < tempManagerList.Length; i++) { if (i < minimumFound || Vector3.Distance(tempManagerList[i].transform.position, brain.transform.position) <= range) { returnedBrainList.Add(tempManagerList[i].GetComponent <AI_BehaviorBrain>()); } else { break; } } return(returnedBrainList.ToArray()); }
/// <summary> /// Executes all the actions (and BeforeActions and AfterActions) then return the next State /// </summary> /// <param name="brain"> behavior brain </param> /// <returns></returns> public AI_State UpdateState(AI_BehaviorBrain brain) { BeforeActions(brain); DoActions(brain); AfterActions(brain); return(CheckTransitions(brain)); }
private void SetStates(AI_BehaviorBrain brain, AI_BehaviorBrain[] brainList, AI_State state) { foreach (AI_BehaviorBrain currbrain in brainList) { //Debug.Log(currbrain.gameObject.name+" from:"+ currbrain.currentState.ToString()+" to:"+state.ToString()); AI_State currBrainState = currbrain.currentState; if (currBrainState != state) { bool replace = true; foreach (AI_State curState in noReplacedState) { if (currBrainState == curState) { replace = false; break; } } if (replace) { currbrain.ChangeState(state); //currbrain.currentState = state; } } AI_GoToData goToData = currbrain.GetComponent <AI_GoToData>(); if (goToData != null) { if (goToData.destination != brain.transform.position) { goToData.destination = brain.transform.position; } goToData.stopDist = stopDist; } } }
public override bool Evaluate(AI_BehaviorBrain brain) { //\\ METHOD RAYCASTING //RaycastHit[] rayCastHits; //rayCastHits = Physics.SphereCastAll(brain.transform.position+ height*brain.transform.up, watchSphereRadius, brain.transform.forward, watchRange); ////Gizmos.DrawRay(brain.transform.position + height * brain.transform.up, brain.transform.forward); //foreach (RaycastHit rayCastHit in rayCastHits) //{ // if (gameObjectToWatchFor.tag.Equals(rayCastHit.transform.gameObject.tag)) // { // return true; // } //} //return false; //\\ METHOD SIGHT CONE //gameObjectToWatchFor = GameObject.FindGameObjectsWithTag(tag)[0]; //Vector3 gORelatPos = gameObjectToWatchFor.transform.position- brain.transform.position; //Debug.Log("gameObjectToWatchFor" + gameObjectToWatchFor.transform.position); //if (gORelatPos.magnitude < watchRange) //{ // Vector3 frwdVect = brain.transform.forward; // float angle = Vector3.Angle(frwdVect, gORelatPos); // if (angle < watchRadius) return true; //} //return false; //\\ METHODE SPRITE WITH COLLIDER return(false); }
private void CallManager(AI_BehaviorBrain brain) { managerBrainList = FindManagers(brain, range, minimumChanged); if (managerBrainList.Length > 0) { SetStates(brain, managerBrainList, newState); } }
public void EndStateForBrain(AI_BehaviorBrain brain) { for (int i = 0; i < brainAnimBoolList.Length; i++) { brain.brain_animator.SetBool(brainAnimBoolList[i], false); } for (int i = 0; i < transitionsList.Length; i++) { transitionsList[i].condition.EndStateForBrain(brain); } }
private AI_State CheckTransitions(AI_BehaviorBrain brain) { for (int i = 0; i < transitionsList.Length; i++) { TransitionListElement currTransListElmt = transitionsList[i]; if (currTransListElmt.condition.Evaluate(brain) && currTransListElmt.nextState != null) { return(currTransListElmt.nextState); } } return(null); }
// Use this for initialization void Awake() { navMeshAgent = gameObject.GetComponent <NavMeshAgent>(); brain = gameObject.GetComponent <AI_BehaviorBrain>(); animator = gameObject.GetComponent <Animator>(); if (brain.initialState.brainAnimBoolList != null && brain.initialState.brainAnimBoolList.Length > 0 && brain.initialState.brainAnimBoolList[0] == "isSitting") { navMeshAgent.enabled = false; } else if (!animator.GetBool("isSitting")) { navMeshAgent.enabled = true; } }
public override bool Evaluate(AI_BehaviorBrain brain) { //\\ METHOD RAYCASTING //RaycastHit[] rayCastHits; //rayCastHits = Physics.SphereCastAll(brain.transform.position+ height*brain.transform.up, watchSphereRadius, brain.transform.forward, watchRange); ////Gizmos.DrawRay(brain.transform.position + height * brain.transform.up, brain.transform.forward); //foreach (RaycastHit rayCastHit in rayCastHits) //{ // if (gameObjectToWatchFor.tag.Equals(rayCastHit.transform.gameObject.tag)) // { // return true; // } //} //return false; //\\ METHOD SIGHT CONE gameObjectToWatchFor = GameObject.FindGameObjectsWithTag(tag)[0]; SplinePlayerCharacterController spcc = gameObjectToWatchFor.GetComponent <SplinePlayerCharacterController>(); if ((!isNinjaOnly && !isSalarymanOnly) || (isNinjaOnly && spcc.currPlayerStatus[PlayerCharacterController.StatusListElement.NINJA]) || (isSalarymanOnly && !spcc.currPlayerStatus[PlayerCharacterController.StatusListElement.NINJA])) { if (!spcc.currPlayerStatus[statusHIDDEN]) { Vector3 gORelatPos = gameObjectToWatchFor.transform.position - brain.transform.position; //Debug.Log("gameObjectToWatchFor" + gameObjectToWatchFor.transform.position); if (gORelatPos.magnitude < watchRange) { Vector3 frwdVect = brain.transform.forward; float angle = Vector3.Angle(frwdVect, gORelatPos); //Debug.Log(brain.gameObject.name + "Player (angle: "+angle+" ) Found at " + brain.currentState.ToString()); if (angle < watchRadius) { if (setIsDetected && (spcc.dectectionCd < Time.timeSinceLevelLoad - spcc.lastDectectionTime)) { spcc.lastDectectionTime = Time.timeSinceLevelLoad; gameObjectToWatchFor.GetComponent <PlayerCharacterController>().ChangeStatus(PlayerCharacterController.StatusListElement.BLOCKED, true); gameObjectToWatchFor.GetComponent <PlayerCharacterController>().ChangeStatus(PlayerCharacterController.StatusListElement.DETECTED, true); } return(true); } } } } return(false); //\\ METHODE SPRITE WITH COLLIDER }
protected void ArrivedAtDestination(AI_BehaviorBrain brain) { NavMeshAgent agent = brain.navMeshAgent; AI_PatrolData patrolData = brain.GetComponent <AI_PatrolData>(); ptrSplineLine = patrolData.ptrSplineLine; if (agent != null && ptrSplineLine != null) { BeforeChangingDestination(brain); patrolData.currentPreviousSplinePoint = ptrSplineLine.GetNextControlPointIndex(patrolData.currentPreviousSplinePoint); AfterChangingDestination(brain); } }
public override void Act(AI_BehaviorBrain brain) { spcc = GameObject.FindGameObjectWithTag(Tags.player).GetComponent <SplinePlayerCharacterController>(); if (spcc.currPlayerStatus[PlayerCharacterController.StatusListElement.GAMEOVER] != true) { spcc.currPlayerStatus[PlayerCharacterController.StatusListElement.GAMEOVER] = true; spcc.currPlayerStatus[PlayerCharacterController.StatusListElement.ROOTED] = true; FadeInOutController.instance.FadeIn(() => { GameMasterManager.instance.Restart(brain); }, fadeInDuration, text); } //GameMasterManager.Instance.Restart(brain); }
public void InitializeStateForBrain(AI_BehaviorBrain brain) { if (isToStopOnEnter) { brain.navMeshAgent.isStopped = true; } if (brainAnimBoolList != null) { for (int i = 0; i < brainAnimBoolList.Length; i++) { brain.brain_animator.SetBool(brainAnimBoolList[i], true); } } for (int i = 0; i < transitionsList.Length; i++) { transitionsList[i].condition.InitializeStateForBrain(brain); } }
public override bool Evaluate(AI_BehaviorBrain brain) { if (brainList.ContainsKey(brain)) { float startTime = brainList[brain]; if (duration > Time.realtimeSinceStartup - startTime) { return(false); } else { return(true); } } else { return(false); } }
private void GoTo(AI_BehaviorBrain brain) { NavMeshAgent agent = brain.navMeshAgent; AI_GoToData goToData = brain.GetComponent <AI_GoToData>(); if (agent != null && goToData.destination != null) { agent.destination = goToData.destination; agent.stoppingDistance = goToData.stopDist; //if(Vector3.Distance(brain.transform.position, agent.destination)<= agent.stoppingDistance) //{ // agent.isStopped = true; //} //else //{ // agent.isStopped = false; //} } }
private void DoActions(AI_BehaviorBrain brain) { for (int i = 0; i < actionsList.Length; i++) { if (actionsList[i].condition.Evaluate(brain)) { Dictionaries.AudioName aN = actionsList[i].action.audioToPlay; if (aN != Dictionaries.AudioName.NONE) { int ID = Dictionaries.instance.dic_audioID[aN]; if (!SoundManager.GetAudio(ID).playing) { SoundManager.GetAudio(ID).Play(); } } actionsList[i].action.Act(brain); } BetweenActions(brain); } }
protected void Patrol(AI_BehaviorBrain brain) { NavMeshAgent agent = brain.navMeshAgent; AI_PatrolData patrolData = brain.GetComponent <AI_PatrolData>(); ptrSplineLine = patrolData.ptrSplineLine; if (agent != null && ptrSplineLine != null) { currentPreviousSplinePoint = patrolData.currentPreviousSplinePoint; agent.destination = ptrSplineLine.transform.TransformPoint(ptrSplineLine.GetNextControlPoint(currentPreviousSplinePoint)); agent.isStopped = false; agent.stoppingDistance = stopDist; if (agent.remainingDistance <= agent.stoppingDistance && !agent.pathPending) { //int pointCnt = ptrSplineLine.GetControlPointCount; //int nextPointIndex = ptrSplineLine.GetNextControlPointIndex(currentPreviousSplinePoint); ArrivedAtDestination(brain); } } }
public override void InitializeStateForBrain(AI_BehaviorBrain brain) { }
public override void EndStateForBrain(AI_BehaviorBrain brain) { brainList.Remove(brain); }
public override void InitializeStateForBrain(AI_BehaviorBrain brain) { brainList.Add(brain, Time.realtimeSinceStartup); }
public override void AfterActions(AI_BehaviorBrain brain) { }
public abstract void InitializeStateForBrain(AI_BehaviorBrain brain);
public override void BeforeActions(AI_BehaviorBrain brain) { }
protected override void AfterChangingDestination(AI_BehaviorBrain brain) { //Debug.Log("NEW AFTER"); }
public override void Act(AI_BehaviorBrain brain) { CallManager(brain); }
public abstract void EndStateForBrain(AI_BehaviorBrain brain);
public override void EndStateForBrain(AI_BehaviorBrain brain) { }
public override void BetweenActions(AI_BehaviorBrain brain) { }
public abstract bool Evaluate(AI_BehaviorBrain brain);
public override void Act(AI_BehaviorBrain brain) { }
public abstract void AfterActions(AI_BehaviorBrain brain);