コード例 #1
0
    public virtual void GenerateCode(LDtkWorld ldtkJson, LdtkGeneratorContext ctx, ICodeOutput output)
    {
        List <CompilationUnitFragment> fragments = new List <CompilationUnitFragment>();

        foreach (EnumDefinition ed in ldtkJson.Defs.Enums)
        {
            fragments.Add(GenerateEnum(ed, ctx));
        }

        foreach (EntityDefinition ed in ldtkJson.Defs.Entities)
        {
            ClassCompilationUnit entity = GenerateEntity(ed, ctx);
            fragments.Add(entity);

            if (ctx.CodeCustomizer != null)
            {
                ctx.CodeCustomizer.CustomizeEntity(entity, ed, ctx);
            }
        }

        ClassCompilationUnit level = GenerateLevel(ldtkJson, ctx);

        fragments.Add(level);

        if (ctx.CodeCustomizer != null)
        {
            ctx.CodeCustomizer.CustomizeLevel(level, ldtkJson, ctx);
        }

        output.OutputCode(fragments, ctx);
    }
コード例 #2
0
    private static void Run(Options options)
    {
        string outputDirectory = Path.GetDirectoryName(Path.GetFullPath(options.Output));

        Directory.CreateDirectory(outputDirectory);

        string[] files = Directory.GetFiles(outputDirectory);

        for (int i = 0; i < files.Length; i++)
        {
            File.Delete(files[i]);
        }

        LdtkTypeConverter typeConverter = new LdtkTypeConverter()
        {
            PointAsVector2 = options.PointAsVector2
        };

        LdtkGeneratorContext ctx = new LdtkGeneratorContext()
        {
            LevelClassName = options.LevelClassName,
            TypeConverter  = typeConverter
        };

        ctx.CodeSettings.Namespace = options.Namespace;

        ICodeOutput output;

        if (options.SingleFile)
        {
            SingleFileOutput singleFileOutput = new SingleFileOutput()
            {
                OutputDir = outputDirectory,
                Filename  = Path.GetFileNameWithoutExtension(options.Input)
            };
            output = singleFileOutput;
        }
        else
        {
            MultiFileOutput multiFileOutput = new MultiFileOutput()
            {
                PrintFragments = true,
                OutputDir      = outputDirectory,
            };
            output = multiFileOutput;
        }

        LDtkWorld ldtkWorld = JsonSerializer.Deserialize <LDtkWorld>(File.ReadAllText(options.Input), LDtkWorld.SerializeOptions);

        LdtkCodeGenerator cg = new LdtkCodeGenerator();

        cg.GenerateCode(ldtkWorld, ctx, output);
    }
コード例 #3
0
    public virtual ClassCompilationUnit GenerateLevel(LDtkWorld ldtkJson, LdtkGeneratorContext ctx)
    {
        ClassCompilationUnit levelClass = new ClassCompilationUnit()
        {
            Name = ctx.LevelClassName
        };

        foreach (FieldDefinition fd in ldtkJson.Defs.LevelFields)
        {
            levelClass.Fields.Add(ctx.TypeConverter.ToCompilationUnitField(fd, ctx));
        }

        return(levelClass);
    }
コード例 #4
0
 public virtual void CustomizeLevel(ClassCompilationUnit level, LDtkWorld ldtkJson, LdtkGeneratorContext ctx)
 {
 }