public static string Execute(string[] commandArgs) { var options = GenerationOptions.Parse(commandArgs); var processor = new GenerationProcessor(options); return(processor.Process()); }
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); }
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()); }
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); }