Skip to content

Commit 562a455

Browse files
committed
Update instance manager for new config format
1 parent c96e7a2 commit 562a455

4 files changed

Lines changed: 99 additions & 45 deletions

File tree

‎Torch.Server/Managers/InstanceManager.cs‎

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

‎Torch.Server/ViewModels/CheckpointViewModel.cs‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ namespace Torch.Server.ViewModels
1616
public class CheckpointViewModel : ViewModel
1717
{
1818
private MyObjectBuilder_Checkpoint _checkpoint;
19-
private SessionSettingsViewModel _sessionSettings;
19+
//private SessionSettingsViewModel _sessionSettings;
2020

2121
public CheckpointViewModel(MyObjectBuilder_Checkpoint checkpoint)
2222
{
2323
_checkpoint = checkpoint;
24-
_sessionSettings = new SessionSettingsViewModel(_checkpoint.Settings);
24+
//_sessionSettings = new SessionSettingsViewModel(_checkpoint.Settings);
2525
}
2626

2727
public static implicit operator MyObjectBuilder_Checkpoint(CheckpointViewModel model)
@@ -59,23 +59,23 @@ public static implicit operator MyObjectBuilder_Checkpoint(CheckpointViewModel m
5959

6060
public SerializableDictionary<long, MyObjectBuilder_Checkpoint.PlayerId> ControlledEntities { get => _checkpoint.ControlledEntities; set => SetValue(ref _checkpoint.ControlledEntities, value); }
6161

62-
public SessionSettingsViewModel Settings
63-
{
64-
get => _sessionSettings;
65-
set
66-
{
67-
SetValue(ref _sessionSettings, value);
68-
_checkpoint.Settings = _sessionSettings;
69-
}
70-
}
62+
//public SessionSettingsViewModel Settings
63+
//{
64+
// get => _sessionSettings;
65+
// set
66+
// {
67+
// SetValue(ref _sessionSettings, value);
68+
// _checkpoint.Settings = _sessionSettings;
69+
// }
70+
//}
7171

7272
public MyObjectBuilder_ScriptManager ScriptManagerData => throw new NotImplementedException();
7373

7474
public int AppVersion { get => _checkpoint.AppVersion; set => SetValue(ref _checkpoint.AppVersion, value); }
7575

7676
public MyObjectBuilder_FactionCollection Factions => throw new NotImplementedException();
7777

78-
public List<MyObjectBuilder_Checkpoint.ModItem> Mods { get => _checkpoint.Mods; set => SetValue(ref _checkpoint.Mods, value); }
78+
//public List<MyObjectBuilder_Checkpoint.ModItem> Mods { get => _checkpoint.Mods; set => SetValue(ref _checkpoint.Mods, value); }
7979

8080
public SerializableDictionary<ulong, MyPromoteLevel> PromotedUsers { get => _checkpoint.PromotedUsers; set => SetValue(ref _checkpoint.PromotedUsers, value); }
8181

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Collections.Generic;
2+
using VRage.Game;
3+
4+
namespace Torch.Server.ViewModels
5+
{
6+
public class WorldConfigurationViewModel : ViewModel
7+
{
8+
private readonly MyObjectBuilder_WorldConfiguration _worldConfiguration;
9+
private SessionSettingsViewModel _sessionSettings;
10+
11+
public WorldConfigurationViewModel(MyObjectBuilder_WorldConfiguration worldConfiguration)
12+
{
13+
_worldConfiguration = worldConfiguration;
14+
_sessionSettings = new SessionSettingsViewModel(worldConfiguration.Settings);
15+
}
16+
17+
public static implicit operator MyObjectBuilder_WorldConfiguration(WorldConfigurationViewModel model)
18+
{
19+
return model._worldConfiguration;
20+
}
21+
22+
public List<MyObjectBuilder_Checkpoint.ModItem> Mods { get => _worldConfiguration.Mods; set => SetValue(ref _worldConfiguration.Mods, value); }
23+
24+
public SessionSettingsViewModel Settings
25+
{
26+
get => _sessionSettings;
27+
set
28+
{
29+
SetValue(ref _sessionSettings, value);
30+
_worldConfiguration.Settings = _sessionSettings;
31+
}
32+
}
33+
}
34+
}

‎Torch.Server/Views/ConfigControl.xaml.cs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ private void RoleEdit_Onlick(object sender, RoutedEventArgs e)
131131
//w.Show();
132132
var d = new RoleEditor();
133133
var w = _instanceManager.DedicatedConfig.SelectedWorld;
134+
135+
if (w == null)
136+
{
137+
MessageBox.Show("A world is not selected.");
138+
return;
139+
}
140+
134141
d.Edit(w.Checkpoint.PromotedUsers.Dictionary);
135142
_instanceManager.DedicatedConfig.Administrators = w.Checkpoint.PromotedUsers.Dictionary.Where(k => k.Value >= MyPromoteLevel.Admin).Select(k => k.Key.ToString()).ToList();
136143
}

0 commit comments

Comments
 (0)