Пример #1
0
 public CodeExpression GetLinkFromParamName(CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     if (!mCtrlValue_In.HasLink)
     {
         return(null);
     }
     return(mCtrlValue_In.GetLinkedObject(0).GCode_CodeDom_GetValue(mCtrlValue_In.GetLinkedPinControl(0), context));
 }
Пример #2
0
        public GenerateCodeContext_Method Copy()
        {
            GenerateCodeContext_Method ret = new GenerateCodeContext_Method(ClassContext, Method);

            ret.GenerateNext    = GenerateNext;
            ret.ReturnValueType = ReturnValueType;
            return(ret);
        }
Пример #3
0
 public override Type GCode_GetType(LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     if (element == null || element == mCountOutPin)
     {
         return(typeof(Int32));
     }
     else if (element == mArrayInPin)
     {
         if (mArrayInPin.HasLink)
         {
             return(mArrayInPin.GetLinkedObject(0).GCode_GetType(mArrayInPin.GetLinkedPinControl(0), context));
         }
         return(typeof(object));
     }
     else
     {
         throw new InvalidOperationException();
     }
 }
Пример #4
0
        async System.Threading.Tasks.Task GenerateCode(CodeTypeDeclaration codeClass, CodeGenerateSystem.Base.GenerateCodeContext_Class classContext)
        {
            if (mLinkedNodesContainer == null)
            {
                await InitializeLinkedNodesContainer();
            }

            var methodContext = new CodeGenerateSystem.Base.GenerateCodeContext_Method(classContext, null);

            methodContext.IsDelegateInvokeMethod = true;
            methodContext.DelegateMethodName     = MethodName;

            var assist = this.HostNodesContainer.HostControl as Macross.NodesControlAssist;

            Macross.NodesControlAssist.ProcessData processData;
            if (assist.ProcessDataDic.TryGetValue(mLinkedNodesContainer.GUID, out processData))
            {
                methodContext.MethodGenerateData = new CodeGenerateSystem.Base.MethodGenerateData();
                foreach (var item in processData.FunctionVariableCategoryItems)
                {
                    var pro = item.PropertyShowItem as Macross.VariableCategoryItemPropertys;
                    if (pro == null)
                    {
                        continue;
                    }
                    var paramData = new CodeGenerateSystem.Base.MethodLocalParamData()
                    {
                        ParamType = pro.VariableType.GetActualType(),
                        ParamName = pro.VariableName,
                    };
                    methodContext.MethodGenerateData.LocalParams.Add(paramData);
                }
            }

            foreach (var ctrl in mLinkedNodesContainer.CtrlNodeList)
            {
                if (ctrl is CodeDomNode.MethodCustom)
                {
                    await ctrl.GCode_CodeDom_GenerateCode(codeClass, null, null, methodContext);
                }
            }
        }
