Exemple #1
0
        public WorldLoaderState(DwarfGame Game, GameStateManager StateManager) :
            base(Game, StateManager)
        {
            this.ProceedButtonText = "Load";
            this.NoItemsText       = "No worlds found.";

            this.InvalidItemText = "This world was saved by an earlier version of DwarfCorp and is not compatible.";
            this.ValidateItem    = (item) =>
            {
                return(NewOverworldFile.CheckCompatibility(item) ? "" : "Incompatible save file.");
            };
            this.GetItemName = (item) =>
            {
                return(NewOverworldFile.GetOverworldName(item));
            };

            this.ItemSource = () =>
            {
                System.IO.DirectoryInfo worldDirectory = System.IO.Directory.CreateDirectory(DwarfGame.GetWorldDirectory());
                var dirs = worldDirectory.EnumerateDirectories().ToList();
                dirs.Sort((a, b) => b.LastWriteTime.CompareTo(a.LastWriteTime));
                return(dirs);
            };

            this.ScreenshotSource = (path) =>
            {
                try
                {
                    return(AssetManager.LoadUnbuiltTextureFromAbsolutePath(path + ProgramData.DirChar + "screenshot.png"));
                }
                catch (Exception exception)
                {
                    Console.Error.WriteLine(exception.ToString());
                    return(null);
                }
            };

            this.OnProceedClicked = (path) =>
            {
                var file = new NewOverworldFile(path);
                Overworld.Map            = file.Data.CreateMap();
                Overworld.Name           = file.Data.Name;
                Overworld.NativeFactions = new List <Faction>();
                foreach (var faction in file.Data.FactionList)
                {
                    Overworld.NativeFactions.Add(new Faction(faction));
                }
                var settings = new WorldGenerationSettings();
                settings.Width  = Overworld.Map.GetLength(1);
                settings.Height = Overworld.Map.GetLength(0);
                settings.Name   = System.IO.Path.GetFileName(path);
                StateManager.PopState();
                settings.Natives = Overworld.NativeFactions;
                var genState = new WorldGeneratorState(Game, Game.StateManager, settings, false);
                StateManager.PushState(genState);
            };
        }
        public WorldLoaderState(DwarfGame Game) :
            base(Game)
        {
            this.ProceedButtonText = "Load";
            this.NoItemsText       = "No worlds found.";
            this.InvalidItemText   = "This world was saved by an earlier version of DwarfCorp and is not compatible.";

            this.ValidateItem = (item) =>
            {
                return(NewOverworldFile.CheckCompatibility(item) ? "" : "Incompatible save file.");
            };

            this.GetItemName = (item) =>
            {
                return(NewOverworldFile.GetOverworldName(item));
            };

            this.ItemSource = () =>
            {
                System.IO.DirectoryInfo worldDirectory = System.IO.Directory.CreateDirectory(DwarfGame.GetWorldDirectory());
                var dirs = worldDirectory.EnumerateDirectories().ToList();
                dirs.Sort((a, b) =>
                {
                    var aMeta = a.GetFiles("meta.txt");
                    var bMeta = b.GetFiles("meta.txt");
                    if (aMeta.Length > 0 && bMeta.Length > 0)
                    {
                        return(bMeta[0].LastWriteTime.CompareTo(aMeta[0].LastWriteTime));
                    }

                    return(b.LastWriteTime.CompareTo(a.LastWriteTime));
                });
                return(dirs);
            };

            this.ScreenshotSource = (path) =>
            {
                try
                {
                    return(AssetManager.LoadUnbuiltTextureFromAbsolutePath(path + global::System.IO.Path.DirectorySeparatorChar + "screenshot.png"));
                }
                catch (Exception exception)
                {
                    Console.Error.WriteLine(exception.ToString());
                    return(null);
                }
            };

            this.OnProceedClicked = (path) =>
            {
                var file = NewOverworldFile.Load(path);
                GameStateManager.PopState();
                var genState = new WorldGeneratorState(Game, file.CreateSettings(), WorldGeneratorState.PanelStates.Launch);
                GameStateManager.PushState(genState);
            };
        }
Exemple #3
0
        public LaunchPanel(DwarfGame Game, OverworldGenerator Generator, Overworld Settings, WorldGeneratorState Preview)
        {
            this.Generator = Generator;
            this.Settings  = Settings;
            this.Game      = Game;
            this.Preview   = Preview;

            if (Generator != null && Generator.CurrentState != OverworldGenerator.GenerationState.Finished)
            {
                throw new InvalidProgramException();
            }
        }
Exemple #4
0
        public void LoadDescriptor(WorldLoadDescriptor descriptor, WorldSettings settings)
        {
            try
            {
                lock (descriptor.Lock)
                {
                    if (!descriptor.IsLoaded)
                    {
                        return;
                    }

                    descriptor.File = new OverworldFile(descriptor.FileName, true, true);

                    Overworld.Map = descriptor.File.Data.CreateMap();

                    Overworld.Name  = descriptor.File.Data.Name;
                    settings.Width  = Overworld.Map.GetLength(1);
                    settings.Height = Overworld.Map.GetLength(0);

                    WorldGeneratorState.worldMap = descriptor.File.Data.CreateTexture(Game.GraphicsDevice, Overworld.Map.GetLength(0), Overworld.Map.GetLength(1), descriptor.File.Data.SeaLevel);

                    JoinThreads();
                    StateManager.PopState();
                    StateManager.PushState(new WorldGeneratorState(Game, Game.StateManager)
                    {
                        Settings = Settings
                    });
                    WorldGeneratorState state = StateManager.GetState <WorldGeneratorState>();
                    state.Progress.Value     = 1.0f;
                    state.GenerationComplete = true;
                    state.DoneGenerating     = true;
                    state.Settings.Name      = descriptor.WorldName;
                    state.worldData          = new Color[Overworld.Map.GetLength(0) * Overworld.Map.GetLength(1)];
                    state.CreateMesh();
                    Worlds.Clear();
                }
            }
            catch (Exception e)
            {
                Dialog.Popup(GUI, "ERROR", "Failed to load world: " + e.Message, Dialog.ButtonType.OK);
            }
        }