Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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();
        }