Пример #5
0
        public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            if (element == null || element == mReturnValueHandle)
            {
                return("FuncRetValue_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id));
            }
            else
            {
                stParamData valData;
                if (mOutValueDataDictionary.TryGetValue(element, out valData))
                {
                    if (valData.mStrAttribute == "out")
                    {
                        return("FuncTempValue_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id) + "_" + valData.mPos);
                    }
                    else
                    {
                        var lOI = valData.mInElement;
                        if (lOI.HasLink)
                        {
                            return(lOI.GetLinkedObject(0, true).GCode_GetValueName(lOI.GetLinkedPinControl(0, true), context));
                        }
                        else
                        {
                            return("FuncTempValue_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id) + "_" + valData.mPos);
                        }
                    }
                }
            }

            return(base.GCode_GetValueName(element, context));
        }
 public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return("FinalTransitionResult");
 }
Пример #7
0
        public override void GCode_GenerateCode(ref string strDefinitionSegment, ref string strSegment, int nLayer, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            string strTab = GCode_GetTabString(nLayer);
            string strIdt = "";

            // 所有的out和inout需要转成对应的类型传参然后再赋值回来
            foreach (var pardata in mInParamDataList)
            {
                if (!pardata.mStrType.Contains("half"))
                {
                    continue;
                }

                if (pardata.mStrAttribute == "out")
                {
                    //strIdt += $"{strTab}{pardata.mStrType} {pardata.mStrName}_{EngineNS.Editor.Assist.GetValuedGUIDString(Id)};\r\n";
                }
                else if (pardata.mStrAttribute == "inout")
                {
                    strIdt += $"{strTab}{pardata.mStrName}_{EngineNS.Editor.Assist.GetValuedGUIDString(Id)}";
                    var lOI = pardata.mInElement;
                    if (lOI.HasLink)
                    {
                        lOI.GetLinkedObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, lOI.GetLinkedPinControl(0, true), context);
                        var linkVarName = lOI.GetLinkedObject(0, true).GCode_GetValueName(lOI.GetLinkedPinControl(0, true), context);
                        var linkType    = lOI.GetLinkType(0, true);
                        switch (pardata.mStrType)
                        {
                        case "float":
                        case "float1":
                        case "half":
                        case "half1":
                            if (linkType != enLinkType.Float1)
                            {
                                linkVarName += ".x";
                            }
                            break;

                        case "float2":
                        case "half2":
                            if (linkType != enLinkType.Float2)
                            {
                                linkVarName += ".xy";
                            }
                            break;

                        case "float3":
                        case "half3":
                            if (linkType != enLinkType.Float3)
                            {
                                linkVarName += ".xyz";
                            }
                            break;
                        }
                        strIdt += $" = ({pardata.mStrType}){linkVarName};\r\n";
                    }
                    else
                    {
                        // 写入默认值
                        if (mTemplateClassInstance != null)
                        {
                            var property = mTemplateClassInstance.GetType().GetProperty(pardata.mStrName);
                            if (property != null)
                            {
                                var propertyValue = property.GetValue(mTemplateClassInstance);
                                var value         = Program.GetTypeValueString(pardata.mStrType, propertyValue);
                                strIdt += $" = {value};\r\n";
                            }
                        }
                    }
                }
            }
            ;

            strIdt += strTab + mStrFuncName + "(";
            foreach (var pardata in mInParamDataList)
            {
                if (pardata.mStrAttribute == "inout" || pardata.mStrAttribute == "out")
                {
                    if (pardata.mStrType.Contains("half"))
                    {
                        strIdt += $"{pardata.mStrName}_{EngineNS.Editor.Assist.GetValuedGUIDString(Id)},";
                    }
                    else
                    {
                        strIdt += GCode_GetValueName(pardata.mOutElement, context) + ",";
                    }
                }
                else if (pardata.mStrAttribute == "in" || string.IsNullOrEmpty(pardata.mStrAttribute))
                {
                    var lOI = pardata.mInElement;
                    if (lOI.HasLink)
                    {
                        lOI.GetLinkedObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, lOI.GetLinkedPinControl(0, true), context);
                        var linkVarName = lOI.GetLinkedObject(0, true).GCode_GetValueName(lOI.GetLinkedPinControl(0, true), context);
                        var linkType    = lOI.GetLinkType(0, true);
                        switch (pardata.mStrType)
                        {
                        case "float":
                        case "float1":
                        case "half":
                        case "half1":
                            if (linkType != enLinkType.Float1)
                            {
                                linkVarName += ".x";
                            }
                            break;

                        case "float2":
                        case "half2":
                            if (linkType != enLinkType.Float2)
                            {
                                linkVarName += ".xy";
                            }
                            break;

                        case "float3":
                        case "half3":
                            if (linkType != enLinkType.Float3)
                            {
                                linkVarName += ".xyz";
                            }
                            break;
                        }
                        strIdt += $"({pardata.mStrType}){linkVarName},";
                    }
                    else
                    {
                        // 写入默认值
                        if (mTemplateClassInstance != null)
                        {
                            var property = mTemplateClassInstance.GetType().GetProperty(pardata.mStrName);
                            if (property != null)
                            {
                                var propertyValue = property.GetValue(mTemplateClassInstance);
                                var value         = Program.GetTypeValueString(pardata.mStrType, propertyValue);
                                strIdt += $"{value},";
                            }
                        }
                    }
                }
            }


            // 去掉最后一个","
            strIdt  = strIdt.Remove(strIdt.Length - 1);
            strIdt += ");\r\n";

            foreach (var pardata in mOutValueDataDictionary.Values)
            {
                if (!pardata.mStrType.Contains("half"))
                {
                    continue;
                }

                var tagType = pardata.mStrType.Replace("half", "float");
                // 赋值
                switch (pardata.mStrAttribute)
                {
                case "out":
                case "inout":
                {
                    strIdt += $"{strTab}{GCode_GetValueName(pardata.mOutElement, context)} = ({tagType}){pardata.mStrName}_{EngineNS.Editor.Assist.GetValuedGUIDString(Id)};\r\n";
                }
                break;
                }
            }

            if (mReturnValueHandle != null)
            {
                var pardata = mOutValueDataDictionary[mReturnValueHandle];
                if (pardata.mStrType.Contains("half"))
                {
                    var finalType = pardata.mStrType.Replace("half", "float");
                    strIdt = $"{finalType} {GCode_GetValueName(null, context)} = ({finalType}){strIdt}";
                }
                else
                {
                    strIdt = pardata.mStrType + " " + GCode_GetValueName(null, context) + " = " + strIdt;
                }
            }

            //strIdt = strTab + strIdt;

            // 函数输出参数放入声明段,重复的不再添加
            foreach (var pardata in mOutValueDataDictionary.Values)
            {
                if (pardata.mStrAttribute == "out" || pardata.mStrAttribute == "inout")
                {
                    var finalType   = pardata.mStrType.Replace("half", "float");
                    var strValueIdt = finalType + " " + GCode_GetValueName(pardata.mOutElement, context) + " = " + Program.GetInitialNewString(finalType) + ";\r\n";
                    if (!strDefinitionSegment.Contains(strValueIdt))
                    {
                        strDefinitionSegment += "    " + strValueIdt;
                    }

                    var tempIdt = $"{strTab}{pardata.mStrType} {pardata.mStrName}_{EngineNS.Editor.Assist.GetValuedGUIDString(Id)};\r\n";
                    if (!strDefinitionSegment.Contains(tempIdt))
                    {
                        strDefinitionSegment += "    " + tempIdt;
                    }
                }
            }

            // 判断该段代码是否调用过,同样的参数调用过则不再调用该函数
            //if (!strSegment.Contains(strIdt))
            if (!Program.IsSegmentContainString(strSegment.Length - 1, strSegment, strIdt))
            {
                strSegment += strIdt;
            }

            base.GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, element, context);
        }
