Exemplo n.º 1
0
        private TreeDecision <IGOAPReadOnlyAction> BuildPlansToAction(IGOAPReadOnlyAction action)
        {
            var tree = new TreeDecision <IGOAPReadOnlyAction>();

            tree.AddToRoot(action);

            var needConditions = new List <KeyValuePair <string, GOAPState> >();

            foreach (var condition in action.Preconditions)
            {
                if (!_context.Contains(condition))
                {
                    needConditions.Add(condition);
                }
            }

            if (needConditions.Count == 0)
            {
                return(tree);
            }

            foreach (var condition in needConditions)
            {
                TreeDecision <IGOAPReadOnlyAction> conditionTree = BuildPlansToGoal(condition);

                if (conditionTree == null)
                {
                    return(null);
                }

                tree.AddToLeafs(conditionTree);
            }

            return(tree);
        }
Exemplo n.º 2
0
        private TreeDecision <IGOAPReadOnlyAction> BuildPlansToGoal(KeyValuePair <string, GOAPState> goal)
        {
            var tree = new TreeDecision <IGOAPReadOnlyAction>();

            List <IGOAPReadOnlyAction> needActions;

            if (!GOAPActionsManager.Instance.TryGetActionsWithEffect(goal, out needActions))
            {
                return(null);
            }

            for (int i = 0; i < needActions.Count; i++)
            {
                var actionTree = BuildPlansToAction(needActions[i]);

                if (actionTree != null)
                {
                    tree.AddToRoot(actionTree);
                }
            }

            if (tree.IsEmpty)
            {
                return(null);
            }

            return(tree);
        }