public void ResetNodes()
        {
            m_Nodes.Clear();
            #region 组合节点
            //并行节点
            NodeClass parallelNode = new NodeClass();
            parallelNode.ClassType = "Parallel";
            parallelNode.Label     = "并行节点";
            parallelNode.NodeType  = NodeType.Composite;
            parallelNode.Describe  = "Parallel节点在一般意义上是并行的执行其子节点,即“一边做A,一边做B”";
            //成功条件
            NodeField parallelNodeSuccessType = new NodeField()
            {
                FieldName = "SuccessType", FieldType = FieldType.EnumField, Describe = "成功条件"
            };
            EnumDefaultValue parallelNodeSuccessEnumDefaultValue = parallelNodeSuccessType.DefaultValue as EnumDefaultValue;
            parallelNodeSuccessEnumDefaultValue.EnumType     = "SUCCESS_POLICY";
            parallelNodeSuccessEnumDefaultValue.DefaultValue = "SUCCEED_ON_ALL";
            parallelNodeSuccessType.Label = "成功条件";
            parallelNode.AddField(parallelNodeSuccessType);
            //失败条件
            NodeField parallelNodeFailType = new NodeField()
            {
                FieldName = "FailType", FieldType = FieldType.EnumField, Describe = "失败条件"
            };
            EnumDefaultValue parallelNodeFailTypeEnumDefaultValue = parallelNodeFailType.DefaultValue as EnumDefaultValue;
            parallelNodeFailTypeEnumDefaultValue.EnumType     = "FAILURE_POLICY";
            parallelNodeFailTypeEnumDefaultValue.DefaultValue = "FAIL_ON_ONE";
            parallelNodeFailType.Label = "失败条件";
            parallelNode.AddField(parallelNodeFailType);
            AddClass(parallelNode);

            //顺序节点
            NodeClass sequenceNode = new NodeClass();
            sequenceNode.ClassType = "Sequence";
            sequenceNode.Label     = "顺序节点";
            sequenceNode.NodeType  = NodeType.Composite;
            sequenceNode.Describe  = "Sequence节点以给定的顺序依次执行其子节点,直到所有子节点成功返回,该节点也返回成功。只要其中某个子节点失败,那么该节点也失败。";
            AddClass(sequenceNode);

            //选择节点
            NodeClass Selector = new NodeClass();
            Selector.ClassType = "Selector";
            Selector.Label     = "选择节点";
            Selector.Category  = "";
            Selector.NodeType  = NodeType.Composite;
            Selector.Describe  = "选择节点";
            AddClass(Selector);

            //ifelse
            NodeClass IfElse = new NodeClass();
            IfElse.ClassType = "IfElse";
            IfElse.Label     = "IfElse";
            IfElse.NodeType  = NodeType.Composite;
            IfElse.Describe  = "";
            AddClass(IfElse);

            //随机节点
            NodeClass Random = new NodeClass();
            Random.ClassType = "Random";
            Random.Label     = "随机节点";
            Random.Category  = "随机";
            Random.NodeType  = NodeType.Composite;
            Random.Describe  = "随机节点";
            AddClass(Random);

            //随机选择节点
            NodeClass RandomSelector = new NodeClass();
            RandomSelector.ClassType = "RandomSelector";
            RandomSelector.Label     = "随机选择";
            RandomSelector.Category  = "随机";
            RandomSelector.NodeType  = NodeType.Composite;
            RandomSelector.Describe  = "随机选择节点";
            AddClass(RandomSelector);

            //随机序列节点
            NodeClass RandomSequence = new NodeClass();
            RandomSequence.ClassType = "RandomSequence";
            RandomSequence.Label     = "随机序列";
            RandomSequence.Category  = "随机";
            RandomSequence.NodeType  = NodeType.Composite;
            RandomSequence.Describe  = "随机序列节点";
            AddClass(RandomSequence);

            //概率选择节点
            NodeClass RateSelector = new NodeClass();
            RateSelector.ClassType = "RateSelector";
            RateSelector.Label     = "概率选择";
            RateSelector.Category  = "随机";
            RateSelector.NodeType  = NodeType.Composite;
            RateSelector.Describe  = "概率选择节点";
            RateSelector.AddField(new NodeField()
            {
                FieldName = "Priority", Label = "优先级", FieldType = FieldType.RepeatIntField, Describe = ""
            });
            AddClass(RateSelector);

            #endregion

            #region 装饰节点

            //成功节点
            NodeClass Success = new NodeClass();
            Success.ClassType = "Success";
            Success.Label     = "成功节点";
            Success.NodeType  = NodeType.Decorator;
            Success.Describe  = "成功节点";
            AddClass(Success);

            //失败节点
            NodeClass Failure = new NodeClass();
            Failure.ClassType = "Failure";
            Failure.Label     = "失败节点";
            Failure.NodeType  = NodeType.Decorator;
            Failure.Describe  = "失败节点";
            AddClass(Failure);

            //帧数节点用于在指定的帧数内,持续调用其子节点
            NodeClass Frames = new NodeClass();
            Frames.ClassType   = "Frames";
            Frames.Label       = "帧数节点";
            Frames.NodeType    = NodeType.Decorator;
            Frames.ShowContent = true;
            NodeField FramesField = new NodeField()
            {
                FieldName = "Frames", Label = "持续帧数", FieldType = FieldType.IntField, Describe = "持续帧数"
            };
            (FramesField.DefaultValue as IntDefaultValue).DefaultValue = 1;
            Frames.AddField(FramesField);
            Frames.Describe = "帧数节点用于在指定的帧数内,持续调用其子节点";
            AddClass(Frames);

            //输出Log节点
            NodeClass Log = new NodeClass();
            Log.ClassType   = "Log";
            Log.Label       = "输出节点";
            Log.NodeType    = NodeType.Decorator;
            Log.Describe    = "输出log节点";
            Log.ShowContent = true;
            Log.AddField(new NodeField()
            {
                FieldName = "Content", Label = "输出内容", FieldType = FieldType.StringField, Describe = "输出的内容"
            });
            AddClass(Log);

            //循环节点 -1无限循环
            NodeClass Loop = new NodeClass();
            Loop.ClassType   = "Loop";
            Loop.Label       = "循环节点";
            Loop.NodeType    = NodeType.Decorator;
            Loop.Describe    = "循环节点 -1无限循环";
            Loop.ShowContent = true;
            Loop.AddField(new NodeField()
            {
                FieldName = "LoopTimes", Label = "循环次数", FieldType = FieldType.IntField, Describe = "循环次数"
            });
            AddClass(Loop);

            //直到某个值达成前一直循环
            NodeClass LoopUntil = new NodeClass();
            LoopUntil.ClassType = "LoopUntil";
            LoopUntil.Label     = "循环直到";
            LoopUntil.NodeType  = NodeType.Decorator;
            LoopUntil.Describe  = "直到某个值达成前一直循环";
            AddClass(LoopUntil);

            //取反节点
            NodeClass Not = new NodeClass();
            Not.ClassType = "Not";
            Not.Label     = "取反节点";
            Not.NodeType  = NodeType.Decorator;
            Not.Describe  = "取反节点";
            AddClass(Not);

            //指定时间内运行
            NodeClass Time = new NodeClass();
            Time.ClassType = "Time";
            Time.Label     = "时间";
            Time.NodeType  = NodeType.Decorator;
            Time.Describe  = "指定时间内运行";
            NodeField TimeField = new NodeField()
            {
                FieldName = "Duration", Label = "持续时间(毫秒)", FieldType = FieldType.IntField, Describe = "持续时间(毫秒)"
            };
            (TimeField.DefaultValue as IntDefaultValue).DefaultValue = 1000;
            Time.AddField(TimeField);
            Time.ShowContent = true;
            AddClass(Time);

            //阻塞,直到子节点返回true
            NodeClass WaitUntil = new NodeClass();
            WaitUntil.ClassType = "WaitUntil";
            WaitUntil.Label     = "等待返回True";
            WaitUntil.NodeType  = NodeType.Decorator;
            WaitUntil.Describe  = "阻塞,直到子节点返回true";
            AddClass(WaitUntil);

            #endregion

            #region 条件节点

            //比较Int节点
            NodeClass CompareInt = new NodeClass();
            CompareInt.ClassType = "CompareInt";
            CompareInt.Label     = "比较Int节点";
            CompareInt.NodeType  = NodeType.Condition;
            CompareInt.Describe  = "Compare节点对左右参数进行比较";
            //左边参数类型
            NodeField CompareInt_LeftType = new NodeField()
            {
                FieldName = "LeftType", FieldType = FieldType.EnumField, Describe = ""
            };
            (CompareInt_LeftType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            CompareInt_LeftType.Label = "左参数类型";
            CompareInt.AddField(CompareInt_LeftType);
            //左边参数变量名
            CompareInt.AddField(new NodeField()
            {
                FieldName = "LeftParameter", Label = "左参数名", FieldType = FieldType.StringField, Describe = "左边参数变量名"
            });
            //比较符号
            NodeField CompareInt_Type = new NodeField()
            {
                FieldName = "CompareType", FieldType = FieldType.EnumField, Describe = "比较符号<、>、<=、>=、==、!="
            };
            (CompareInt_Type.DefaultValue as EnumDefaultValue).EnumType = "CompareType";
            CompareInt_Type.Label = "比较操作符";
            CompareInt.AddField(CompareInt_Type);
            //右边边参数类型
            NodeField CompareInt_RightType = new NodeField()
            {
                FieldName = "RightType", FieldType = FieldType.EnumField, Describe = ""
            };
            (CompareInt_RightType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            CompareInt_RightType.Label = "右参数类型";
            CompareInt.AddField(CompareInt_RightType);
            //右边参数变量名
            CompareInt.AddField(new NodeField()
            {
                FieldName = "RightParameter", Label = "右参数名", FieldType = FieldType.StringField, Describe = "右边参数变量名"
            });
            AddClass(CompareInt);

            //比较Float节点
            NodeClass CompareFloat = new NodeClass();
            CompareFloat.ClassType = "CompareFloat";
            CompareFloat.Label     = "比较Float节点";
            CompareFloat.NodeType  = NodeType.Condition;
            CompareFloat.Describe  = "Compare节点对左右参数进行比较";
            //左边参数类型
            NodeField CompareFloat_LeftType = new NodeField()
            {
                FieldName = "LeftType", FieldType = FieldType.EnumField, Describe = ""
            };
            (CompareFloat_LeftType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            CompareFloat_LeftType.Label = "左参数类型";
            CompareFloat.AddField(CompareFloat_LeftType);
            //左边参数变量名
            CompareFloat.AddField(new NodeField()
            {
                FieldName = "LeftParameter", Label = "左参数名", FieldType = FieldType.StringField, Describe = "左边参数变量名"
            });
            //比较符号
            NodeField CompareFloat_Type = new NodeField()
            {
                FieldName = "CompareType", FieldType = FieldType.EnumField, Describe = "比较符号<、>、<=、>=、==、!="
            };
            (CompareFloat_Type.DefaultValue as EnumDefaultValue).EnumType = "CompareType";
            CompareFloat_Type.Label = "比较操作符";
            CompareFloat.AddField(CompareFloat_Type);
            //右边边参数类型
            NodeField CompareFloat_RightType = new NodeField()
            {
                FieldName = "RightType", FieldType = FieldType.EnumField, Describe = ""
            };
            (CompareFloat_RightType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            CompareFloat_RightType.Label = "右参数类型";
            CompareFloat.AddField(CompareFloat_RightType);
            //右边参数变量名
            CompareFloat.AddField(new NodeField()
            {
                FieldName = "RightParameter", Label = "右参数名", FieldType = FieldType.StringField, Describe = "右边参数变量名"
            });
            AddClass(CompareFloat);

            //比较String节点
            NodeClass CompareString = new NodeClass();
            CompareString.ClassType = "CompareString";
            CompareString.Label     = "比较String节点";
            CompareString.NodeType  = NodeType.Condition;
            CompareString.Describe  = "Compare节点对左右参数进行比较";
            //左边参数类型
            NodeField CompareString_LeftType = new NodeField()
            {
                FieldName = "LeftType", FieldType = FieldType.EnumField, Describe = ""
            };
            (CompareString_LeftType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            CompareString_LeftType.Label = "左参数类型";
            CompareString.AddField(CompareString_LeftType);
            //左边参数变量名
            CompareString.AddField(new NodeField()
            {
                FieldName = "LeftParameter", Label = "左参数名", FieldType = FieldType.StringField, Describe = "左边参数变量名"
            });
            //比较符号
            NodeField CompareString_Type = new NodeField()
            {
                FieldName = "CompareType", FieldType = FieldType.EnumField, Describe = "比较符号<、>、<=、>=、==、!="
            };
            (CompareString_Type.DefaultValue as EnumDefaultValue).EnumType = "CompareType";
            CompareString_Type.Label = "比较操作符";
            CompareString.AddField(CompareString_Type);
            //右边边参数类型
            NodeField CompareString_RightType = new NodeField()
            {
                FieldName = "RightType", FieldType = FieldType.EnumField, Describe = ""
            };
            (CompareString_RightType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            CompareString_RightType.Label = "右参数类型";
            CompareString.AddField(CompareString_RightType);
            //右边参数变量名
            CompareString.AddField(new NodeField()
            {
                FieldName = "RightParameter", Label = "右参数名", FieldType = FieldType.StringField, Describe = "右边参数变量名"
            });
            AddClass(CompareString);

            #endregion

            #region 动作节点

            //赋值节点Int
            NodeClass AssignmentInt = new NodeClass();
            AssignmentInt.ClassType = "AssignmentInt";
            AssignmentInt.Label     = "赋值节点(Int)";
            AssignmentInt.NodeType  = NodeType.Action;
            AssignmentInt.Describe  = "赋值节点";
            AssignmentInt.AddField(new NodeField()
            {
                FieldName = "ParameterName", Label = "变量名", FieldType = FieldType.StringField, Describe = "参数变量名"
            });
            AssignmentInt.AddField(new NodeField()
            {
                FieldName = "Parameter", Label = "赋值Int", FieldType = FieldType.IntField, Describe = "参数值"
            });
            AssignmentInt.ShowContent = true;
            AddClass(AssignmentInt);

            //赋值节点Float
            NodeClass AssignmentFloat = new NodeClass();
            AssignmentFloat.ClassType = "AssignmentFloat";
            AssignmentFloat.Label     = "赋值节点(Float)";
            AssignmentFloat.NodeType  = NodeType.Action;
            AssignmentFloat.Describe  = "赋值节点(Float)";
            AssignmentFloat.AddField(new NodeField()
            {
                FieldName = "ParameterName", Label = "变量名", FieldType = FieldType.StringField, Describe = "参数变量名"
            });
            AssignmentFloat.AddField(new NodeField()
            {
                FieldName = "Parameter", Label = "赋值Float", FieldType = FieldType.FloatField, Describe = "参数值"
            });
            AssignmentFloat.ShowContent = true;
            AddClass(AssignmentFloat);

            //赋值节点String
            NodeClass AssignmentString = new NodeClass();
            AssignmentString.ClassType = "AssignmentString";
            AssignmentString.Label     = "赋值节点(String)";
            AssignmentString.NodeType  = NodeType.Action;
            AssignmentString.Describe  = "赋值节点(String)";
            AssignmentString.AddField(new NodeField()
            {
                FieldName = "ParameterName", Label = "变量名", FieldType = FieldType.StringField, Describe = "参数变量名"
            });
            AssignmentString.AddField(new NodeField()
            {
                FieldName = "Parameter", Label = "赋值字符串", FieldType = FieldType.StringField, Describe = "参数值"
            });
            AssignmentString.ShowContent = true;
            AddClass(AssignmentString);

            //等待节点
            NodeClass Wait = new NodeClass();
            Wait.ClassType = "Wait";
            Wait.Label     = "等待节点";
            Wait.NodeType  = NodeType.Action;
            Wait.Describe  = "等待节点";
            NodeField WaintField = new NodeField()
            {
                FieldName = "Millisecond", Label = "等待时间(毫秒)", FieldType = FieldType.IntField, Describe = "等待时间(毫秒)"
            };
            IntDefaultValue WaintFieldDefaultField = WaintField.DefaultValue as IntDefaultValue;
            WaintFieldDefaultField.DefaultValue = 1000;
            Wait.AddField(WaintField);
            Wait.ShowContent = true;
            AddClass(Wait);

            //空操作节点
            NodeClass Noop = new NodeClass();
            Noop.ClassType = "Noop";
            Noop.Label     = "空操作节点";
            Noop.NodeType  = NodeType.Action;
            Noop.Describe  = "空操作节点";
            AddClass(Noop);

            #endregion
        }
示例#2
0
        /// <summary>
        /// 通过节点模板创建FieldDesigner
        /// </summary>
        /// <param name="nodeField">节点模板</param>
        /// <returns></returns>
        public static FieldDesigner CreateFieldByNodeField(NodeField nodeField)
        {
            FieldDesigner field = new FieldDesigner();

            field.FieldName = nodeField.FieldName;
            field.Label     = nodeField.Label;
            field.FieldType = nodeField.FieldType;
            field.Describe  = nodeField.Describe;
            switch (nodeField.FieldType)
            {
            case FieldType.IntField:
                IntFieldDesigner intFieldDesigner = field.Field as IntFieldDesigner;
                IntDefaultValue  intDefaultValue  = nodeField.DefaultValue as IntDefaultValue;
                intFieldDesigner.Value = intDefaultValue.DefaultValue;
                break;

            case FieldType.LongField:
                LongFieldDesigner longFieldDesigner = field.Field as LongFieldDesigner;
                LongDefaultValue  longDefaultValue  = nodeField.DefaultValue as LongDefaultValue;
                longFieldDesigner.Value = longDefaultValue.DefaultValue;
                break;

            case FieldType.FloatField:
                FloatFieldDesigner floatFieldDesigner = field.Field as FloatFieldDesigner;
                FloatDefaultValue  floatDefaultValue  = nodeField.DefaultValue as FloatDefaultValue;
                floatFieldDesigner.Value = floatDefaultValue.DefaultValue;
                break;

            case FieldType.DoubleField:
                DoubleFieldDesigner doubleFieldDesigner = field.Field as DoubleFieldDesigner;
                DoubleDefaultValue  doubleDefaultValue  = nodeField.DefaultValue as DoubleDefaultValue;
                doubleFieldDesigner.Value = doubleDefaultValue.DefaultValue;
                break;

            case FieldType.StringField:
                StringFieldDesigner stringFieldDesigner = field.Field as StringFieldDesigner;
                StringDefaultValue  stringDefaultValue  = nodeField.DefaultValue as StringDefaultValue;
                stringFieldDesigner.Value = stringDefaultValue.DefaultValue;
                break;

            case FieldType.ColorField:
                ColorFieldDesigner colorFieldDesigner = field.Field as ColorFieldDesigner;
                ColorDefaultValue  colorDefaultValue  = nodeField.DefaultValue as ColorDefaultValue;
                colorFieldDesigner.R = colorDefaultValue.R;
                colorFieldDesigner.G = colorDefaultValue.G;
                colorFieldDesigner.B = colorDefaultValue.B;
                colorFieldDesigner.A = colorDefaultValue.A;
                break;

            case FieldType.Vector2:
                Vector2FieldDesigner vector2FieldDesigner = field.Field as Vector2FieldDesigner;
                Vector2DefaultValue  vector2DefaultValue  = nodeField.DefaultValue as Vector2DefaultValue;
                vector2FieldDesigner.X = vector2DefaultValue.X;
                vector2FieldDesigner.Y = vector2DefaultValue.Y;
                break;

            case FieldType.Vector3:
                Vector3FieldDesigner vector3FieldDesigner = field.Field as Vector3FieldDesigner;
                Vector3DefaultValue  vector3DefaultValue  = nodeField.DefaultValue as Vector3DefaultValue;
                vector3FieldDesigner.X = vector3DefaultValue.X;
                vector3FieldDesigner.Y = vector3DefaultValue.Y;
                vector3FieldDesigner.Z = vector3DefaultValue.Z;
                break;

            case FieldType.EnumField:
                EnumFieldDesigner enumFieldDesigner = field.Field as EnumFieldDesigner;
                EnumDefaultValue  enumDefaultValue  = nodeField.DefaultValue as EnumDefaultValue;
                enumFieldDesigner.EnumType = enumDefaultValue.EnumType;
                enumFieldDesigner.Value    = enumDefaultValue.DefaultValue;
                break;

            case FieldType.BooleanField:
                BooleanFieldDesigner booleanFieldDesigner = field.Field as BooleanFieldDesigner;
                BooleanDefaultValue  booleanDefaultValue  = nodeField.DefaultValue as BooleanDefaultValue;
                booleanFieldDesigner.Value = booleanDefaultValue.DefaultValue;
                break;

            case FieldType.RepeatIntField:
                break;

            case FieldType.RepeatLongField:
                break;

            case FieldType.RepeatFloatField:
                break;

            case FieldType.RepeatVector2Field:
                break;

            case FieldType.RepeatVector3Field:
                break;

            case FieldType.RepeatStringField:
                break;
            }
            return(field);
        }
示例#3
0
        public void ResetNodes()
        {
            m_Nodes.Clear();
            #region 组合节点
            //并行节点
            NodeDefine parallelNode = new NodeDefine();
            parallelNode.ClassType = "Parallel";
            parallelNode.Label     = "并行节点";
            parallelNode.NodeType  = NodeType.Composite;
            parallelNode.Describe  = "Parallel节点在一般意义上是并行的执行其子节点,即“一边做A,一边做B”";
            //成功条件
            NodeField parallelNodeSuccessType = new NodeField()
            {
                FieldName = "SuccessType", FieldType = FieldType.EnumField, Describe = "成功条件"
            };
            EnumDefaultValue parallelNodeSuccessEnumDefaultValue = parallelNodeSuccessType.DefaultValue as EnumDefaultValue;
            parallelNodeSuccessEnumDefaultValue.EnumType     = "SUCCESS_POLICY";
            parallelNodeSuccessEnumDefaultValue.DefaultValue = "SUCCEED_ON_ALL";
            parallelNodeSuccessType.Label = "成功条件";
            parallelNode.AddField(parallelNodeSuccessType);
            //失败条件
            NodeField parallelNodeFailType = new NodeField()
            {
                FieldName = "FailType", FieldType = FieldType.EnumField, Describe = "失败条件"
            };
            EnumDefaultValue parallelNodeFailTypeEnumDefaultValue = parallelNodeFailType.DefaultValue as EnumDefaultValue;
            parallelNodeFailTypeEnumDefaultValue.EnumType     = "FAILURE_POLICY";
            parallelNodeFailTypeEnumDefaultValue.DefaultValue = "FAIL_ON_ONE";
            parallelNodeFailType.Label = "失败条件";
            parallelNode.AddField(parallelNodeFailType);
            AddClass(parallelNode);

            //顺序节点
            NodeDefine sequenceNode = new NodeDefine();
            sequenceNode.ClassType = "Sequence";
            sequenceNode.Label     = "顺序节点";
            sequenceNode.NodeType  = NodeType.Composite;
            sequenceNode.Describe  = "Sequence节点以给定的顺序依次执行其子节点,直到所有子节点成功返回,该节点也返回成功。只要其中某个子节点失败,那么该节点也失败。";
            AddClass(sequenceNode);

            //选择节点
            NodeDefine Selector = new NodeDefine();
            Selector.ClassType = "Selector";
            Selector.Label     = "选择节点";
            Selector.Category  = "";
            Selector.NodeType  = NodeType.Composite;
            Selector.Describe  = "选择节点";
            AddClass(Selector);

            //ifelse
            NodeDefine IfElse = new NodeDefine();
            IfElse.ClassType = "IfElse";
            IfElse.Label     = "IfElse";
            IfElse.NodeType  = NodeType.Composite;
            IfElse.Describe  = "";
            AddClass(IfElse);

            //随机节点
            NodeDefine Random = new NodeDefine();
            Random.ClassType = "Random";
            Random.Label     = "随机节点";
            Random.Category  = "随机";
            Random.NodeType  = NodeType.Composite;
            Random.Describe  = "随机节点";
            AddClass(Random);

            //随机选择节点
            NodeDefine RandomSelector = new NodeDefine();
            RandomSelector.ClassType = "RandomSelector";
            RandomSelector.Label     = "随机选择";
            RandomSelector.Category  = "随机";
            RandomSelector.NodeType  = NodeType.Composite;
            RandomSelector.Describe  = "随机选择节点";
            AddClass(RandomSelector);

            //随机序列节点
            NodeDefine RandomSequence = new NodeDefine();
            RandomSequence.ClassType = "RandomSequence";
            RandomSequence.Label     = "随机序列";
            RandomSequence.Category  = "随机";
            RandomSequence.NodeType  = NodeType.Composite;
            RandomSequence.Describe  = "随机序列节点";
            AddClass(RandomSequence);

            //概率选择节点
            NodeDefine SelectorProbability = new NodeDefine();
            SelectorProbability.ClassType = "SelectorProbability";
            SelectorProbability.Label     = "概率选择节点";
            SelectorProbability.Category  = "";
            SelectorProbability.NodeType  = NodeType.Composite;
            SelectorProbability.Describe  = "概率选择节点";
            SelectorProbability.AddField(new NodeField()
            {
                FieldName = "Priority", Label = "优先级", FieldType = FieldType.RepeatIntField, Describe = "", Show = true
            });
            AddClass(SelectorProbability);

            #endregion

            #region 装饰节点

            //成功节点
            NodeDefine Success = new NodeDefine();
            Success.ClassType = "Success";
            Success.Label     = "成功节点";
            Success.NodeType  = NodeType.Decorator;
            Success.Describe  = "成功节点";
            AddClass(Success);

            //失败节点
            NodeDefine Failure = new NodeDefine();
            Failure.ClassType = "Failure";
            Failure.Label     = "失败节点";
            Failure.NodeType  = NodeType.Decorator;
            Failure.Describe  = "失败节点";
            AddClass(Failure);

            //帧数节点用于在指定的帧数内,持续调用其子节点
            NodeDefine Frames = new NodeDefine();
            Frames.ClassType  = "Frames";
            Frames.Label      = "帧数节点";
            Frames.NodeType   = NodeType.Decorator;
            Frames.CheckField = true;
            NodeField FramesField = new NodeField()
            {
                FieldName = "Frames", Label = "持续帧数", FieldType = FieldType.IntField, Describe = "持续帧数", Show = true
            };
            (FramesField.DefaultValue as IntDefaultValue).DefaultValue = 1;
            Frames.AddField(FramesField);
            Frames.Describe = "帧数节点用于在指定的帧数内,持续调用其子节点";
            AddClass(Frames);

            //循环节点 -1无限循环
            NodeDefine Loop = new NodeDefine();
            Loop.ClassType = "Loop";
            Loop.Label     = "循环节点";
            Loop.NodeType  = NodeType.Decorator;
            Loop.Describe  = "循环节点 -1无限循环";
            Loop.AddField(new NodeField()
            {
                FieldName = "LoopTimes", Label = "循环次数", FieldType = FieldType.IntField, Describe = "循环次数", Show = true
            });
            AddClass(Loop);

            //取反节点
            NodeDefine Not = new NodeDefine();
            Not.ClassType = "Not";
            Not.Label     = "取反节点";
            Not.NodeType  = NodeType.Decorator;
            Not.Describe  = "取反节点";
            AddClass(Not);

            //指定时间内运行
            NodeDefine Time = new NodeDefine();
            Time.ClassType = "Time";
            Time.Label     = "时间";
            Time.NodeType  = NodeType.Decorator;
            Time.Describe  = "指定时间内运行";
            NodeField TimeField = new NodeField()
            {
                FieldName = "Duration", Label = "持续时间(毫秒)", FieldType = FieldType.IntField, Describe = "持续时间(毫秒)", Show = true
            };
            (TimeField.DefaultValue as IntDefaultValue).DefaultValue = 1000;
            Time.AddField(TimeField);
            AddClass(Time);

            //阻塞,直到子节点返回true
            NodeDefine SuccessUntil = new NodeDefine();
            SuccessUntil.ClassType = "SuccessUntil";
            SuccessUntil.Label     = "直到子节点返回True";
            SuccessUntil.NodeType  = NodeType.Decorator;
            SuccessUntil.Describe  = "直到子节点返回true";
            AddClass(SuccessUntil);

            #endregion

            #region 条件节点

            //比较节点
            NodeDefine Compare = new NodeDefine();
            Compare.ClassType = "Compare";
            Compare.Label     = "比较节点";
            Compare.NodeType  = NodeType.Condition;
            Compare.Describe  = "Compare节点对左右参数进行比较";
            //左边参数类型
            NodeField Compare_LeftType = new NodeField()
            {
                FieldName = "LeftType", FieldType = FieldType.EnumField, Describe = ""
            };
            (Compare_LeftType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            Compare_LeftType.Label = "左参数类型";
            Compare.AddField(Compare_LeftType);
            //左边参数变量名
            Compare.AddField(new NodeField()
            {
                FieldName = "LeftParameter", Label = "左参数名", FieldType = FieldType.StringField, Describe = "左边参数变量名", Show = true
            });
            //左边常数值
            Compare.AddField(new NodeField()
            {
                FieldName = "LeftConstValue", Label = "左边常数值", FieldType = FieldType.IntField, Describe = "左边常数值,左边参数类型为Const生效"
            });

            //比较符号
            NodeField Compare_Type = new NodeField()
            {
                FieldName = "CompareType", FieldType = FieldType.EnumField, Describe = "比较符号<、>、<=、>=、==、!=", Show = true
            };
            (Compare_Type.DefaultValue as EnumDefaultValue).EnumType = "CompareType";
            Compare_Type.Label = "比较操作符";
            Compare.AddField(Compare_Type);

            //右边边参数类型
            NodeField Compare_RightType = new NodeField()
            {
                FieldName = "RightType", FieldType = FieldType.EnumField, Describe = ""
            };
            (Compare_RightType.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            Compare_RightType.Label = "右参数类型";
            Compare.AddField(Compare_RightType);
            //右边参数变量名
            Compare.AddField(new NodeField()
            {
                FieldName = "RightParameter", Label = "右参数名", FieldType = FieldType.StringField, Describe = "右边参数变量名", Show = true
            });
            AddClass(Compare);
            //左边常数值
            Compare.AddField(new NodeField()
            {
                FieldName = "RightConstValue", Label = "右边常数值", FieldType = FieldType.IntField, Describe = "右边常数值,右边参数类型为Const生效"
            });

            #endregion

            #region 动作节点

            //设置变量节点
            NodeDefine SetVariable = new NodeDefine();
            SetVariable.CheckField = false;
            SetVariable.ClassType  = "SetVariable";
            SetVariable.Label      = "设置变量节点";
            SetVariable.NodeType   = NodeType.Action;
            SetVariable.Describe   = "设置变量节点";
            NodeField setVariableNodeField = new NodeField()
            {
                FieldName = "ParameterType", FieldType = FieldType.EnumField, Describe = ""
            };
            (setVariableNodeField.DefaultValue as EnumDefaultValue).EnumType = "ParameterType";
            SetVariable.AddField(setVariableNodeField);
            SetVariable.AddField(new NodeField()
            {
                FieldName = "ParameterName", Label = "变量名", FieldType = FieldType.StringField, Describe = "参数变量名", Show = true
            });
            SetVariable.AddField(new NodeField()
            {
                FieldName = "ParameterValue", Label = "变量值", FieldType = FieldType.IntField, Describe = "参数值", Show = true
            });
            AddClass(SetVariable);

            //等待节点
            NodeDefine Wait = new NodeDefine();
            Wait.ClassType = "Wait";
            Wait.Label     = "等待节点";
            Wait.NodeType  = NodeType.Action;
            Wait.Describe  = "等待节点";
            NodeField WaintField = new NodeField()
            {
                FieldName = "Millisecond", Label = "等待时间(毫秒)", FieldType = FieldType.IntField, Describe = "等待时间(毫秒)", Show = true
            };
            IntDefaultValue WaintFieldDefaultField = WaintField.DefaultValue as IntDefaultValue;
            WaintFieldDefaultField.DefaultValue = 1000;
            Wait.AddField(WaintField);
            AddClass(Wait);

            //空操作节点
            NodeDefine Noop = new NodeDefine();
            Noop.ClassType = "Noop";
            Noop.Label     = "空操作节点";
            Noop.NodeType  = NodeType.Action;
            Noop.Describe  = "空操作节点";
            AddClass(Noop);

            //输出Log节点
            NodeDefine Log = new NodeDefine();
            Log.ClassType = "Log";
            Log.Label     = "输出节点";
            Log.NodeType  = NodeType.Action;
            Log.Describe  = "输出log节点";
            Log.AddField(new NodeField()
            {
                FieldName = "Content", Label = "输出内容", FieldType = FieldType.StringField, Describe = "输出的内容", Show = true
            });
            AddClass(Log);

            #endregion
        }