Пример #8
0
 public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return(typeof(ParticleShapeMeshControl));
 }
 public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return("BehaviorTree_PlayAnimationActionControl");
 }
Пример #10
0
        public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            string strValueName = "";

            if (element == null || element == ResultHandle)
            {
                strValueName = "Value_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id);
            }

            return(strValueName);
        }
Пример #11
0
 public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return(typeof(AnimStateTransitionControl));
 }
Пример #12
0
        public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            if (element == TextureLink)
            {
                return(GetTextureSampName());
            }
            else if (element == RGBALink)
            {
                return(GetTextureName() + "_CUBE");
            }
            else if (element == RGBLink)
            {
                return(GetTextureName() + "_CUBE.xyz");
            }
            else if (element == RLink)
            {
                return(GetTextureName() + "_CUBE.x");
            }
            else if (element == GLink)
            {
                return(GetTextureName() + "_CUBE.y");
            }
            else if (element == BLink)
            {
                return(GetTextureName() + "_CUBE.z");
            }
            else if (element == ALink)
            {
                return(GetTextureName() + "_CUBE.w");
            }

            return(base.GCode_GetValueName(element, context));
        }
Пример #13
0
        public override void GCode_GenerateCode(ref string strDefinitionSegment, ref string strSegment, int nLayer, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            var strValueIdt = "float4 " + GetTextureName() + "_CUBE = float4(0,0,0,0);\r\n";

            if (!strDefinitionSegment.Contains(strValueIdt))
            {
                strDefinitionSegment += "    " + strValueIdt;
            }

            var strTab = GCode_GetTabString(nLayer);

            string uvName = "mtl.mLocalPos.xyz";

            if (UVLink_3D.HasLink)
            {
                UVLink_3D.GetLinkedObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, element, context);
                uvName = UVLink_3D.GetLinkedObject(0, true).GCode_GetValueName(UVLink_3D.GetLinkedPinControl(0, true), context) + ".xyz";
            }
            var assignStr = strTab + GetTextureName() + "_CUBE = vise_texCUBE(" + GetTextureName() + "," + GetTextureSampName() + "," + uvName + ");\r\n";

            // 这里先不做判断,连线中有if的情况下会导致问题
            //if (!strSegment.Contains(assignStr))
            if (!Program.IsSegmentContainString(strSegment.Length - 1, strSegment, assignStr))
            {
                strSegment += assignStr;
            }
        }
 public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return(typeof(BehaviorTree_ConditionFuncDecoratorControl));
 }
