Skip to content

Commit

Permalink
Yell loudly when ProgramHandler state load fails
Browse files Browse the repository at this point in the history
  • Loading branch information
siimav committed Feb 3, 2025
1 parent b0d7664 commit 606456f
Showing 1 changed file with 67 additions and 57 deletions.
124 changes: 67 additions & 57 deletions Source/RP0/Programs/ProgramHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,84 +135,94 @@ public void OnDestroy()

public override void OnLoad(ConfigNode node)
{
base.OnLoad(node);

if (Settings == null)
try
{
Settings = new ProgramHandlerSettings();
foreach (ConfigNode cn in GameDatabase.Instance.GetConfigNodes("PROGRAMHANDLERSETTINGS"))
ConfigNode.LoadObjectFromConfig(Settings, cn);
}
base.OnLoad(node);

EnsurePrograms();
if (Settings == null)
{
Settings = new ProgramHandlerSettings();
foreach (ConfigNode cn in GameDatabase.Instance.GetConfigNodes("PROGRAMHANDLERSETTINGS"))
ConfigNode.LoadObjectFromConfig(Settings, cn);
}

ConfigNode disableds = node.GetNode("DISABLEDPROGRAMS");
if (disableds != null)
{
foreach (ConfigNode.Value v in disableds.values)
EnsurePrograms();

ConfigNode disableds = node.GetNode("DISABLEDPROGRAMS");
if (disableds != null)
{
DisabledPrograms.Add(v.name);
foreach (ConfigNode.Value v in disableds.values)
{
DisabledPrograms.Add(v.name);
}
}
}

foreach (ConfigNode cn in node.GetNodes("ACTIVEPROGRAM"))
{
string progName = cn.GetValue(nameof(Program.name));
Program programTemplate = Programs.FirstOrDefault(p => p.name == progName);
var program = new Program(programTemplate);
program.Load(cn);
ActivePrograms.Add(program);
}
foreach (ConfigNode cn in node.GetNodes("ACTIVEPROGRAM"))
{
string progName = cn.GetValue(nameof(Program.name));
Program programTemplate = Programs.FirstOrDefault(p => p.name == progName) ?? throw new Exception("Failed to find ACTIVEPROGRAM " + progName);
var program = new Program(programTemplate);
program.Load(cn);
ActivePrograms.Add(program);
}

foreach (ConfigNode cn in node.GetNodes("COMPLETEDPROGRAM"))
{
string progName = cn.GetValue(nameof(Program.name));
Program programTemplate = Programs.FirstOrDefault(p => p.name == progName);
var program = new Program(programTemplate);
program.Load(cn);
CompletedPrograms.Add(program);
}
foreach (ConfigNode cn in node.GetNodes("COMPLETEDPROGRAM"))
{
string progName = cn.GetValue(nameof(Program.name));
Program programTemplate = Programs.FirstOrDefault(p => p.name == progName) ?? throw new Exception("Failed to find COMPLETEDPROGRAM " + progName);
var program = new Program(programTemplate);
program.Load(cn);
CompletedPrograms.Add(program);
}

_ready = true; // done BEFORE upgrading because we have to do hijinks there
_ready = true; // done BEFORE upgrading because we have to do hijinks there

if (LoadedSaveVersion < VERSION)
{
if (LoadedSaveVersion < 1)
if (LoadedSaveVersion < VERSION)
{
List<Program> progs = new List<Program>();
progs.AddRange(ActivePrograms);
progs.AddRange(CompletedPrograms);
foreach (var p in progs)
if (LoadedSaveVersion < 1)
{
if (p.name == "CrewedOrbit")
List<Program> progs = new List<Program>();
progs.AddRange(ActivePrograms);
progs.AddRange(CompletedPrograms);
foreach (var p in progs)
{
DisabledPrograms.Add("CrewedOrbitEarly");
DisabledPrograms.Add("CrewedOrbitAdv");
if (p.name == "CrewedOrbit")
{
DisabledPrograms.Add("CrewedOrbitEarly");
DisabledPrograms.Add("CrewedOrbitAdv");

break;
break;
}
}
}
}
if (LoadedSaveVersion < 2)
{
_ready = false;
_upgrade_v02 = true;
// handled in OnLoadStrategiesComplete because we need to know what leaders are active
}
if (LoadedSaveVersion < 3)
{
foreach (var psm in ScenarioRunner.Instance.protoModules)
if (LoadedSaveVersion < 2)
{
_ready = false;
_upgrade_v02 = true;
// handled in OnLoadStrategiesComplete because we need to know what leaders are active
}
if (LoadedSaveVersion < 3)
{
if (psm.moduleName == "StrategySystem" && psm.moduleValues.GetNode("DEACTIVATIONDATES") is ConfigNode cn)
foreach (var psm in ScenarioRunner.Instance.protoModules)
{
ActivatedStrategies.Load(cn);
break;
if (psm.moduleName == "StrategySystem" && psm.moduleValues.GetNode("DEACTIVATIONDATES") is ConfigNode cn)
{
ActivatedStrategies.Load(cn);
break;
}
}
}
}
}

LoadedSaveVersion = VERSION;
LoadedSaveVersion = VERSION;
}
catch (Exception ex)
{
Debug.LogException(ex);
PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), "RP0ProgramHandlerLoadErr",
$"<b><color=red>SFS load failed</color></b>",
"<b>RP-1 encountered an error while trying to load the state of the programs.<br>Things will be seriously broken!</b>", "Understood", false, HighLogic.UISkin).HideGUIsWhilePopup();
}
}

public void OnLoadStrategiesComplete()
Expand Down

0 comments on commit 606456f

Please sign in to comment.