public override void Randomize(int seed) { _generator = new Random(seed); foreach (TR23ScriptedLevel lvl in Levels) { if (SaveMonitor.IsCancelled) { return; } //SaveMonitor.FireSaveStateBeginning(TRSaveCategory.Custom, string.Format("Randomizing textures in {0}", lvl.Name)); LoadLevelInstance(lvl); string appDir = Directory.GetCurrentDirectory(); string lvlName = lvl.LevelFileBaseName.ToUpper(); //Access texture packs directory for the specified level Directory.SetCurrentDirectory(@"Resources\TexturePacks\" + lvlName.Remove(lvlName.IndexOf('.'))); try { //List the sub directories string[] packDirs = Directory.GetDirectories(Directory.GetCurrentDirectory()); //Repeat // Pick a random sub-directory and enter it //Until no more directories int DepthCount = 0; while (packDirs.Count() > 0 && DepthCount <= 6) { Directory.SetCurrentDirectory(packDirs[_generator.Next(0, packDirs.Count())]); packDirs = Directory.GetDirectories(Directory.GetCurrentDirectory()); DepthCount++; } //Apply each texture to the correct textile index for (int i = 0; i < _levelInstance.NumImages; i++) { string textureFileName = lvlName + i + ".png"; if (File.Exists(textureFileName)) { _levelInstance.Images16[i].Pixels = T16Importer.ImportFrom32PNG(textureFileName); } } SaveLevelInstance(); SaveMonitor.FireSaveStateChanged(1); } finally { //Restore app working directory Directory.SetCurrentDirectory(appDir); } } }
private void TextureInject_Click(object sender, RoutedEventArgs e) { TR2Level instance = new TR2Level(); TR2LevelReader reader = new TR2LevelReader(); TR2LevelWriter writer = new TR2LevelWriter(); string CurrentDir = Directory.GetCurrentDirectory(); string LvlName = LevelNames.AsList[ImportLevel.SelectedIndex]; instance = reader.ReadLevel(LvlName); int ExtensionIndex = LvlName.IndexOf('.'); Directory.SetCurrentDirectory(CurrentDir + "\\TexturePacks\\" + LvlName.Remove(ExtensionIndex) + "\\" + PackDirectory.Text); for (int i = 0; i < instance.NumImages; i++) { instance.Images16[i].Pixels = T16Importer.ImportFrom32PNG(LvlName + i + ".png"); } writer.WriteLevelToFile(instance, LvlName); Directory.SetCurrentDirectory(CurrentDir); }
private void Commit() { if (_tiles.Count > Level.NumImages) { List <TRTexImage16> imgs16 = Level.Images16.ToList(); List <TRTexImage8> imgs8 = Level.Images8.ToList(); uint diff = (uint)_tiles.Count - Level.NumImages; for (int i = 0; i < diff; i++) { imgs16.Add(new TRTexImage16()); imgs8.Add(new TRTexImage8 { Pixels = new byte[256 * 256] }); } Level.Images16 = imgs16.ToArray(); Level.Images8 = imgs8.ToArray(); Level.NumImages += diff; } for (int i = 0; i < _tiles.Count; i++) { TexturedTile tile = _tiles[i]; if (!tile.BitmapChanged) { continue; } tile.Commit(); Level.Images16[i].Pixels = T16Importer.ImportFromBitmap(tile.BitmapGraphics.Bitmap); } }
public override void Randomize(int seed) { ReplacementStatusManager.CanRandomize = false; _generator = new Random(seed); foreach (string lvl in _levels) { _levelInstance = LoadLevel(lvl); string appDir = Directory.GetCurrentDirectory(); //Access texture packs directory for the specified level Directory.SetCurrentDirectory("TexturePacks\\" + lvl.Remove(lvl.IndexOf('.'))); //List the sub directories string[] packDirs = Directory.GetDirectories(Directory.GetCurrentDirectory()); //Repeat // Pick a random sub-directory and enter it //Until no more directories int DepthCount = 0; while (packDirs.Count() > 0 && DepthCount <= 5) { Directory.SetCurrentDirectory(packDirs[_generator.Next(0, packDirs.Count())]); packDirs = Directory.GetDirectories(Directory.GetCurrentDirectory()); DepthCount++; } //Apply each texture to the correct textile index for (int i = 0; i < _levelInstance.NumImages; i++) { string textureFileName = lvl + i + ".png"; if (File.Exists(textureFileName)) { _levelInstance.Images16[i].Pixels = T16Importer.ImportFrom32PNG(textureFileName); } } //Restore app working directory Directory.SetCurrentDirectory(appDir); SaveLevel(_levelInstance, lvl); ReplacementStatusManager.LevelProgress++; } ReplacementStatusManager.LevelProgress = 0; ReplacementStatusManager.CanRandomize = true; }
public void CommitGraphics() { if (!_committed) { foreach (int tile in _tileMap.Keys) { using (BitmapGraphics bmp = _tileMap[tile]) { _level.Images16[tile].Pixels = T16Importer.ImportFromBitmap(bmp.Bitmap); } } _committed = true; } }