Пример #15
0
        public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            if (element == TextureLink)
            {
                return("sampler2D");
            }
            else if (element == RGBALink)
            {
                return("float4");
            }
            else if (element == RGBLink)
            {
                return("float3");
            }
            else if (element == RLink)
            {
                return("float1");
            }
            else if (element == GLink)
            {
                return("float1");
            }
            else if (element == BLink)
            {
                return("float1");
            }
            else if (element == ALink)
            {
                return("float1");
            }

            return(base.GCode_GetTypeString(element, context));
        }
 public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return("BehaviorTree_ConditionFuncDecoratorControl");
 }
Пример #17
0
        public override CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null)
        {
            string current = "";

            if (preNodeContext?.NeedDereferencePoint == true && ElementType.IsPointer)
            {
                current = $"(*current_{EngineNS.Editor.Assist.GetValuedGUIDString(this.Id)})";
            }
            else
            {
                current = "current_" + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id);
            }
            if (element == mCtrlArrayElement)
            {
                return(new CodeSnippetExpression(current));
            }
            else if (element == mCtrlArrayIndex)
            {
                return(new CodeSnippetExpression($"index_{EngineNS.Editor.Assist.GetValuedGUIDString(this.Id)}"));
            }
            else if (element == mCtrlDicKey)
            {
                current += ".Key";
                return(new CodeSnippetExpression(current));
            }
            else if (element == mCtrlDicValue)
            {
                current += ".Value";
                return(new CodeSnippetExpression(current));
            }
            return(base.GCode_CodeDom_GetValue(element, context));
        }
