public static AIBehaviourSetting CopyBehaviour(this AIBehaviourSetting s) { return(new AIBehaviourSetting { Actor = s.Actor, additionalMode = s.additionalMode, basePriority = s.basePriority, behaviourType = s.behaviourType, curveMaxSample = s.curveMaxSample, curveMinSample = s.curveMinSample, executeCustomInput = s.executeCustomInput, priorityCurve = s.priorityCurve, targetFilterMode = s.targetFilterMode, targetFilterTags = s.targetFilterTags }); }
protected override void OnUpdate() { _targets.Clear(); Entities.With(_queryAI).ForEach((Entity entity, AbilityAIInput ai) => { if (_targets.Count == 0) { Entities.With(_queryTargets).ForEach((Entity e, Transform transform) => { _targets.Add(transform); }); } var bestPriority = float.MinValue; AIBehaviourSetting bestBehaviour = null; foreach (var behaviour in ai.behaviours) { var b = behaviour.BehaviourInstance; if (b == null) { Debug.LogError("[AI ABILITY] Could not find or create AI Behaviour instance!"); return; } var score = b.Evaluate(entity, behaviour, ai, _targets); if (score <= bestPriority) { continue; } bestPriority = score; bestBehaviour = behaviour; } ai.activeBehaviour = bestBehaviour; ai.activeBehaviourPriority = bestPriority; World.EntityManager.RemoveComponent <EvaluateAIData>(entity); World.EntityManager.AddComponent <SetupAIData>(entity); } ); }
public static bool FilterTag(this Transform t, AIBehaviourSetting behaviourSetting) { if (!behaviourSetting.BehaviourInstance.NeedTarget) { Debug.LogError("[FILTER BY TAG UTILITY] FilterTag called for Behaviour that doesn't need target!"); return(true); } var contains = behaviourSetting.targetFilterTags.Contains(t.tag); switch (behaviourSetting.targetFilterMode) { case TagFilterMode.IncludeOnly: return(contains); case TagFilterMode.Exclude: return(!contains); default: throw new ArgumentOutOfRangeException(); } }