Example #1
0
    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);
    }
Example #2
0
 static Office()
 {
     officeStates = new OfficeStates();
 }