/// <summary>
        /// Selects the action for execution.
        /// </summary>
        /// <returns>The select.</returns>
        /// <param name="context">Context.</param>
        public IAction Select(IAIContext context)
        {
            List <IQualifier> qualifiers       = rootSelector.qualifiers;
            IDefaultQualifier defaultQualifier = rootSelector.defaultQualifier;
            IQualifier        winner           = rootSelector.Select(context, qualifiers, defaultQualifier);

            CompositeQualifier cq = winner as CompositeQualifier;
            // TODO:  What if there are no scoreres?
            //float score = cq.Score(context, cq.scorers);
            IAction action = winner.action;

            return(action);
        }
        public virtual void CloneFrom(object other)
        {
            Selector selector = other as Selector;

            if (selector == null)
            {
                return;
            }
            for (int i = 0; i < selector.qualifiers.Count; i++)
            {
                this._qualifiers.Add(selector.qualifiers[i]);
            }
            this._id = selector.id;
            this._defaultQualifier = selector._defaultQualifier;
        }
Exemple #3
0
        /// <summary>
        /// Clones or transfers settings from the other entity to itself.
        /// </summary>
        /// <param name="other">The other entity.</param>
        public virtual void CloneFrom(object other)
        {
            var source = other as Selector;

            if (source == null)
            {
                return;
            }

            foreach (var q in source.qualifiers)
            {
                _qualifiers.Add(q);
            }

            _id = source.id;
            _defaultQualifier = source._defaultQualifier;
        }
Exemple #4
0
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            int        count     = qualifiers.Count;
            float      single    = defaultQualifier.score;
            IQualifier qualifier = null;

            for (int i = 0; i < count; i++)
            {
                IQualifier item = qualifiers[i];
                if (!item.isDisabled)
                {
                    float single1 = item.Score(context);
                    if (single1 > single)
                    {
                        single    = single1;
                        qualifier = item;
                    }
                }
            }
            if (qualifier == null)
            {
                return(defaultQualifier);
            }
            return(qualifier);
        }
Exemple #5
0
        public override IQualifier Select(IAIContext context, List <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)  //  Need default qualifier.  Final return value should be default Qualifier.
        {
            List <IQualifier> qList = new List <IQualifier>(qualifiers);

            if (qList.Count == 0)
            {
                return(defaultQualifier as IQualifier);
            }

            //  Get score for all qualifiers
            for (int index = 0; index < qList.Count; index++)
            {
                CompositeQualifier q = qList[index] as CompositeQualifier;
                var score            = q.Score(context, q.scorers);
            }

            //  Sort list of qualifiers.
            qList.Sort();    //  Sorts in accending order.
            qList.Reverse(); //  Sorts in decending order.
            var best = qList[0];



            //DebugSelectorWinner(context, qList);
            return(best);
        }
Exemple #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="T:UtilityAI.Selector"/> class.
 /// </summary>
 protected Selector()
 {
     //Debug.Log(string.Format("Selector:  {0} : Abstract Constructor Message", this.GetType().Name));
     defaultQualifier = new DefaultQualifier();
     RegenerateId();
 }
Exemple #7
0
 /// <summary>
 ///   This function selects the best score from a list of qualifiers.
 /// </summary>
 public abstract IQualifier Select(IAIContext context, List <IQualifier> qualifiers, IDefaultQualifier defaultQualifier);
        /// <summary>
        /// For Debugging
        /// </summary>
        public Dictionary <IQualifier, float> GetSelectorResults(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifer)
        {
            if (selectorResults == null)
            {
                selectorResults = new Dictionary <IQualifier, float>();
            }
            else
            {
                selectorResults.Clear();
            }

            for (int index = 0; index < qualifiers.Count; index++)
            {
                CompositeQualifier qualifier = qualifiers[index] as CompositeQualifier;
                var score = qualifier.Score(context, qualifier.scorers);
                selectorResults.Add(qualifier, score);
            }


            var dq = defaultQualifer as IQualifier;

            selectorResults.Add(dq, defaultQualifer.Score(context));

            return(selectorResults);
        }
