Example #1
0
    private NodeRoot GetLeafNode(NodeValue nodeValue)
    {
        string componentName = nodeValue.componentName;

        NodeRoot nodeRoot = null;

        switch (componentName)
        {
        case "NodeActionCooking":
            nodeRoot = new NodeActionCooking();
            break;

        case "NodeActionEat":
            nodeRoot = new NodeActionEat();
            break;

        case "NodeActionMove":
            nodeRoot = new NodeActionMove();
            break;

        case "NodeConditionHasFood":
            nodeRoot = new NodeConditionHasFood();
            break;

        case "NodeConditionHungry":
            nodeRoot = new NodeConditionHungry();
            break;
        }

        return(nodeRoot);
    }
Example #2
0
    /// <summary>
    /// 初始化添加行为树节点
    /// </summary>
    private void Init()
    {
        // 顺序节点 1
        NodeSequence nodeSequence_1 = new NodeSequence();

        // 顺序节点 1 添加到根节点
        rootNode.AddNode(nodeSequence_1);

        #region 是否饿了
        // 条件节点 1.1
        NodeConditionHungry nodeConditionHungry_1_1 = new NodeConditionHungry();
        nodeConditionHungry_1_1.SetStudent(this);
        // 条件节点 1.1 添加到 顺序节点1
        nodeSequence_1.AddNode(nodeConditionHungry_1_1);
        #endregion

        #region  择节点 1.2
        {
            // 选择节点1.2
            NodeSelect nodeSelect_1_2 = new NodeSelect();
            nodeSequence_1.AddNode(nodeSelect_1_2);

            // 节点 1.2.1 是否有饭
            NodeConditionHasFood nodeConditionHasFood_1_2_1 = new NodeConditionHasFood();
            nodeConditionHasFood_1_2_1.SetStudent(this);
            nodeSelect_1_2.AddNode(nodeConditionHasFood_1_2_1);

            // 顺序节点 1.2.2
            NodeSequence nodeSequence_1_2_2 = new NodeSequence();
            nodeSelect_1_2.AddNode(nodeSequence_1_2_2);

            // 行为节点 1.2.2.1 走到厨房
            NodeActionMove nodeActionMove_1_2_2_1 = new NodeActionMove();
            nodeActionMove_1_2_2_1.SetStudent(this);
            nodeActionMove_1_2_2_1.SetTarget("Cooking");
            nodeActionMove_1_2_2_1.SetTr(transform);
            nodeSequence_1_2_2.AddNode(nodeActionMove_1_2_2_1);

            // 行为节点 1.2.2.2 做饭
            NodeActionCooking nodeActionCooking_1_2_2_2 = new NodeActionCooking();
            nodeActionCooking_1_2_2_2.SetStudent(this);
            nodeSequence_1_2_2.AddNode(nodeActionCooking_1_2_2_2);
        }
        #endregion

        #region 走到餐桌
        {
            // 行为节点 1.3 走到餐桌
            NodeActionMove nodeActionMove_1_3 = new NodeActionMove();
            nodeActionMove_1_3.SetStudent(this);
            nodeActionMove_1_3.SetTarget("Food");
            nodeActionMove_1_3.SetTr(transform);
            nodeSequence_1.AddNode(nodeActionMove_1_3);
        }
        #endregion

        #region 吃饭
        {
            // 行为节点 1.4 吃饭
            NodeActionEat nodeActionEat_1_4 = new NodeActionEat();
            nodeActionEat_1_4.SetStudent(this);
            nodeSequence_1.AddNode(nodeActionEat_1_4);
        }
        #endregion
    }