Пример #18
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            if (element == mCtrlArrayElement || element == mCtrlArrayIndex || element == mCtrlDicKey || element == mCtrlDicValue)
            {
                return;
            }

            var param = CSParam as ForeachNodeConstructionParams;

            if (mCtrlArrayIn.HasLink)
            {
                var valuedGUID = EngineNS.Editor.Assist.GetValuedGUIDString(this.Id);
                var array      = "param_" + valuedGUID;
                var current    = "current_" + valuedGUID;

                if (!mCtrlArrayIn.GetLinkedObject(0, true).IsOnlyReturnValue)
                {
                    await mCtrlArrayIn.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlArrayIn.GetLinkedPinControl(0, true), context);
                }
                var arrayExpression = mCtrlArrayIn.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlArrayIn.GetLinkedPinControl(0, true), context);

                codeStatementCollection.Add(new CodeVariableDeclarationStatement("var", array, arrayExpression));

                // 调试的代码
                var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection);
                CodeDomNode.BreakPoint.BreakCodeStatement(codeClass, debugCodes, HostNodesContainer.GUID, Id);
                CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes);

                var idxStr = $"index_{valuedGUID}";

                string value = "";
                switch (param.LoopValueType)
                {
                case ForeachNodeConstructionParams.enLoopValueType.Dictionary:
                    value  = "        foreach (var " + current + " in " + array + ")\r\n";
                    value += "        {";
                    codeStatementCollection.Add(new CodeSnippetStatement(value));
                    break;

                case ForeachNodeConstructionParams.enLoopValueType.IntPtr:
                {
                    var countStr = $"count_{ valuedGUID}";
                    if (mCountDeclaration == null || !codeStatementCollection.Contains(mCountDeclaration))
                    {
                        var countType = typeof(Int32);
                        if (mCtrlArrayCount.HasLink)
                        {
                            mCountDeclaration = new CodeVariableDeclarationStatement(countType, countStr);
                            mCountDeclaration.InitExpression = new CodeGenerateSystem.CodeDom.CodeCastExpression(countType, mCtrlArrayCount.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlArrayCount.GetLinkedPinControl(0, true), context));
                            codeStatementCollection.Add(mCountDeclaration);
                        }
                        else
                        {
                            mCountDeclaration = new CodeVariableDeclarationStatement(countType, countStr);
                            mCountDeclaration.InitExpression = new CodeGenerateSystem.CodeDom.CodeCastExpression(countType, new CodePrimitiveExpression(CountDefaultValue));
                            codeStatementCollection.Add(mCountDeclaration);
                        }
                    }

                    value  = $"        for (int {idxStr} = 0; {idxStr} < {countStr}; {idxStr}++)";
                    value += "        {";
                    codeStatementCollection.Add(new CodeSnippetStatement(value));
                    codeStatementCollection.Add(new CodeVariableDeclarationStatement(ElementType, current, new CodeVariableReferenceExpression($"{array}[{idxStr}]")));
                }
                break;

                case ForeachNodeConstructionParams.enLoopValueType.Array:
                    value  = $"        for (int {idxStr} = 0; {idxStr} < {array}.Length; {idxStr}++)";
                    value += "        {";
                    codeStatementCollection.Add(new CodeSnippetStatement(value));
                    codeStatementCollection.Add(new CodeVariableDeclarationStatement(ElementType, current, new CodeVariableReferenceExpression($"{array}[{idxStr}]")));
                    break;

                case ForeachNodeConstructionParams.enLoopValueType.List:
                    value  = $"        for (int {idxStr} = 0; {idxStr} < {array}.Count; {idxStr}++)";
                    value += "        {";
                    codeStatementCollection.Add(new CodeSnippetStatement(value));
                    codeStatementCollection.Add(new CodeVariableDeclarationStatement(ElementType, current, new CodeVariableReferenceExpression($"{array}[{idxStr}]")));
                    break;
                }


                if (mCtrlMethodLink_LoopBody.HasLink)
                {
                    //if (!mCtrlMethodLink_LoopBody.GetLinkedObject(0, false).IsOnlyReturnValue)
                    await mCtrlMethodLink_LoopBody.GetLinkedObject(0, false).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlMethodLink_LoopBody.GetLinkedPinControl(0, false), context);
                }

                codeStatementCollection.Add(new CodeSnippetStatement("        }"));

                if (context.GenerateNext)
                {
                    if (mCtrlMethodLink_Completed.HasLink)
                    {
                        //if (!mCtrlMethodLink_Completed.GetLinkedObject(0, false).IsOnlyReturnValue)
                        await mCtrlMethodLink_Completed.GetLinkedObject(0, false).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlMethodLink_Completed.GetLinkedPinControl(0, false), context);
                    }
                }
            }
        }
