コード例 #1
0
        public static string Execute(string[] commandArgs)
        {
            var options   = GenerationOptions.Parse(commandArgs);
            var processor = new GenerationProcessor(options);

            return(processor.Process());
        }
コード例 #2
0
    public GameObject ProcessRoom(Dictionary <Vector2Int, GenTile> tiles)
    {
        GameObject root = new GameObject {
            name = "Room"
        };

        foreach (Vector2Int v in tiles.Keys)
        {
            ExtendedTileType type = GetRandomGroundType();
            int rotation          = 0;
            switch (tiles[v].type)
            {
            case Room.TileType.WALL:
                type     = GetCorrectWallType(tiles, v);
                rotation = GetCorrectWallRotation(tiles, v, type);
                break;

            case Room.TileType.GROUND:
                type = GetRandomGroundType();
                break;

            case Room.TileType.DOOR:
                type     = GetCorrectDoorType(tiles, v);
                rotation = GetCorrectDoorRotation(type, tiles, v);
                break;

            case Room.TileType.ROCK:
                type = GetCorrectRockType(tiles, v);
                break;
            }
            GameObject go = CreateGOFromType(v, rotation, tiles[v].type, type, root);
            // Todo dirty hack
            if (go.tag == "door")
            {
                go.GetComponent <Door>().SetToOuter(GenerationProcessor.GetDirectionVector(tiles[v].position));
            }
        }
        return(root);
    }
コード例 #3
0
        public static async Task GenerateClientAsync(ConsoleOptions options)
        {
            var config = !options.ConfigCreate
                ? await Config.ReadFromAsync(options.Config)
                : await AutoConfigurator.CreateAndWriteConfig(options.Config);

            if (!config.Validate(out var configErrors))
            {
                var resultMessage = string.Join(
                    Environment.NewLine,
                    new[] { "wrong config file provided.", "Config file errors:" }.Concat(configErrors));
                throw new GeneratorInvalidOperationException(resultMessage);
            }

            var storage = new FromAssembliesGeneratorStore(new []
            {
                typeof(DotNetCoreGenerator).Assembly,
            });
            var schemaLoader = new FromUrlSchemaReader(config.SchemaUri, config.InnerLevelOfType);
            var writer       = CreateWriterFactory(config);

            var processor = new GenerationProcessor(storage, schemaLoader, writer);
            await processor.ProcessAsync(config.Generator, config.CreateGeneratorContext());
        }
コード例 #4
0
    private void Init()
    {
        // Generation
        DungeonGenerator    dg = new DungeonGenerator();
        GenerationProcessor gp = new GenerationProcessor(genPrefabs);

        dg.Generate();

        // Start room
        GameObject goStart = gp.ProcessRoom(dg.start.tiles);

        goStart.name = "Start";
        List <Transform> lt       = new List <Transform>(goStart.GetComponentsInChildren <Transform>());
        GameObject       doorRoot = new GameObject();

        doorRoot.name = "Doors";
        doorRoot.transform.SetParent(goStart.transform);
        start = goStart.AddComponent <Room>();
        start.SetCenter(dg.start.GetCenter());
        start.SetPosition(dg.start.roomPosition);
        lt = lt.FindAll(x => x.tag == "door");
        lt.ForEach(x => {
            x.SetParent(doorRoot.transform);
            x.gameObject.GetComponent <Door>().SetParent(start);
        });
        start.SetDoorsRootObject(doorRoot);

        // Spawnpoint
        GameObject spawnpointRoot = new GameObject();

        spawnpointRoot.name = "Spawnpoints";
        spawnpointRoot.transform.SetParent(goStart.transform);
        spawnpointRoot.transform.position = new Vector3(dg.start.roomPosition.x, dg.start.roomPosition.y, 0);
        GameObject spawn = new GameObject();

        spawn.transform.SetParent(spawnpointRoot.transform);
        spawn.transform.position = new Vector3(dg.start.GetCenter().x, dg.start.GetCenter().y, 0);
        start.SetSpawnPointsRootObject(spawnpointRoot);

        start.Reload();

        start.transform.SetParent(mapRoot.transform);

        // Finish room
        GameObject goFinish = gp.ProcessRoom(dg.end.tiles);

        goFinish.name = "Finish";
        List <Transform> ltf       = new List <Transform>(goFinish.GetComponentsInChildren <Transform>());
        GameObject       doorRootf = new GameObject();

        doorRootf.name = "Doors";
        doorRootf.transform.SetParent(goFinish.transform);
        ltf    = ltf.FindAll(x => x.tag == "door");
        finish = goFinish.AddComponent <Room>();
        finish.SetPosition(dg.end.roomPosition);
        finish.SetCenter(dg.end.GetCenter());
        ltf.ForEach(x => {
            x.SetParent(doorRootf.transform);
            x.gameObject.GetComponent <Door>().SetParent(finish);
        });
        finish.SetDoorsRootObject(doorRootf);

        // Spawnpoint
        GameObject fspawnpointRoot = new GameObject();

        fspawnpointRoot.name = "Spawnpoints";
        fspawnpointRoot.transform.SetParent(goStart.transform);
        fspawnpointRoot.transform.position = new Vector3(dg.end.roomPosition.x, dg.end.roomPosition.y, 0);
        GameObject fspawn = new GameObject();

        fspawn.transform.SetParent(fspawnpointRoot.transform);
        fspawn.transform.position = new Vector3(dg.end.GetCenter().x, dg.end.GetCenter().y, 0);
        finish.SetSpawnPointsRootObject(fspawnpointRoot);

        finish.Reload();
        finish.transform.SetParent(mapRoot.transform);

        // Other Rooms
        foreach (GenRoom gr in dg.rooms)
        {
            GameObject       groom = gp.ProcessRoom(gr.tiles);
            List <Transform> ltg   = new List <Transform>(groom.GetComponentsInChildren <Transform>());

            // Doors
            GameObject doorRootg = new GameObject();
            doorRootg.name = "Doors";
            doorRootg.transform.SetParent(groom.transform);
            Room grom = groom.AddComponent <Room>();
            grom.SetCenter(gr.GetCenter());
            grom.SetPosition(gr.roomPosition);
            ltg = ltg.FindAll(x => x.tag == "door");
            ltg.ForEach(x => {
                x.SetParent(doorRootg.transform);
                x.gameObject.GetComponent <Door>().SetParent(grom);
            });

            // Spawnpoints
            GameObject tSpawnpointRoot = new GameObject();
            tSpawnpointRoot.name = "Spawnpoints";
            tSpawnpointRoot.transform.SetParent(groom.transform);
            tSpawnpointRoot.transform.position = new Vector3(gr.roomPosition.x, gr.roomPosition.y, 0);
            foreach (Vector2Int v in gr.spawnpoints)
            {
                GameObject tspawn = new GameObject();
                tspawn.transform.SetParent(tSpawnpointRoot.transform);
                tspawn.transform.position = new Vector3(v.x, v.y, 0); // is this the center or the top left corner of a block?
            }

            grom.SetSpawnPointsRootObject(tSpawnpointRoot);
            grom.SetDoorsRootObject(doorRootg);
            grom.Reload();
            DungeonGenerator.GenerateObjective(grom);
            groom.transform.SetParent(mapRoot.transform);
        }

        // Hallways
        GameObject goHallways = gp.ProcessRoom(dg.path.tiles);

        goHallways.name = "Hallways";
        goHallways.AddComponent <Room>();
        goHallways.transform.SetParent(mapRoot.transform);
    }