Exemple #9
0
        /// <summary>
        /// Selects the action for execution, given the specified context.
        /// This selector choses the first <see cref="IQualifier"/> to score above the <see cref="Selector.defaultQualifier"/>.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="qualifiers">The qualifiers from which to find the action.</param>
        /// <param name="defaultQualifier">The default qualifier.</param>
        /// <returns>
        /// The qualifier whose action should be chosen.
        /// </returns>
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            var count     = qualifiers.Count;
            var threshold = defaultQualifier.score;

            for (int i = 0; i < count; i++)
            {
                var qualifier = qualifiers[i];
                if (qualifier.isDisabled)
                {
                    continue;
                }

                var score = qualifier.Score(context);
                if (score > threshold)
                {
                    return(qualifier);
                }
            }

            return(defaultQualifier);
        }
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            int num;

            if (!this._UpdateTaskQualifiers())
            {
                return(defaultQualifier);
            }
            for (int i = 0; i < this._tasks.Count; i++)
            {
                this._tasks[i].Reset();
            }
            IQualifier  qualifier  = defaultQualifier;
            IHTNContext worldState = context as IHTNContext;
            bool        flag       = false;

            this._plan.Clear();
            if (worldState != null)
            {
                int decompositionScore = worldState.DecompositionScore;
                this.DecompositionScore = 0;
                worldState.PlanResult   = PlanResultType.NoPlan;
                for (int j = 0; j < (int)worldState.WorldStateChanges.Length; j++)
                {
                    if (worldState.WorldStateChanges[j].Count > 0)
                    {
                        worldState.WorldStateChanges[j].Clear();
                    }
                }
                int num1 = 0;
                worldState.StartDomainDecomposition();
                for (int k = 0; k < this._tasks.Count; k++)
                {
                    TaskQualifier item = this._tasks[k];
                    if (!item.isDisabled)
                    {
                        int num2 = num1;
                        if (num1 >= decompositionScore)
                        {
                            worldState.PlanResult = PlanResultType.KeepCurrentPlan;
                            break;
                        }
                        else if (item.Decompose(this, null, worldState, ref this._plan, ref num2, decompositionScore, out num) <= 0f)
                        {
                            num = 0;
                            item.GetFullDecompositionCost(ref num);
                            num1 += num;
                            num1++;
                        }
                        else
                        {
                            num1 += num;
                            if (worldState.PlanState != PlanStateType.Running || num1 < decompositionScore)
                            {
                                flag = true;
                                worldState.DecompositionScore = num1;
                                for (int l = 0; l < qualifiers.Count; l++)
                                {
                                    IQualifier item1 = qualifiers[l];
                                    if (item1.Score(context) > 0f)
                                    {
                                        IConnectorAction connectorAction = item1.action as IConnectorAction;
                                        if (connectorAction != null)
                                        {
                                            connectorAction.Select(context);
                                        }
                                        else
                                        {
                                        }
                                        qualifier = item1;
                                    }
                                }
                                break;
                            }
                            else
                            {
                                worldState.PlanResult = PlanResultType.KeepCurrentPlan;
                                break;
                            }
                        }
                    }
                }
            }
            if (flag)
            {
                if (worldState != null)
                {
                    worldState.HtnPlan.Clear();
                    for (int m = this._plan.Count - 1; m >= 0; m--)
                    {
                        this._plan[m].State = PrimitiveTaskStateType.NotStarted;
                        worldState.HtnPlan.Push(this._plan[m]);
                    }
                    if (Application.isEditor)
                    {
                        worldState.DebugPlan.Clear();
                        for (int n = 0; n < this._plan.Count; n++)
                        {
                            PrimitiveTaskSelector primitiveTaskSelector = this._plan[n];
                            worldState.DebugPlan.Add(primitiveTaskSelector);
                        }
                    }
                    if (worldState.PlanState != PlanStateType.Running)
                    {
                        worldState.PlanResult = PlanResultType.FoundNewPlan;
                    }
                    else
                    {
                        worldState.PlanResult = PlanResultType.ReplacedPlan;
                    }
                    worldState.PlanState = PlanStateType.Running;
                    foreach (KeyValuePair <Guid, Stack <IEffect> > appliedExpectedEffect in worldState.AppliedExpectedEffects)
                    {
                        Stack <IEffect> value = appliedExpectedEffect.Value;
                        value.Clear();
                        Pool.Free <Stack <IEffect> >(ref value);
                    }
                    worldState.AppliedExpectedEffects.Clear();
                    foreach (KeyValuePair <Guid, Stack <IEffect> > appliedEffect in worldState.AppliedEffects)
                    {
                        Stack <IEffect> effects = appliedEffect.Value;
                        effects.Clear();
                        Pool.Free <Stack <IEffect> >(ref effects);
                    }
                    worldState.AppliedEffects.Clear();
                    for (int o = 0; o < (int)worldState.WorldStateChanges.Length; o++)
                    {
                        Stack <WorldStateInfo> worldStateChanges = worldState.WorldStateChanges[o];
                        while (worldStateChanges.Count > 0 && worldStateChanges.Peek().Temporary)
                        {
                            worldStateChanges.Pop();
                        }
                        if (worldStateChanges.Count > 0)
                        {
                            WorldStateInfo worldStateInfo = worldStateChanges.Peek();
                            worldState.PreviousWorldState[o] = worldState.WorldState[o];
                            worldState.WorldState[o]         = worldStateInfo.Value;
                        }
                    }
                }
            }
            else if (worldState != null)
            {
                if (worldState.PlanState != PlanStateType.Running)
                {
                    worldState.PlanResult = PlanResultType.NoPlan;
                }
                else
                {
                    worldState.PlanResult = PlanResultType.KeepCurrentPlan;
                }
            }
            return(qualifier);
        }
        /// <summary>
        /// Selects the action for execution, given the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="qualifiers">The qualifiers from which to find the action.</param>
        /// <param name="defaultQualifier">The default qualifier.</param>
        /// <returns>
        /// The qualifier whose action should be chosen.
        /// </returns>
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            this.lastSelectedQualifier = _selector.Select(context, qualifiers, defaultQualifier);
            var qv = (IQualifierVisualizer)this.lastSelectedQualifier;

            if (qv.isBreakPoint)
            {
                if (qv.breakpointCondition != null)
                {
                    qv.breakPointHit = qv.breakpointCondition.Evaluate(qv.lastScore);
                }
                else
                {
                    qv.breakPointHit = true;
                }
            }

            return(this.lastSelectedQualifier);
        }
