public List <float> Evaluate(AiContext context, int len = 1) { var pick = new List <float>(); if (evaluatedContextVariable != AiContextVariable.None) { if (context.GetParameter(evaluatedContextVariable) is List <float> evaluatedParams) { for (var i = 0; i < evaluatedParams.Count; i++) { pick.Add(EvaluateAt(evaluatedParams[i])); } } else { if (context.GetParameter(evaluatedContextVariable) is float evaluatedParam) { pick = new List <float>(); var score = EvaluateAt(evaluatedParam); for (var i = 0; i < len; i++) { pick.Add(score); } } } } return(pick); }
public void GoToCover(AiContext context, UtilityPick pick) { if (pick.UtilityAction is PickerAction picker) { var choices = context.GetParameter(picker.evaluatedParamName) as List <Vector3>; var owner = context.owner as NpcMainScript; if (pick.SelectorIdx != -1) { owner._agent.SetDestination(choices[pick.SelectorIdx]); } } }
private float[] GetSumScores(AiContext context) { var vetoIndices = new List <int>(); var count = (context.GetParameter(evaluatedParamName) as IEnumerable).Cast <object>().Count(); if (count == 0) { return(null); } var averageScores = new float[count]; foreach (var inputConsideration in considerations) { if (!inputConsideration.isEnabled) { continue; } var scores = inputConsideration.Evaluate(context, count); for (var i = 0; i < scores.Count; i++) { var score = Mathf.Round(scores[i] * 1e+3f) / 1e+3f; if (score == 0 && inputConsideration.canApplyVeto) { vetoIndices.Add(i); continue; } averageScores[i] += score; } } foreach (var vetoIndex in vetoIndices) { averageScores[vetoIndex] = 0f; } return(averageScores); }