@@ -119,8 +119,8 @@ public void SelectWorld(string worldPath, bool modsOnly = true)
119119 {
120120 DedicatedConfig . Mods . Clear ( ) ;
121121 //remove the Torch mod to avoid running multiple copies of it
122- DedicatedConfig . SelectedWorld . Checkpoint . Mods . RemoveAll ( m => m . PublishedFileId == TorchModCore . MOD_ID ) ;
123- foreach ( var m in DedicatedConfig . SelectedWorld . Checkpoint . Mods )
122+ DedicatedConfig . SelectedWorld . WorldConfiguration . Mods . RemoveAll ( m => m . PublishedFileId == TorchModCore . MOD_ID ) ;
123+ foreach ( var m in DedicatedConfig . SelectedWorld . WorldConfiguration . Mods )
124124 DedicatedConfig . Mods . Add ( new ModItemInfo ( m ) ) ;
125125 Task . Run ( ( ) => DedicatedConfig . UpdateAllModInfosAsync ( ) ) ;
126126 }
@@ -134,8 +134,8 @@ public void SelectWorld(WorldViewModel world, bool modsOnly = true)
134134 {
135135 DedicatedConfig . Mods . Clear ( ) ;
136136 //remove the Torch mod to avoid running multiple copies of it
137- DedicatedConfig . SelectedWorld . Checkpoint . Mods . RemoveAll ( m => m . PublishedFileId == TorchModCore . MOD_ID ) ;
138- foreach ( var m in DedicatedConfig . SelectedWorld . Checkpoint . Mods )
137+ DedicatedConfig . SelectedWorld . WorldConfiguration . Mods . RemoveAll ( m => m . PublishedFileId == TorchModCore . MOD_ID ) ;
138+ foreach ( var m in DedicatedConfig . SelectedWorld . WorldConfiguration . Mods )
139139 DedicatedConfig . Mods . Add ( new ModItemInfo ( m ) ) ;
140140 Task . Run ( ( ) => DedicatedConfig . UpdateAllModInfosAsync ( ) ) ;
141141 }
@@ -149,15 +149,15 @@ public void ImportSelectedWorldConfig()
149149 private void ImportWorldConfig ( WorldViewModel world , bool modsOnly = true )
150150 {
151151 var mods = new MtObservableList < ModItemInfo > ( ) ;
152- foreach ( var mod in world . Checkpoint . Mods )
152+ foreach ( var mod in world . WorldConfiguration . Mods )
153153 mods . Add ( new ModItemInfo ( mod ) ) ;
154154 DedicatedConfig . Mods = mods ;
155155
156156
157157 Log . Debug ( "Loaded mod list from world" ) ;
158158
159159 if ( ! modsOnly )
160- DedicatedConfig . SessionSettings = world . Checkpoint . Settings ;
160+ DedicatedConfig . SessionSettings = world . WorldConfiguration . Settings ;
161161 }
162162
163163 private void ImportWorldConfig ( bool modsOnly = true )
@@ -203,29 +203,22 @@ public void SaveConfig()
203203
204204 try
205205 {
206- var sandboxPath = Path . Combine ( DedicatedConfig . LoadWorld , "Sandbox.sbc" ) ;
207- MyObjectBuilderSerializer . DeserializeXML ( sandboxPath , out MyObjectBuilder_Checkpoint checkpoint , out ulong sizeInBytes ) ;
208- if ( checkpoint == null )
209- {
210- Log . Error ( $ "Failed to load { DedicatedConfig . LoadWorld } , checkpoint null ({ sizeInBytes } bytes, instance { Torch . Config . InstancePath } )") ;
211- return ;
212- }
206+ var world = DedicatedConfig . Worlds . FirstOrDefault ( x => x . WorldPath == DedicatedConfig . LoadWorld ) ?? new WorldViewModel ( DedicatedConfig . LoadWorld ) ;
213207
214- checkpoint . SessionName = DedicatedConfig . WorldName ;
215- checkpoint . Settings = DedicatedConfig . SessionSettings ;
216- checkpoint . Mods . Clear ( ) ;
208+ world . Checkpoint . SessionName = DedicatedConfig . WorldName ;
209+ world . WorldConfiguration . Settings = DedicatedConfig . SessionSettings ;
210+ world . WorldConfiguration . Mods . Clear ( ) ;
217211
218212 foreach ( var mod in DedicatedConfig . Mods )
219213 {
220214 var savedMod = new MyObjectBuilder_Checkpoint . ModItem ( mod . Name , mod . PublishedFileId , mod . FriendlyName ) ;
221215 savedMod . IsDependency = mod . IsDependency ;
222- checkpoint . Mods . Add ( savedMod ) ;
216+ world . WorldConfiguration . Mods . Add ( savedMod ) ;
223217 }
224218 Task . Run ( ( ) => DedicatedConfig . UpdateAllModInfosAsync ( ) ) ;
225219
226- MyObjectBuilderSerializer . SerializeXML ( sandboxPath , false , checkpoint ) ;
220+ world . SaveSandbox ( ) ;
227221
228- //MyLocalCache.SaveCheckpoint(checkpoint, DedicatedConfig.LoadWorld);
229222 Log . Info ( "Saved world config." ) ;
230223 }
231224 catch ( Exception e )
@@ -259,7 +252,10 @@ public class WorldViewModel : ViewModel
259252 public string WorldPath { get ; }
260253 public long WorldSizeKB { get ; }
261254 private string _checkpointPath ;
255+ private string _worldConfigPath ;
262256 public CheckpointViewModel Checkpoint { get ; private set ; }
257+
258+ public WorldConfigurationViewModel WorldConfiguration { get ; private set ; }
263259
264260 public WorldViewModel ( string worldPath )
265261 {
@@ -268,8 +264,9 @@ public WorldViewModel(string worldPath)
268264 WorldPath = worldPath ;
269265 WorldSizeKB = new DirectoryInfo ( worldPath ) . GetFiles ( ) . Sum ( x => x . Length ) / 1024 ;
270266 _checkpointPath = Path . Combine ( WorldPath , "Sandbox.sbc" ) ;
267+ _worldConfigPath = Path . Combine ( WorldPath , "Sandbox_config.sbc" ) ;
271268 FolderName = Path . GetFileName ( worldPath ) ;
272- BeginLoadCheckpoint ( ) ;
269+ LoadSandbox ( ) ;
273270 }
274271 catch ( ArgumentException ex )
275272 {
@@ -278,24 +275,40 @@ public WorldViewModel(string worldPath)
278275 }
279276 }
280277
281- public async Task SaveCheckpointAsync ( )
278+ public void SaveSandbox ( )
282279 {
283- await Task . Run ( ( ) =>
284- {
285- using ( var f = File . Open ( _checkpointPath , FileMode . Create ) )
286- MyObjectBuilderSerializer . SerializeXML ( f , Checkpoint ) ;
287- } ) ;
280+ using ( var f = File . Open ( _checkpointPath , FileMode . Create ) )
281+ MyObjectBuilderSerializer . SerializeXML ( f , Checkpoint ) ;
282+
283+ using ( var f = File . Open ( _worldConfigPath , FileMode . Create ) )
284+ MyObjectBuilderSerializer . SerializeXML ( f , WorldConfiguration ) ;
288285 }
289286
290- private void BeginLoadCheckpoint ( )
287+ private void LoadSandbox ( )
291288 {
292- //Task.Run(() =>
289+ MyObjectBuilderSerializer . DeserializeXML ( _checkpointPath , out MyObjectBuilder_Checkpoint checkpoint ) ;
290+ Checkpoint = new CheckpointViewModel ( checkpoint ) ;
291+
292+ // migrate old saves
293+ if ( File . Exists ( _worldConfigPath ) )
294+ {
295+ MyObjectBuilderSerializer . DeserializeXML ( _worldConfigPath , out MyObjectBuilder_WorldConfiguration worldConfig ) ;
296+ WorldConfiguration = new WorldConfigurationViewModel ( worldConfig ) ;
297+ }
298+ else
293299 {
294- Log . Info ( $ "Preloading checkpoint { _checkpointPath } ") ;
295- MyObjectBuilderSerializer . DeserializeXML ( _checkpointPath , out MyObjectBuilder_Checkpoint checkpoint ) ;
296- Checkpoint = new CheckpointViewModel ( checkpoint ) ;
297- OnPropertyChanged ( nameof ( Checkpoint ) ) ;
298- } //);
300+ WorldConfiguration = new WorldConfigurationViewModel ( new MyObjectBuilder_WorldConfiguration
301+ {
302+ Mods = checkpoint . Mods ,
303+ Settings = checkpoint . Settings
304+ } ) ;
305+
306+ checkpoint . Mods = null ;
307+ checkpoint . Settings = null ;
308+ }
309+
310+ OnPropertyChanged ( nameof ( Checkpoint ) ) ;
311+ OnPropertyChanged ( nameof ( WorldConfiguration ) ) ;
299312 }
300313 }
301314}
0 commit comments