Пример #19
0
        public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            stParamData valData;

            if (mOutValueDataDictionary.TryGetValue(element, out valData))
            {
                return(valData.mStrType);
            }

            return(base.GCode_GetTypeString(element, context));
        }
Пример #20
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            var param = CSParam as MethodInvoke_DelegateControlConstructionParams;

            if (mChildNodes.Count == 0)
            {
                // 不包含自定义参数,直接使用函数成员,减少lambda造成的gc
                var fieldName   = "lambda_" + MethodName;
                var lambdaField = new CodeMemberField(new CodeTypeReference(param.ParamInfo.ParameterType), fieldName);
                codeClass.Members.Add(lambdaField);

                var cc = codeClass as CodeGenerateSystem.CodeDom.CodeTypeDeclaration;
                if (cc == null)
                {
                    throw new InvalidOperationException("请使用 CodeGenerateSystem.CodeDom.CodeTypeDeclaration 替换 System.CodeDom.CodeTypeDeclaration");
                }
                cc.ConstructStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), fieldName), new CodeVariableReferenceExpression(MethodName)));
            }

            await GenerateCode(codeClass, context.ClassContext);
        }
Пример #21
0
        public override void GCode_GenerateCode(ref string strDefinitionSegment, ref string strSegment, int nLayer, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            string strTab = GCode_GetTabString(nLayer);

            if (ValueA == null || ValueA.GetLinkedObject(0, true) == null)
            {
                return;
            }

            string valueNameA;

            ValueA.GetLinkedObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, ValueA.GetLinkedPinControl(0, true), context);
            valueNameA = ValueA.GetLinkedObject(0, true).GCode_GetValueName(ValueA.GetLinkedPinControl(0, true), context);

            string valueNameB;

            ValueB.GetLinkedObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, ValueB.GetLinkedPinControl(0, true), context);
            valueNameB = ValueB.GetLinkedObject(0, true).GCode_GetValueName(ValueB.GetLinkedPinControl(0, true), context);

            var lOI = this.ValueAgtB.HasLink ? this.ValueAgtB : (ValueAeqB.HasLink ? ValueAeqB : (ValueAltB.HasLink ? ValueAltB : null));

            if (lOI == null)
            {
                return;
            }

            // 判断变量是否已经声明过了,没有声明过则进行声明
            string strInitString = "";
            string strValueType  = lOI.GetLinkedObject(0, true).GCode_GetTypeString(lOI.GetLinkedPinControl(0, true), context);

            strInitString = Program.GetInitialNewString(strValueType);
            var strValueIdt = strValueType + " " + GCode_GetValueName(null, context) + " = " + strInitString + ";\r\n";

            if (!strDefinitionSegment.Contains(strValueIdt))
            {
                strDefinitionSegment += "    " + strValueIdt;
            }

            var lo_AgtB = ValueAgtB.GetLinkedObject(0, true);   // A>B
            var lo_AeqB = ValueAeqB.GetLinkedObject(0, true);   // A==B
            var lo_AltB = ValueAltB.GetLinkedObject(0, true);   // A<B

            if (lo_AgtB != null)
            {
                lo_AgtB.GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer + 1, ValueAgtB.GetLinkedPinControl(0, true), context);
            }
            if (lo_AeqB != null && lo_AeqB != lo_AgtB)
            {
                lo_AeqB.GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer + 1, ValueAeqB.GetLinkedPinControl(0, true), context);
            }
            if (lo_AltB != null && lo_AltB != lo_AgtB && lo_AltB != lo_AeqB)
            {
                lo_AltB.GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer + 1, ValueAltB.GetLinkedPinControl(0, true), context);
            }
            // A>B
            if (ValueAgtB.HasLink)
            {
                strSegment += strTab + "if( " + valueNameA + " > " + valueNameB + ")\r\n";
                strSegment += strTab + "{\r\n";
                //string strIFSegment = "";
                //lOIAgtB.GetLinkObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strIFSegment, nLayer + 1, lOIAgtB.GetLinkElement(0, true));
                //strSegment += strIFSegment;
                strSegment += GCode_GetTabString(nLayer + 1) + GCode_GetValueName(null, context) + " = " + lo_AgtB.GCode_GetValueName(ValueAgtB.GetLinkedPinControl(0, true), context) + ";\r\n";
                strSegment += strTab + "}\r\n";
            }
            // A==B
            if (ValueAeqB.HasLink)
            {
                //if (ValueAltB.HasLink)
                //{
                //    string strIfType;
                //    if (ValueAgtB.HasLink)
                //        strIfType = "else if";
                //    else
                //        strIfType = "if";
                //    strSegment += strTab + strIfType + "( " + valueNameA + " == " + valueNameB + ")\r\n";
                //}
                //else
                //    strSegment += strTab + "else\r\n";
                strSegment += strTab + "if( " + valueNameA + " == " + valueNameB + ")\r\n";
                strSegment += strTab + "{\r\n";
                //string strIFSegment = "";
                //lOIAeqB.GetLinkObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strIFSegment, nLayer + 1, lOIAeqB.GetLinkElement(0, true));
                //strSegment += strIFSegment;
                strSegment += GCode_GetTabString(nLayer + 1) + GCode_GetValueName(null, context) + " = " + lo_AeqB.GCode_GetValueName(ValueAeqB.GetLinkedPinControl(0, true), context) + ";\r\n";
                strSegment += strTab + "}\r\n";
            }
            // A<B
            if (ValueAltB.HasLink)
            {
                //if (ValueAgtB.HasLink || ValueAeqB.HasLink)
                //    strSegment += strTab + "else\r\n";
                //else
                //    strSegment += strTab + "if( " + valueNameA + " < " + valueNameB + ")\r\n";
                strSegment += strTab + "if( " + valueNameA + " < " + valueNameB + ")\r\n";
                strSegment += strTab + "{\r\n";
                //string strIFSegment = "";
                //lOIAltB.GetLinkObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strIFSegment, nLayer + 1, lOIAltB.GetLinkElement(0, true));
                //strSegment += strIFSegment;
                strSegment += GCode_GetTabString(nLayer + 1) + GCode_GetValueName(null, context) + " = " + lo_AltB.GCode_GetValueName(ValueAltB.GetLinkedPinControl(0, true), context) + ";\r\n";
                strSegment += strTab + "}\r\n";
            }
        }
Пример #22
0
 public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return(typeof(LALegIKControl));
 }
Пример #23
0
        public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            var lOI = ValueAgtB.HasLink ? ValueAgtB : (ValueAeqB.HasLink ? ValueAeqB : (ValueAltB.HasLink ? ValueAltB : null));

            if (lOI != null)
            {
                return(lOI.GetLinkedObject(0, true).GCode_GetTypeString(lOI.GetLinkedPinControl(0, true), context));
            }

            return(base.GCode_GetTypeString(element, context));
        }
Пример #24
0
        public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            var data = mMaterialDataDic[element];

            return("mtl." + data.mStrName);
        }
Пример #25
0
 public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null)
 {
     return(new System.CodeDom.CodeSnippetExpression("System.Math.Sin((System.DateTime.Now.Millisecond*0.001)*2*System.Math.PI)"));
 }
Пример #26
0
        public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
        {
            var data = mMaterialDataDic[element];

            return(data.mStrType);
        }
Пример #27
0
 public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return("LALegIKControl");
 }
Пример #28
0
 public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return("mtl.mLocalBinorm.w");
 }
Пример #29
0
 public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null)
 {
     return(null);
 }
 public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context)
 {
     return(typeof(BehaviorTree_PlayAnimationActionControl));
 }