Exemple #12
0
        /// <summary>
        /// Selects the action for execution, given the specified context.
        /// This selector choses the highest scoring <see cref="IQualifier"/>.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="qualifiers">The qualifiers from which to find the action.</param>
        /// <param name="defaultQualifier">The default qualifier.</param>
        /// <returns>
        /// The qualifier whose action should be chosen.
        /// </returns>
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            var count = qualifiers.Count;

            float      max        = defaultQualifier.score;
            IQualifier highRoller = null;

            for (int i = 0; i < count; i++)
            {
                var qualifier = qualifiers[i];
                if (qualifier.isDisabled)
                {
                    continue;
                }

                var score = qualifier.Score(context);
                if (score > max)
                {
                    max        = score;
                    highRoller = qualifier;
                }
            }

            if (highRoller == null)
            {
                return(defaultQualifier);
            }

            return(highRoller);
        }
Exemple #13
0
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            this.lastSelectedQualifier = this._selector.Select(context, qualifiers, defaultQualifier);
            IQualifierVisualizer qualifierVisualizer = this.lastSelectedQualifier as IQualifierVisualizer;

            if (qualifierVisualizer != null && qualifierVisualizer.isBreakPoint)
            {
                if (qualifierVisualizer.breakpointCondition == null)
                {
                    qualifierVisualizer.breakPointHit = true;
                }
                else
                {
                    qualifierVisualizer.breakPointHit = qualifierVisualizer.breakpointCondition.Evaluate(qualifierVisualizer.lastScore);
                }
            }
            return(this.lastSelectedQualifier);
        }
 public Selector()
 {
     this._id               = Guid.NewGuid();
     this._qualifiers       = new List <IQualifier>();
     this._defaultQualifier = new DefaultQualifier();
 }
Exemple #15
0
 public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
 {
     for (int i = 0; i < qualifiers.Count; i++)
     {
         qualifiers[i].Score(context);
     }
     defaultQualifier.Score(context);
     return(defaultQualifier);
 }
Exemple #16
0
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            IQualifier qualifier = defaultQualifier;

            for (int i = 0; i < qualifiers.Count; i++)
            {
                IQualifier item = qualifiers[i];
                if (!item.isDisabled)
                {
                    float single = item.Score(context);
                    if (this._decomposition == DecompositionType.One && single > 0f)
                    {
                        return(item);
                    }
                    if (this._decomposition == DecompositionType.All && single <= 0f)
                    {
                        return(base.defaultQualifier);
                    }
                    qualifier = item;
                    IConnectorAction connectorAction = item.action as IConnectorAction;
                    if (connectorAction != null)
                    {
                        connectorAction.Select(context);
                    }
                }
            }
            if (this._decomposition == DecompositionType.All)
            {
                return(qualifier);
            }
            return(defaultQualifier);
        }
Exemple #17
0
 internal DefaultQualifierVisualizer(IDefaultQualifier q, SelectorVisualizer parent)
     : base(q, parent)
 {
     _defQualifier = q;
 }
        public override IQualifier Select(IAIContext context, IList <IQualifier> qualifiers, IDefaultQualifier defaultQualifier)
        {
            int   count  = qualifiers.Count;
            float single = defaultQualifier.score;

            for (int i = 0; i < count; i++)
            {
                IQualifier item = qualifiers[i];
                if (!item.isDisabled && item.Score(context) > single)
                {
                    return(item);
                }
            }
            return(defaultQualifier);
        }