/// <summary> /// Called when animal enters behavior /// </summary> /// <param name="avalabilityToAnimals"></param> public void EnterBehavior(GameObject animal) { behaviorData.behaviorName = this.name; behaviorData.ForceExitCallback = RemoveBehavior; stepCompletedCallback = OnStepCompleted; animal.GetComponent <AnimalBehaviorManager>().activeBehavior = behaviorData; animalsToSteps.Add(animal, 0); ProceedToNext(animal); }
/// <summary> /// Assign necessary data to this script /// </summary> /// <param name="animal"></param> /// <param name="callBack"></param> /// <param name="collaboratingAnimals"></param> public void InitializePattern(GameObject animal, StepCompletedCallBack callBack, StepCompletedCallBack alternativeCallback) { AnimalData animalData = new AnimalData(); animalData.animal = animal.GetComponent <Animal>(); animalData.callback = callBack; animalData.alternativeCallback = alternativeCallback; AnimalsToAnimalData.Add(animal, animalData); EnterPattern(animal, animalData); }
/// <summary> /// Actions taken upon completion of pattern. All following are generally necessary when exit. It is recommended to call base when overridden. /// </summary> /// <param name="animal"></param> /// <param name="isCallingCallback">Set to false when force exiting without completion, leave as default</param> protected virtual void ExitPattern(GameObject animal, bool callCallback = true) { animal.GetComponent <AnimalBehaviorManager>().activeBehaviorPattern = null; StepCompletedCallBack callback = AnimalsToAnimalData[animal].callback; AnimalsToAnimalData.Remove(animal); if (callCallback) { callback.Invoke(animal); } }
/// <summary> /// Adds a pattern to this animal /// </summary> /// <param name="behaviorPattern"></param> /// <param name="stepCompletedCallBack"></param> /// <param name="collaboratingAnimals"></param> public void AddBehaviorPattern(BehaviorPattern behaviorPattern, StepCompletedCallBack stepCompletedCallBack, StepCompletedCallBack alternativeCallback) { activeBehaviorPattern = behaviorPattern; behaviorPattern.InitializePattern(this.gameObject, stepCompletedCallBack, alternativeCallback); }