Пример #1
0
        static void GenCSImplement()
        {
            var str = File.ReadAllText("./code");
            Dictionary <string, LinkedList <string> > dict = new Dictionary <string, LinkedList <string> >();
            List <ClassOfThem> alllist = new List <ClassOfThem>();

            foreach (Match match in firstRegex.Matches(str))
            {
                var retValue = match.Groups[1].Value;
                if (retValue != "bool4" && retValue != "void")
                {
                    throw new Exception("retValue" + retValue);
                }
                var funcName = "wrap_love_dll_" + match.Groups[2].Value;
                var tsd      = new TypeStructDefine(match.Groups[2].Value);

                var li = alllist.Find(item => item.className == tsd.topName);
                if (li == null)
                {
                    li = new ClassOfThem(tsd.topName);
                    alllist.Add(li);
                }

                var paramList = paramsRegex.Matches("(" + match.Groups[3].Value)
                                .Select(m => new Params(m.Groups[3].Value, m.Groups[4].Value, m.Groups[5].Value));
                var line = CSDLLImplementTemplate(funcName, tsd, paramList);
                li.list.AddLast(line);
            }

            List <string> sortIndex = new List <string> {
                "Body",
                "Contact",
                "Fixture",
                "Shape",
                "Joint",
                "World",
                "physics",
                "ChainShape",
                "CircleShape",
                "EdgeShape",
                "PolygonShape",
                "DistanceJoint",
                "FrictionJoint",
                "GearJoint",
                "MotorJoint",
                "MouseJoint",
                "PrismaticJoint",
                "PulleyJoint",
                "RevoluteJoint",
                "WeldJoint",
                "WheelJoint",
            };

            var lll = alllist
                      .Select(a => a)
                      .OrderBy(ca => sortIndex.IndexOf(ca.className));

            foreach (var c in lll)
            {
                var comeFrom = "LoveObject";
                if (c.className != "Shape" && c.className.EndsWith("Shape"))
                {
                    comeFrom = "Shape";
                }
                if (c.className != "Joint" && c.className.EndsWith("Joint"))
                {
                    comeFrom = "Joint";
                }

                Console.WriteLine($"public class {c.className}: {comeFrom}");
                Console.WriteLine("{");
                Console.WriteLine("    /// <summary>");
                Console.WriteLine("    /// disable construct");
                Console.WriteLine("    /// </summary>");
                Console.WriteLine($"    protected {c.className}() {{ }}");
                Console.WriteLine(string.Join("\n", c.list));
                Console.WriteLine("}");
            }
        }
Пример #2
0
        /// <param name="csRetType">bool or void</param>
        /// <param name="funcName">wrap_love_dll_xxxxxxxxxxxxx</param>
        /// <param name="paramsDef">out IntPtr p, Vector4[] colorarray, int colorarray_length</param>
        /// <param name="paramsInput">out p, colorarray, colorarray_length</param>
        static string CSDLLImplementTemplate(string funcName, TypeStructDefine tsd, IEnumerable <Params> prs)
        {
            SplitByInputAndOutput(prs, out var inPrs, out var outPrs);

            if (tsd.isType)
            {
                if (nameCppToCSTypeDict.ContainsKey(prs.First(p => true).TypeString))
                {
                    throw new Exception("type first is not IntPtr !");
                }

                if (outPrs.Count() == 0) // no return value, type of them
                {
                    var ppp       = prs.Skip(1);
                    var paramsDef = string.Join(", ", ppp.Select(p => p.ToDefString()));
                    var inputDef  = string.Join(", ", ppp.Select(p => p.ToInputString()).Prepend("p"));

                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine($"    public void {FuncStrHeadToUpper(tsd.methodName)}({paramsDef})");
                    sb.AppendLine("    {");
                    sb.AppendLine($"        Love2dDll.{funcName}({inputDef});");
                    sb.AppendLine("    }");
                    return(sb.ToString());
                }
                else if (outPrs.Count() == 1) // no return value, type of them
                {
                    var ppp       = inPrs.Skip(1);
                    var paramsDef = string.Join(", ", ppp.Select(p => p.ToDefString()));
                    var inputDef  = string.Join(", ", ppp.Select(p => p.ToInputString()).Prepend("p"));
                    var outppp    = outPrs.First(p => true);

                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine($"    public {outppp.ToCSParams().TypeString} {FuncStrHeadToUpper(tsd.methodName)}({paramsDef})");
                    sb.AppendLine("    {");
                    sb.AppendLine($"        {outppp.ToCSParams().TypeString} {outppp.ValueString};");
                    sb.AppendLine($"        Love2dDll.{funcName}({inputDef}, out {outppp.ValueString});");
                    sb.AppendLine($"        return {outppp.ValueString};");
                    sb.AppendLine("    }");
                    return(sb.ToString());
                }
            }
            else
            {
                if (outPrs.Count() == 0) // no return value, type of them
                {
                    var ppp       = prs;
                    var paramsDef = string.Join(", ", ppp.Select(p => p.ToDefString()));
                    var inputDef  = string.Join(", ", ppp.Select(p => p.ToInputString()));

                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine($"    public static void {FuncStrHeadToUpper(tsd.methodName)}({paramsDef})");
                    sb.AppendLine("    {");
                    sb.AppendLine($"        Love2dDll.{funcName}({inputDef});");
                    sb.AppendLine("    }");
                    return(sb.ToString());
                }
                else if (outPrs.Count() == 1) // no return value, type of them
                {
                    var ppp       = inPrs;
                    var paramsDef = string.Join(", ", ppp.Select(p => p.ToDefString()));
                    var inputDef  = string.Join(", ", ppp.Select(p => p.ToInputString()));
                    if (!"".Equals(inputDef))
                    {
                        inputDef += ", ";
                    }

                    var outppp = outPrs.First(p => true);

                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine($"    public static {outppp.ToCSParams().TypeString} {FuncStrHeadToUpper(tsd.methodName)}({paramsDef})");
                    sb.AppendLine("    {");
                    sb.AppendLine($"        {outppp.ToCSParams().TypeString} {outppp.ValueString};");
                    sb.AppendLine($"        Love2dDll.{funcName}({inputDef}out {outppp.ValueString});");
                    sb.AppendLine($"        return {outppp.ValueString};");
                    sb.AppendLine("    }");
                    return(sb.ToString());
                }
            }

            return("    // TODO: finishe function " + funcName);
        }