public Queue <GOAPAction> plan(List <GOAPAction> actions, Dictionary <string, int> goal, OfficeStates states) { List <GOAPAction> usableActions = new List <GOAPAction>(); foreach (GOAPAction a in actions) { if (a.isAchievable()) { usableActions.Add(a); } } List <Node> leaves = new List <Node>(); Node start = new Node(null, 0.0f, Office.GetInstance.GetOffice().GetStates(), null); bool success = BuildGraph(start, leaves, usableActions, goal); if (!success) { Debug.Log("NO PLAN"); return(null); } Node cheapest = null; foreach (Node leaf in leaves) { if (cheapest == null) { cheapest = leaf; } else { if (leaf.cost < cheapest.cost) { cheapest = leaf; } } } List <GOAPAction> result = new List <GOAPAction>(); Node n = cheapest; while (n != null) { if (n.action != null) { result.Insert(0, n.action); } n = n.parent; } Queue <GOAPAction> queue = new Queue <GOAPAction>(); foreach (GOAPAction a in result) { queue.Enqueue(a); } Debug.Log("The Plan is: "); foreach (GOAPAction a in queue) { Debug.Log("Q: " + a.actionName); } return(queue); }
static Office() { officeStates = new OfficeStates(); }