private static byte chunkToByteValue(ChunkManager.Chunk c) { byte output = 0; foreach (ChunkManager.Chunk.ChunkAttribute attr in c.Attributes) { if (attr.AttributeName == "north") { output |= 1; } if (attr.AttributeName == "south") { output |= 2; } if (attr.AttributeName == "east") { output |= 4; } if (attr.AttributeName == "west") { output |= 8; } } return(output); }
private static bool checkChunk(string[] requiredAttributes, ChunkManager.Chunk chunk) { List <string> reqs = new List <string>(requiredAttributes); List <string> chunkAttrs = new List <string>(); foreach (ChunkManager.Chunk.ChunkAttribute attrbute in chunk.Attributes) { chunkAttrs.Add(attrbute.AttributeName); } reqs.Sort(); chunkAttrs.Sort(); return(Enumerable.SequenceEqual(reqs, chunkAttrs)); }
private static void loadFromManifest() { if (manifestLoaded || dict == null) { return; } #if WINDOWS string[] chunks = File.ReadAllLines(chunkManifest); foreach (string line in chunks) { ChunkManager.Chunk c = ChunkManager.ReadChunk(chunkDirectory + line); dict.Add(line, c); } #elif XBOX String xboxLine; int counter = 0; StreamReader file = new StreamReader(chunkManifest); while ((xboxLine = file.ReadLine()) != null) { ChunkManager.Chunk c = ChunkManager.ReadChunk(chunkDirectory + xboxLine); dict.Add(xboxLine, c); counter++; } file.Close(); #endif manifestLoaded = true; }
public TileMap(LevelState parent, DungeonGenerator.DungeonRoom[,] room, Vector2 tileSize) { tileSkin = new Texture2D[5]; this.size = new TileDimensions(room.GetLength(0) * GlobalGameConstants.TilesPerRoomWide, room.GetLength(1) * GlobalGameConstants.TilesPerRoomHigh); this.tileSize = tileSize; this.parent = parent; map = new TileType[size.x, size.y]; floorMap = new FloorType[size.x, size.y]; mapMod = new WallMod[size.x, size.y]; Random rand = new Random(); for (int i = 0; i < floorMap.GetLength(0); i++) { for (int j = 0; j < floorMap.GetLength(1); j++) { int randVal = Game1.rand.Next() % 100; if (randVal > 15) { floorMap[i, j] = Game1.rand.Next() % 2 == 0 ? FloorType.A : FloorType.B; } else if (randVal > 10) { floorMap[i, j] = Game1.rand.Next() % 2 == 0 ? FloorType.C : FloorType.D; } else if (randVal > 5) { floorMap[i, j] = Game1.rand.Next() % 2 == 0 ? FloorType.E : FloorType.F; } else { floorMap[i, j] = Game1.rand.Next() % 2 == 0 ? FloorType.G : FloorType.H; } } } for (int i = 0; i < room.GetLength(0); i++) { for (int j = 0; j < room.GetLength(1); j++) { if (room[i, j].attributes != null) { ChunkManager.Chunk c = ChunkLib.getRandomChunkByValues(room[i, j].attributes.ToArray(), rand); if (c == null) { throw new Exception("NO CHUNK FOR VALUES"); } if (c != null) { foreach (ChunkManager.Chunk.ChunkAttribute attr in c.Attributes) { if (!room[i, j].attributes.Contains(attr.AttributeName)) { room[i, j].attributes.Add(attr.AttributeName); } } if (c != null) { for (int p = 0; p < GlobalGameConstants.TilesPerRoomWide; p++) { for (int q = 0; q < GlobalGameConstants.TilesPerRoomHigh; q++) { map[(i * GlobalGameConstants.TilesPerRoomWide) + p, (j * GlobalGameConstants.TilesPerRoomHigh) + q] = (TileType)(c.tilemap[(q * GlobalGameConstants.TilesPerRoomHigh) + p]); } } room[i, j].chunkName = c.Name; if (room[i, j].attributes.Contains("start")) { int startX = 0; int startY = 0; while (c.tilemap[startY * GlobalGameConstants.TilesPerRoomHigh + startX] == 1) { startX = rand.Next() % GlobalGameConstants.TilesPerRoomWide; startY = rand.Next() % GlobalGameConstants.TilesPerRoomHigh; } startPosition.X = (i * GlobalGameConstants.TilesPerRoomWide * GlobalGameConstants.TileSize.X) + ((GlobalGameConstants.TilesPerRoomWide / 2) * GlobalGameConstants.TileSize.X); startPosition.Y = (j * GlobalGameConstants.TilesPerRoomHigh * GlobalGameConstants.TileSize.Y) + ((GlobalGameConstants.TilesPerRoomHigh / 2) * GlobalGameConstants.TileSize.Y); } if (room[i, j].intensity > 0.95f) { endFlagPosition.X = (i * GlobalGameConstants.TilesPerRoomWide * GlobalGameConstants.TileSize.X) + ((GlobalGameConstants.TilesPerRoomWide / 2) * GlobalGameConstants.TileSize.X); endFlagPosition.Y = (j * GlobalGameConstants.TilesPerRoomHigh * GlobalGameConstants.TileSize.Y) + ((GlobalGameConstants.TilesPerRoomHigh / 2) * GlobalGameConstants.TileSize.Y); } } else { for (int p = 0; p < GlobalGameConstants.TilesPerRoomWide; p++) { for (int q = 0; q < GlobalGameConstants.TilesPerRoomHigh; q++) { map[(i * GlobalGameConstants.TilesPerRoomWide) + p, (j * GlobalGameConstants.TilesPerRoomHigh) + q] = TileType.TestWall; } } } } } else { //fill a room with empty tiles if it is empty for (int p = 0; p < GlobalGameConstants.TilesPerRoomWide; p++) { for (int q = 0; q < GlobalGameConstants.TilesPerRoomHigh; q++) { map[(i * GlobalGameConstants.TilesPerRoomWide) + p, (j * GlobalGameConstants.TilesPerRoomHigh) + q] = TileType.TestWall; } } } } } convertTestWallsToWalls(); }