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