Example #3
0
        public List <CustomIdentification> GetNodeList()
        {
            if (nodeList.Count > 0)
            {
                return(nodeList);
            }


            #region Skill
            // 条件节点
            {
                CustomIdentification input = NodeConditionInput.CustomIdentification();
                nodeList.Add(input);

                CustomIdentification skillState = NodeConditionSkillState.CustomIdentification();
                nodeList.Add(skillState);

                CustomIdentification general = NodeConditionGeneral.CustomIdentification();
                nodeList.Add(general);
            }

            // 行为节点
            {
                CustomIdentification requestSkillState = NodeActionRequestSkillState.CustomIdentification();
                nodeList.Add(requestSkillState);
            }
            #endregion

            #region Human
            // 条件节点
            {
                CustomIdentification custom = NodeConditionCustom.CustomIdentification();
                nodeList.Add(custom);
            }

            // 行为节点
            {
                CustomIdentification cooking = NodeActionCooking.CustomIdentification();
                nodeList.Add(cooking);

                CustomIdentification eat = NodeActionEat.CustomIdentification();
                nodeList.Add(eat);

                CustomIdentification move = NodeActionMove.CustomIdentification();
                nodeList.Add(move);

                CustomIdentification watchTv = NodeActionWatchTV.CustomIdentification();
                nodeList.Add(watchTv);
            }
            #endregion

            HashSet <int> hash = new HashSet <int>();
            for (int i = 0; i < nodeList.Count; ++i)
            {
                CustomIdentification identificationi = nodeList[i];
                if (hash.Contains(identificationi.Identification))
                {
                    Debug.LogError("重复的 Identification:" + identificationi.Identification);
                    break;
                }
                hash.Add(identificationi.Identification);
            }

            return(nodeList);
        }
    void Init()
    {
        NodeSequence nodeSequence_1 = new NodeSequence();

        rootNode.AddNode(nodeSequence_1);

        #region 条件 1.1 是否饿了
        {
            NodeConditionHungry cond_1_1 = new NodeConditionHungry();
            cond_1_1.SetActor(this);
            nodeSequence_1.AddNode(cond_1_1);
        }
        #endregion

        #region  择条件 1.2 是否有饭
        {
            NodeSelect sel_1_2 = new NodeSelect();
            nodeSequence_1.AddNode(sel_1_2);

            // 1.2.1 是否有饭
            NodeConditionHasFood hasFood_1_2_1 = new NodeConditionHasFood();
            hasFood_1_2_1.SetActor(this);
            sel_1_2.AddNode(hasFood_1_2_1);

            // 没有饭的话, 走去厨房 => 做饭
            // 1.2.2 顺序节点
            NodeSequence sequence_1_2_2 = new NodeSequence();
            sel_1_2.AddNode(sequence_1_2_2);
            // 1.2.2.1 走厨房
            NodeActionMove move_1_2_2_1 = new NodeActionMove();
            move_1_2_2_1.SetActor(this);
            move_1_2_2_1.myTransform     = this.transform;
            move_1_2_2_1.targetTransform = doCookingTransform;
            sequence_1_2_2.AddNode(move_1_2_2_1);
            // 1.2.2.2 做饭
            NodeActionCooking cooking_1_2_2_2 = new NodeActionCooking();
            cooking_1_2_2_2.SetActor(this);
            sequence_1_2_2.AddNode(cooking_1_2_2_2);
        }
        #endregion
        #region 1.3 去餐桌
        {
            NodeActionMove move_1_3 = new NodeActionMove();
            move_1_3.SetActor(this);
            move_1_3.myTransform     = this.transform;
            move_1_3.targetTransform = eatFoodTransform;

            nodeSequence_1.AddNode(move_1_3);
        }
        #endregion

        #region 1.4 吃饭
        {
            NodeActionEat eat_1_4 = new NodeActionEat();
            eat_1_4.SetActor(this);
            nodeSequence_1.AddNode(eat_1_4);
        }
        #endregion

        #region 2
        // 并行节点
        NodeParallel p_2 = new NodeParallel();
        rootNode.AddNode(p_2);

        // 2.1 是否有钱
        NodeConditionHasMoney hasMoney_2_1 = new NodeConditionHasMoney();
        p_2.AddNode(hasMoney_2_1);

        // 2.2 走去酒馆
        NodeSequence seq_saloon = new NodeSequence();
        p_2.AddNode(seq_saloon);

        NodeActionMove move_2_2 = new NodeActionMove();
        move_2_2.myTransform     = this.transform;
        move_2_2.targetTransform = saloonTransform;
        seq_saloon.AddNode(move_2_2);
        // 2.3 随机点一份酒水
        NodeRandom r_2_3 = new NodeRandom();
        seq_saloon.AddNode(r_2_3);
        // 2.3.1 喝红酒
        r_2_3.AddNode(new NodeActionDrinkRedWine());
        // 2.3.2 喝白开水
        r_2_3.AddNode(new NodeActionDrinkWater());
        #endregion
    }