public float EvaluateBehaviour(UrbBehaviour Input) { Assert.IsNotNull(Input); float Evaluation = Input.BehaviourEvaluation; if (Evaluation <= 0) { return(0); } if ((Input.UrgeSatisfied & UrbUrgeCategory.Breed) > 0) { Evaluation *= BreedUrge; } if ((Input.UrgeSatisfied & UrbUrgeCategory.Hunger) > 0) { Evaluation *= HungerUrge; } if ((Input.UrgeSatisfied & UrbUrgeCategory.Rest) > 0) { Evaluation *= RestUrge; } if ((Input.UrgeSatisfied & UrbUrgeCategory.Safety) > 0) { Evaluation *= SafetyUrge; } else { Evaluation *= 1 - SafetyUrge; } return(Evaluation); }
public virtual void AddDeathBehaviour(UrbBehaviour Behaviour) { if (DeathBehaviours == null) { DeathBehaviours = new[] { Behaviour }; return; } UrbBehaviour[] newBehaviours = new UrbBehaviour[DeathBehaviours.Length + 1]; DeathBehaviours.CopyTo(newBehaviours, 1); newBehaviours[0] = Behaviour; }
public virtual void RemoveDeathBehaviour(UrbBehaviour Behaviour) { if (DeathBehaviours == null || DeathBehaviours.Length == 0) { return; } List <UrbBehaviour> TempList = new List <UrbBehaviour>(DeathBehaviours); if (TempList.Contains(Behaviour)) { TempList.Remove(Behaviour); DeathBehaviours = TempList.ToArray(); } }
public void ChooseBehaviour() { s_ChooseBehaviour_p.Begin(this); if (!perceptionExists || mPerception.ContactBehaviours == null) { s_ChooseBehaviour_p.End(); return; } bool behaviorChosen = false; UrbBehaviour ChosenBehaviour = null; float BestEvaluation = 0; UrbBehaviour currentBehaviour = null; for (int i = 0; i < mPerception.ContactBehaviours.Length; i++) { currentBehaviour = mPerception.ContactBehaviours[i]; Assert.IsNotNull(currentBehaviour); float Evaluation = EvaluateBehaviour(currentBehaviour); if (BestEvaluation < Evaluation) { behaviorChosen = true; ChosenBehaviour = currentBehaviour; BestEvaluation = Evaluation; } } if (!behaviorChosen || ChosenBehaviour.WasDestroyed) { if (mMovement && mMovement.Movement == null) { mMovement.ExecuteMove(); } } else { LastTimeSuccessful = Time.time; ChosenBehaviour.ExecuteTileBehaviour(); } s_ChooseBehaviour_p.End(); }