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); }; }
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(); } }
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); } }