private void DescribeCurrentWorldState(AIScenarioAgent agent, ref List <string> aResult) { bool value; foreach (var kv in agent.GetConditions()) { if (kv.Value == null) { continue; } value = kv.Value.OnCheck(); aResult.Add(string.Format(" '<color={2}>{0}</color>' = <color={2}>{1}</color>", kv.Key, value, (value) ? _trueColor : _falseColor)); } }
/// <summary> /// Описывает конкретное действие из плана ИИ. /// </summary> private string DescribePlanAction(AIScenarioAgent agent, Action action, out int aNumLines) { var lines = new List <string> (); lines.Add(string.Format("<b><color={1}>ACTION</color> '<color={2}>{0}</color>'</b>", action.name, _titleColor, _nameColor)); lines.Add(" <b>Post Conditions</b>"); bool value; foreach (var kv in agent.GetConditions()) { if (kv.Value == null) { continue; } value = kv.Value.OnCheck(); bool diff = false; foreach (var set in action._preConditions) { if (set.Item1 == kv.Key && set.Item2 != value) { diff = true; value = set.Item2; break; } } foreach (var set in action._postConditions) { if (set.Item1 == kv.Key && set.Item2 != value) { diff = true; value = set.Item2; break; } } if (diff) { lines.Add(string.Format( " <color=#a873dd><b>></b></color> <i>'<color={2}>{0}</color>' = <color={2}>{1}</color></i>", kv.Key, value, value ? _trueColor : _falseColor)); } else { lines.Add(string.Format(" '<color={2}>{0}</color>' = <color={2}>{1}</color>", kv.Key, value, value ? _trueColor : _falseColor)); } } StringBuilder text = new StringBuilder(); for (int i = 0, n = lines.Count; i < n; i++) { text.AppendLine(lines[i]); } aNumLines = lines.Count; return(text.ToString()); }