private void BuildWallAndEntrance() { Recti boundry = new Recti(Boundry, Boundry, TileSize.x - 2 * Boundry, TileSize.z - 2 * Boundry); Vec2i entrance = new Vec2i(0, 0); for (int x = Boundry + 1; x < TileSize.x - Boundry - 1; x++) { Vec2i p1 = new Vec2i(x, Boundry + 1); if (entrance.QuickDistance(p1) > 4) { WoodSpikeWall wall1 = new WoodSpikeWall(); wall1.SetPosition(p1); AddObject(wall1, true); } Vec2i p2 = new Vec2i(x, TileSize.z - Boundry - 1); if (entrance.QuickDistance(p2) > 4) { WoodSpikeWall wall2 = new WoodSpikeWall(); wall2.SetPosition(p2); AddObject(wall2, true); } } for (int z = Boundry + 1; z < TileSize.z - Boundry - 1; z++) { Vec2i p1 = new Vec2i(Boundry + 1, z); if (p1.QuickDistance(entrance) > 4) { WoodSpikeWall wall1 = new WoodSpikeWall(); wall1.SetPosition(p1); AddObject(wall1, true); } Vec2i p2 = new Vec2i(TileSize.x - Boundry - 1, z); if (p2.QuickDistance(entrance) > 4) { WoodSpikeWall wall2 = new WoodSpikeWall(); wall2.SetPosition(p2); AddObject(wall2, true); } } for (int x = 0; x < TileSize.x; x++) { for (int z = 0; z < TileSize.z; z++) { SetTile(x, z, Tile.DIRT); } } }
public List <ChunkData> Generate(GenerationRandom genRan) { Vec2i tilebase = Shell.Position * World.ChunkSize; if (Shell.BanditCampLevel > 1 && Shell.Size.x > 3 && Shell.Size.z > 3) { //If this camp is large enough, generate a dungeon entrance. Vec2i localPos = new Vec2i(2, TileSize.z / 2 - 2); CaveDungeonEntrance entr = new CaveDungeonEntrance(tilebase + localPos, null, new WorldObjectMetaData(direction: new Vec2i(1, 0))); IMultiTileObjectChild[,] children = entr.GetChildren(); Objects[localPos.x, localPos.z] = entr; for (int x = 0; x < entr.Size.x; x++) { for (int z = 0; z < entr.Size.z; z++) { if (x == 0 && z == 0) { continue; } Objects[localPos.x + x, localPos.z + z] = children[x, z] as WorldObjectData; } } Debug.Log("Generated Bandit Camp with Dungeon at " + this.Shell.Position, Debug.CHUNK_STRUCTURE_GENERATION); Shell.SetDungeonEntrance(entr); entr.SetChunkStructure(Shell); } else { Debug.Log("Generated Bandit Camp no Dungeon at " + this.Shell.Position, Debug.CHUNK_STRUCTURE_GENERATION); } Objects[11, 11] = new LootSack(tilebase + new Vec2i(11, 11)); FinalLootChest = Objects[11, 11] as IInventoryObject; for (int x = 0; x < TileSize.x; x++) { for (int z = 0; z < TileSize.z; z++) { if (x == 0) { Objects[x, z] = new WoodSpikeWall(tilebase + new Vec2i(x, z)); } if (z == 0) { Objects[x, z] = new WoodSpikeWall(tilebase + new Vec2i(x, z)); } if (x == TileSize.x - 1 && z < TileSize.z / 2 - 2 && z > TileSize.z / 2 + 2) { Objects[x, z] = new WoodSpikeWall(tilebase + new Vec2i(x, z)); } if (z == TileSize.z - 1) { Objects[x, z] = new WoodSpikeWall(tilebase + new Vec2i(x, z)); } Tiles[x, z] = Tile.DIRT.ID; } } EntityFaction banditFaction = new EntityFaction("Bandit_Camp"); for (int x = 0; x < Shell.Size.x; x++) { for (int z = 0; z < Shell.Size.z; z++) { //Entity e = new Bandit(); //e.SetPosition(tilebase + new Vec2i(x * World.ChunkSize + 5, z * World.ChunkSize + z + 3)); //Shell.AddEntity(x, z, e); //e.SetEntityFaction(banditFaction); } } Entity e = new Bandit(); e.SetPosition(tilebase + new Vec2i(2 * World.ChunkSize + 5, 2 * World.ChunkSize + 2 + 3)); Shell.AddEntity(0, 0, e); e.SetEntityFaction(banditFaction); return(ToChunkData()); }