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); }
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); }
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); }
/// <summary> /// Calculates the score for this qualifier given the provided context. /// </summary> /// <param name="context">The context.</param> /// <returns> /// The score. /// </returns> public virtual float Score(IAIContext context) { var score = _qualifier.Score(context); this.lastScore = score; ICustomVisualizer customVisualizer; if (VisualizationManager.TryGetVisualizerFor(_qualifier.GetType(), out customVisualizer)) { customVisualizer.EntityUpdate(_qualifier, context, _parent.parent.id); } return(score); }
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); }