void LoadWad() { using (var wadStream = new FileStream(fileName, FileMode.Open)) { loadedWad = WADReader.GetInfo(wadStream); availableMaps = WADReader.GetMapList(wadStream, loadedWad); } }
void ImportMap() { var selectedMap = availableMaps[mapIndex]; using (var wadStream = new FileStream(fileName, FileMode.Open)) { // Get the map data var mapData = WADReader.GetMapData(wadStream, loadedWad, selectedMap); // Get wad palette var paletteData = WADReader.GetPalette(wadStream, 0); // Get tilesheets // Walls var texList = new List <WallTextureData>(); var patchDict = new Dictionary <string, SpriteData>(); foreach (var tex in mapData.WallsUsed) { texList.Add(tex); var patches = WADReader.GetWallPatches(wadStream, loadedWad, tex); foreach (var kvp in patches) { if (!patchDict.ContainsKey(kvp.Key)) { patchDict.Add(kvp.Key, kvp.Value); } } } var wallsSheet = SpriteGenerator.GenerateWallTextureSheet(texList, patchDict, paletteData, 0); // Flats var floorSprites = WADReader.GetRawSprites(wadStream, mapData.FlatsUsed); var flatsSheet = SpriteGenerator.GenerateTileSheet(floorSprites, paletteData, 0); // Get our shaders var wallShader = Shader.Find("UnityWAD/DoomWalls"); var flatShader = Shader.Find("UnityWAD/DoomFlats"); // Let's save walls as a PNG and create an asset byte[] bytes = wallsSheet.Texture.EncodeToPNG(); File.WriteAllBytes(Path.Combine(Application.dataPath, mapData.Name + "-walls.png"), bytes); AssetDatabase.ImportAsset("Assets/" + mapData.Name + "-walls.png", ImportAssetOptions.ForceUpdate); var importer = (TextureImporter)AssetImporter.GetAtPath("Assets/" + mapData.Name + "-walls.png"); importer.filterMode = FilterMode.Point; importer.wrapMode = TextureWrapMode.Clamp; importer.textureCompression = TextureImporterCompression.Uncompressed; importer.npotScale = TextureImporterNPOTScale.None; importer.mipmapEnabled = false; importer.SaveAndReimport(); var wallsAsset = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/" + mapData.Name + "-walls.png", typeof(Texture2D)); // Now save the flats bytes = flatsSheet.Texture.EncodeToPNG(); File.WriteAllBytes(Path.Combine(Application.dataPath, mapData.Name + "-flats.png"), bytes); AssetDatabase.ImportAsset("Assets/" + mapData.Name + "-flats.png", ImportAssetOptions.ForceUpdate); importer = (TextureImporter)AssetImporter.GetAtPath("Assets/" + mapData.Name + "-flats.png"); importer.filterMode = FilterMode.Point; importer.wrapMode = TextureWrapMode.Clamp; importer.textureCompression = TextureImporterCompression.Uncompressed; importer.npotScale = TextureImporterNPOTScale.None; importer.mipmapEnabled = false; importer.SaveAndReimport(); var flatsAsset = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/" + mapData.Name + "-flats.png", typeof(Texture2D)); // Create materials var wallMat = new Material(wallShader); wallMat.SetTexture("_TileMap", wallsAsset); wallMat.SetInt("_XTiles", wallsSheet.Columns); wallMat.SetInt("_YTiles", wallsSheet.Rows); wallMat.SetInt("_TileWidth", wallsSheet.TileWidth); wallMat.SetInt("_TileHeight", wallsSheet.TileHeight); wallMat.SetInt("_Padding", wallsSheet.Padding); AssetDatabase.CreateAsset(wallMat, "Assets/" + mapData.Name + "-walls.mat"); var flatsMat = new Material(flatShader); flatsMat.SetTexture("_TileMap", flatsAsset); flatsMat.SetInt("_XTiles", flatsSheet.Columns); flatsMat.SetInt("_YTiles", flatsSheet.Rows); flatsMat.SetInt("_TileWidth", flatsSheet.TileWidth); flatsMat.SetInt("_TileHeight", flatsSheet.TileHeight); flatsMat.SetInt("_Padding", flatsSheet.Padding); AssetDatabase.CreateAsset(flatsMat, "Assets/" + mapData.Name + "-flats.mat"); AssetDatabase.SaveAssets(); // Create map parent gameobject var map = new GameObject(mapData.Name); map.transform.position = Vector3.zero; // Initialise the MapGenerator component and feed in tilesheets and materials var generator = map.AddComponent <MapGenerator>(); generator.Data = mapData; generator.WallTiles = wallsSheet; generator.FlatTiles = flatsSheet; generator.WallsMaterial = wallMat; generator.FlatsMaterial = flatsMat; generator.GenerateMesh(); } Close(); }