public static bool IsAgentPtr(string typeName) { if (DataCppExporter.IsPtr(typeName)) { typeName = DataCppExporter.GetBasicGeneratedNativeType(typeName); typeName = typeName.Replace("*", ""); typeName = typeName.Trim(); return(Plugin.IsAgentDerived(typeName, "Agent")); } return(false); }
public static void GenerateClassMember(Behaviac.Design.MethodDef method, StreamWriter stream, string indent, string var) { for (int i = 0; i < method.Params.Count; ++i) { // const value if (!method.Params[i].IsProperty && !method.Params[i].IsPar) { string basicNativeType = DataCppExporter.GetBasicGeneratedNativeType(method.Params[i].NativeType); if (DataCppExporter.IsPtr(basicNativeType) && !DataCppExporter.IsAgentPtr((basicNativeType))) { basicNativeType = basicNativeType.Replace("*", ""); basicNativeType = basicNativeType.Trim(); } string param = var + "_p" + i; stream.WriteLine("{0}\t\t{1} {2};", indent, basicNativeType, param); } } }
public static string GenerateCode(Behaviac.Design.MethodDef method, StreamWriter stream, string indent, string typename, string var, string caller) { string allParamTypes = string.Empty; string allParams = string.Empty; for (int i = 0; i < method.Params.Count; ++i) { string nativeType = DataCppExporter.GetGeneratedNativeType(method.Params[i].NativeType); bool isPointRefType = nativeType.EndsWith("*&"); string basicNativeType = DataCppExporter.GetBasicGeneratedNativeType(nativeType); string param = (string.IsNullOrEmpty(var) ? caller : var) + "_p" + i; string paramBasicType = basicNativeType; if (!isPointRefType && DataCppExporter.IsPtr(paramBasicType)) { paramBasicType = paramBasicType.Replace("*", ""); paramBasicType = paramBasicType.Trim(); } allParamTypes += ", " + paramBasicType; if (method.Params[i].IsProperty) // property { param = ParameterCppExporter.GenerateCode(method.Params[i], stream, indent, basicNativeType, string.Empty, param); if (!isPointRefType && DataCppExporter.IsPtr(basicNativeType)) { param = "*" + param; } } else { if (method.Params[i].IsPar) // par { ParameterCppExporter.GenerateCode(method.Params[i], stream, indent, basicNativeType, param, caller); if (!isPointRefType && DataCppExporter.IsPtr(basicNativeType)) { param = "*" + param; } } else // const value { object obj = method.Params[i].Value; if (obj != null) { Type type = obj.GetType(); if (Plugin.IsCustomClassType(type) && !DesignerStruct.IsPureConstDatum(obj, method, method.Params[i].Name)) { StructCppExporter.GenerateCode(obj, stream, indent, param, method, method.Params[i].Name); } } if (!isPointRefType && DataCppExporter.IsAgentPtr(basicNativeType)) { param = "*" + param; } } } if (i > 0) { allParams += ", "; } allParams += param; } string agentName = "pAgent"; if (method.Owner != Behaviac.Design.VariableDef.kSelf) { agentName = "pAgent_" + caller; stream.WriteLine("{0}Agent* {1} = Agent::GetInstance(\"{2}\", pAgent->GetContextId());", indent, agentName, method.Owner); stream.WriteLine("{0}BEHAVIAC_ASSERT({1});", indent, agentName); } //string retStr = string.Format("(({0}*){1})->{2}({3})", method.ClassName, agentName, method.Name, allParams); string nativeReturnType = DataCppExporter.GetGeneratedNativeType(method.NativeReturnType); string retStr = string.Format("(({0}*){1})->_Execute_Method_<{2}METHOD_TYPE_{3}, {4}{5} >({6})", method.ClassName, agentName, getNamespace(method.ClassName), method.Name.Replace("::", "_"), nativeReturnType, allParamTypes, allParams); if (!string.IsNullOrEmpty(var)) { stream.WriteLine("{0}{1} {2} = {3};", indent, nativeReturnType, var, retStr); } return(retStr); }