/// <summary> /// Update behavoir on current mode /// </summary> private void UpdateDataCubeBehavoir() { List <IBehavor> behavors = GetBehavoirs(m_DataCubeBehavoirs[DataCubeStatus]); ObjectAvoidance objectAvoidance = null; Arrive arrive = null; if (m_ObjectAvoidanceActive) { objectAvoidance = new ObjectAvoidance(m_Radius, LayerMask); objectAvoidance.Label = BehaviorEnum.ObjectAvoid.ToString(); behavors.Add(objectAvoidance); } if (m_ArriveActive) { if (m_Target != null) { arrive = new Arrive(m_Target.transform); arrive.Label = "Arrive"; behavors.Add(arrive); } } if (behavors.Count > 0) { m_Steering.SetBehaviors(objectAvoidance, arrive, behavors, behavors[0].Label); } else { m_Steering.SetBehaviors(objectAvoidance, arrive, behavors, "No Behavoir"); } }
/// <summary> /// Change the behavoir manual /// </summary> /// <param name="behaviorEnum"></param> private void SetQuickBehavoir(BehaviorEnum behaviorEnum) { List <IBehavor> behavors = GetBehavoirs(behaviorEnum); ObjectAvoidance objectAvoidance = null; Arrive arrive = null; if (m_ObjectAvoidanceActive) { objectAvoidance = new ObjectAvoidance(m_Radius, LayerMask); objectAvoidance.Label = BehaviorEnum.ObjectAvoid.ToString(); behavors.Add(objectAvoidance); } if (m_ArriveActive) { arrive = new Arrive(m_Target.transform); arrive.Label = "Arrive"; behavors.Add(arrive); } m_Steering.SetBehaviors(objectAvoidance, arrive, behavors, behavors[0].Label); }
public void SetBehaviors(ObjectAvoidance objectAvoidance, Arrive arrive, BehavorList behavorList, string label = "") { m_Label = label; m_BehavorList = behavorList; m_ObjectAvoidance = objectAvoidance; m_Arrive = arrive; foreach (IBehavor behavor in m_BehavorList) { behavor.Start(new BehavorContext(m_Position, m_Velocity, m_Settings)); if (m_Arrive != null && m_ObjectAvoidance != null) { if (behavor.Label != m_Arrive.Label && behavor.Label != m_ObjectAvoidance.Label) { behavor.SetPriorty(1); } } else { behavor.SetPriorty(1); } } }
private void Start() { if (m_Behavior == BehaviorEnum.Keyboard || m_Behavior == BehaviorEnum.SeekClickPoint) { m_Target = null; } else { if (m_Target == null) { m_Target = GameObject.Find("Player"); } if (m_Target == null) { m_Target = GameObject.Find("Target"); } } m_Steering = GetComponent <Steering>(); List <IBehavor> behavors = new List <IBehavor>(); string label = m_Behavior.ToString(); switch (m_Behavior) { case BehaviorEnum.Keyboard: behavors.Add(new KeyBoard()); break; case BehaviorEnum.SeekClickPoint: behavors.Add(new ClickSeekPoint()); break; case BehaviorEnum.Seek: behavors.Add(new Seek(m_Target.transform)); break; case BehaviorEnum.Flee: behavors.Add(new Flee(m_Target.transform)); break; case BehaviorEnum.FollowPath: behavors.Add(new FollowPath(m_WaitPoints)); break; case BehaviorEnum.Pursue: behavors.Add(new Persue(m_Target.transform)); break; case BehaviorEnum.Evade: behavors.Add(new Evade(m_Target.transform)); break; case BehaviorEnum.Wander: behavors.Add(new Wander()); break; case BehaviorEnum.Hide: behavors.Add(new Hide(m_Target.transform)); break; default: Debug.LogError($"Behavior of Type{m_Behavior} not implemented yet!"); break; } ObjectAvoidance objectAvoidance = null; Arrive arrive = null; if (m_ObjectAvoidanceActive) { objectAvoidance = new ObjectAvoidance(m_Radius, LayerMask); objectAvoidance.Label = BehaviorEnum.ObjectAvoid.ToString(); behavors.Add(objectAvoidance); } if (m_ArriveActive) { arrive = new Arrive(m_Target.transform); arrive.Label = "Arrive"; behavors.Add(arrive); } behavors[0].Label = label; m_Steering.SetBehaviors(objectAvoidance, arrive, behavors, label); }
public void ObjectInitialise(ObjectAvoidance objectAvoidance) => _avoidance = objectAvoidance;
private void Awake() { MessageBroker.Instance.RegisterMessageOfType <ObjectRequestMessage>(OnObjectAvoidanceRequestMessage); _avoidanceInstance = new ObjectAvoidance(); }