From 283c647d99ea3702b23c95d387faa322e2c11a47 Mon Sep 17 00:00:00 2001 From: Sam Byass Date: Tue, 19 Mar 2024 02:16:41 +0000 Subject: [PATCH] Improvements to the save file loading screen --- 1.4/Assemblies/BetterLoading.dll | Bin 92672 -> 95232 bytes About/Manifest.xml | 2 +- Source/LoadingScreen.cs | 11 +- Source/Stage/SaveLoad/2LoadMaps.cs | 20 +-- Source/Stage/SaveLoad/4FinalizeMap.cs | 187 +++++++++++++++++++++++ Source/Stage/SaveLoad/4SpawnAllThings.cs | 87 ----------- 6 files changed, 207 insertions(+), 100 deletions(-) create mode 100644 Source/Stage/SaveLoad/4FinalizeMap.cs delete mode 100644 Source/Stage/SaveLoad/4SpawnAllThings.cs diff --git a/1.4/Assemblies/BetterLoading.dll b/1.4/Assemblies/BetterLoading.dll index fbcca3f6d254b986cdf22477c9e11c371827dc0d..5f8d051b0a9807967fdc5c39ae3bfbaf99cab567 100644 GIT binary patch delta 34030 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 M@haad>w8)MAKS&Dt^fc4 diff --git a/About/Manifest.xml b/About/Manifest.xml index 12c8f6e..9ce54ee 100755 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ BetterLoading - 3.4.0.0 + 3.5.0.0
  • Core >= 1.0
  • Startupimpact
  • diff --git a/Source/LoadingScreen.cs b/Source/LoadingScreen.cs index 28d8570..b8e4429 100755 --- a/Source/LoadingScreen.cs +++ b/Source/LoadingScreen.cs @@ -33,7 +33,14 @@ public sealed class LoadingScreen : MonoBehaviour }; /// - /// The load list used at game boot. + /// The load list used during loading a save (Game.LoadGame) + /// + /// Stage 0 - Load Small Components. Initial load up until beginning of World.ExposeData. + /// Stage 1 - Load World Map. Covers World.ExposeData and the subsequent call to World.FinalizeInit from Game.LoadGame + /// Stage 2 - Load Maps. Covers Map.ExposeData for each map in the save + /// Stage 3 - Finalize Scribe Load. Covers Scribe.loader.FinalizeLoading, which essentially just calls ResolveAllCrossReferences and DoAllPostLoadInits. + /// Stage 4 - Finalize Maps. Covers Map.FinalizeLoading (which is called directly for each map from Game.LoadGame). Ends when FinalizeLoading returns on the last map. + /// Stage 5 - Finalize Game State. Covers everything from the end of FinalizeLoading on the last map, until the long event finishes, which in practice is Game.FinalizeInit and GameComponentUtility.LoadedGame /// internal static List LoadSaveFileLoadList = new() { @@ -42,7 +49,7 @@ public sealed class LoadingScreen : MonoBehaviour new LoadWorldMap(BetterLoadingMain.hInstance), new LoadMaps(BetterLoadingMain.hInstance), new FinalizeScribeLoad(BetterLoadingMain.hInstance), - new SpawnAllThings(BetterLoadingMain.hInstance), + new FinalizeMap(BetterLoadingMain.hInstance), new FinalizeGameState(BetterLoadingMain.hInstance) }; diff --git a/Source/Stage/SaveLoad/2LoadMaps.cs b/Source/Stage/SaveLoad/2LoadMaps.cs index fe3fe1b..d6dfede 100644 --- a/Source/Stage/SaveLoad/2LoadMaps.cs +++ b/Source/Stage/SaveLoad/2LoadMaps.cs @@ -49,14 +49,14 @@ public override string GetCurrentStepName() var text = $"Map {_currMapNum + 1} of {NumMaps}: "; - if (_currMapLoadedCompressed) - return text + "Loading Things"; + if (_currMapInitialized) + return text + "Loading Components"; if (_currMapLoadedComponents) return text + "Loading Compressed Map Data"; - - if (_currMapInitialized) - return text + "Loading Components"; + + if (_currMapLoadedCompressed) + return text + "Loading Things"; return text + "Reading Data"; } @@ -67,15 +67,15 @@ public override int GetCurrentProgress() return 0; var baseValue = _currMapNum * 4; - - if (_currMapLoadedCompressed) - return baseValue + 3; + if (_currMapInitialized) + return baseValue + 1; + if (_currMapLoadedComponents) return baseValue + 2; - if (_currMapInitialized) - return baseValue + 1; + if (_currMapLoadedCompressed) + return baseValue + 3; return baseValue; } diff --git a/Source/Stage/SaveLoad/4FinalizeMap.cs b/Source/Stage/SaveLoad/4FinalizeMap.cs new file mode 100644 index 0000000..a3b53ff --- /dev/null +++ b/Source/Stage/SaveLoad/4FinalizeMap.cs @@ -0,0 +1,187 @@ +using System; +using HarmonyLib; +using JetBrains.Annotations; +using RimWorld; +using Verse; +using Verse.AI; + +namespace BetterLoading.Stage.SaveLoad +{ + public class FinalizeMap : LoadingStage + { + private enum MapFinalizeState + { + SpawnThings, + SpawnBuildings, + RebuildingPathfindingCache, + FinalizeGeometry, + InitThings, + ListFilth, + CountResources, + CountWealth, + InitComponents, + + NumStates + } + + private static int _currMapIdx = -1; + private static int _numThingsThisMapSoFar; + private static int _numBuildingsThisMapSoFar; + private static MapFinalizeState _state; + + private static bool _finished; + + public FinalizeMap([NotNull] Harmony instance) : base(instance) + { + } + + public override string GetStageName() + { + return "Initializing Maps"; + } + + public override string? GetCurrentStepName() + { + if (_currMapIdx == -1) + return "Waiting..."; + + var mapString = $"Map {_currMapIdx + 1} of {LoadMaps.NumMaps}:"; + return _state switch + { + MapFinalizeState.SpawnThings => $"{mapString} Spawning Things ({_numThingsThisMapSoFar} so far)", + MapFinalizeState.SpawnBuildings => $"{mapString} Spawning Buildings ({_numBuildingsThisMapSoFar} so far)", + MapFinalizeState.RebuildingPathfindingCache => $"{mapString} Calculating Pathfinding Costs", + MapFinalizeState.FinalizeGeometry => $"{mapString} Initializing Map Grid", + MapFinalizeState.InitThings => $"{mapString} Initializing Things", + MapFinalizeState.ListFilth => $"{mapString} Loading Filth", + MapFinalizeState.CountResources => $"{mapString} Counting Resources", + MapFinalizeState.CountWealth => $"{mapString} Counting Wealth", + MapFinalizeState.InitComponents => $"{mapString} Initializing Sub-Components", + _ => throw new ArgumentOutOfRangeException() + }; + } + + public override int GetCurrentProgress() + { + if (_currMapIdx == -1) + return 0; + + var baseMapProgress = _currMapIdx * (int)MapFinalizeState.NumStates; + + return baseMapProgress + (int)_state; + } + + public override int GetMaximumProgress() + { + return LoadMaps.NumMaps * (int) MapFinalizeState.NumStates; + } + + public override bool IsCompleted() + { + return _finished; + } + + public override void BecomeInactive() + { + _finished = false; + _currMapIdx = -1; + _numThingsThisMapSoFar = 0; + } + + public override void DoPatching(Harmony instance) + { + instance.Patch(AccessTools.Method(typeof(Map), nameof(Map.FinalizeLoading)), new(typeof(FinalizeMap), nameof(OnMapStartFinalizeLoad)), new(typeof(FinalizeMap), nameof(OnMapFinishFinalizeLoad))); + + //SpawnThings + instance.Patch( + AccessTools.Method(typeof(GenSpawn), nameof(GenSpawn.Spawn), new[] {typeof(Thing), typeof(IntVec3), typeof(Map), typeof(Rot4), typeof(WipeMode), typeof(bool)}), + new(typeof(FinalizeMap), nameof(OnThingAboutToSpawn)) + ); + + //SpawnThings -> SpawnBuildings + instance.Patch(AccessTools.Method(typeof(GenSpawn), nameof(GenSpawn.SpawnBuildingAsPossible)), new(typeof(FinalizeMap), nameof(OnBuildingAboutToSpawn))); + + //SpawnBuildings -> RebuildingPathfindingCache + instance.Patch(AccessTools.Method(typeof(Map), nameof(Map.FinalizeInit)), new(typeof(FinalizeMap), nameof(OnMapStartFinalizeInit))); + + //RebuildingPathfindingCache -> FinalizeGeometry2 + instance.Patch(AccessTools.Method(typeof(RegionAndRoomUpdater), nameof(RegionAndRoomUpdater.RebuildAllRegionsAndRooms)), new(typeof(FinalizeMap), nameof(OnMapStartRebuildRegions))); + + //FinalizeGeometry -> InitThings + instance.Patch(AccessTools.Method(typeof(GasGrid), nameof(GasGrid.RecalculateEverHadGas)), postfix: new(typeof(FinalizeMap), nameof(OnMapFinishFinalizeGeometry))); + + //InitThings -> ListFilth + instance.Patch(AccessTools.Method(typeof(ListerFilthInHomeArea), nameof(ListerFilthInHomeArea.RebuildAll)), new(typeof(FinalizeMap), nameof(OnMapStartListFilth))); + + //ListFilth -> CountResources + instance.Patch(AccessTools.Method(typeof(ResourceCounter), nameof(ResourceCounter.UpdateResourceCounts)), new(typeof(FinalizeMap), nameof(OnMapStartCountResources))); + + //CountResources -> CountWealth + instance.Patch(AccessTools.Method(typeof(WealthWatcher), nameof(WealthWatcher.ForceRecount)), new(typeof(FinalizeMap), nameof(OnMapStartCountWealth))); + + //CountWealth -> FinalizeComponents + instance.Patch(AccessTools.Method(typeof(MapComponentUtility), nameof(MapComponentUtility.FinalizeInit)), new(typeof(FinalizeMap), nameof(OnMapStartFinalizeComponents))); + + //Transition to next map handled by postfix on FinalizeLoad + } + + public static void OnMapStartFinalizeLoad() + { + _currMapIdx++; + _numThingsThisMapSoFar = 0; + _state = MapFinalizeState.SpawnThings; + } + + public static void OnMapFinishFinalizeLoad() + { + if (_currMapIdx == LoadMaps.NumMaps - 1) + _finished = true; + } + + public static void OnThingAboutToSpawn() + { + _numThingsThisMapSoFar++; + } + + public static void OnBuildingAboutToSpawn() + { + _state = MapFinalizeState.SpawnBuildings; + _numBuildingsThisMapSoFar++; + } + + public static void OnMapStartFinalizeInit() + { + _state = MapFinalizeState.RebuildingPathfindingCache; + } + + public static void OnMapStartRebuildRegions() + { + _state = MapFinalizeState.FinalizeGeometry; + } + + public static void OnMapFinishFinalizeGeometry() + { + _state = MapFinalizeState.InitThings; + } + + public static void OnMapStartListFilth() + { + _state = MapFinalizeState.ListFilth; + } + + public static void OnMapStartCountResources() + { + _state = MapFinalizeState.CountResources; + } + + public static void OnMapStartCountWealth() + { + _state = MapFinalizeState.CountWealth; + } + + public static void OnMapStartFinalizeComponents() + { + _state = MapFinalizeState.InitComponents; + } + } +} \ No newline at end of file diff --git a/Source/Stage/SaveLoad/4SpawnAllThings.cs b/Source/Stage/SaveLoad/4SpawnAllThings.cs deleted file mode 100644 index 106bcf6..0000000 --- a/Source/Stage/SaveLoad/4SpawnAllThings.cs +++ /dev/null @@ -1,87 +0,0 @@ -using HarmonyLib; -using JetBrains.Annotations; -using Verse; - -namespace BetterLoading.Stage.SaveLoad -{ - public class SpawnAllThings : LoadingStage - { - private static int _currMapIdx = -1; - private static int _numThingsThisMapSoFar; - - private static bool _finished; - - public SpawnAllThings([NotNull] Harmony instance) : base(instance) - { - } - - public override string GetStageName() - { - return "Spawning all things"; - } - - public override string? GetCurrentStepName() - { - if (_currMapIdx == -1) - return "Waiting..."; - - return $"Map {_currMapIdx + 1} of {LoadMaps.NumMaps}: {_numThingsThisMapSoFar} spawned so far"; - } - - public override int GetCurrentProgress() - { - if (_currMapIdx == -1) - return 0; - - return _currMapIdx; - } - - public override int GetMaximumProgress() - { - return LoadMaps.NumMaps; - } - - public override bool IsCompleted() - { - return _finished; - } - - public override void BecomeInactive() - { - _finished = false; - _currMapIdx = -1; - _numThingsThisMapSoFar = 0; - } - - public override void DoPatching(Harmony instance) - { - instance.Patch(AccessTools.Method(typeof(Map), nameof(Map.FinalizeLoading)), new(typeof(SpawnAllThings), nameof(OnMapStartFinalizing)), new(typeof(SpawnAllThings), nameof(OnMapFinishFinalizing))); - - //Things - instance.Patch( - AccessTools.Method(typeof(GenSpawn), nameof(GenSpawn.Spawn), new[] {typeof(Thing), typeof(IntVec3), typeof(Map), typeof(Rot4), typeof(WipeMode), typeof(bool)}), - new(typeof(SpawnAllThings), nameof(OnThingAboutToSpawn)) - ); - - //Buildings - instance.Patch(AccessTools.Method(typeof(GenSpawn), nameof(GenSpawn.SpawnBuildingAsPossible)), new(typeof(SpawnAllThings), nameof(OnThingAboutToSpawn))); - } - - public static void OnMapStartFinalizing() - { - _currMapIdx++; - _numThingsThisMapSoFar = 0; - } - - public static void OnMapFinishFinalizing() - { - if (_currMapIdx == LoadMaps.NumMaps - 1) - _finished = true; - } - - public static void OnThingAboutToSpawn() - { - _numThingsThisMapSoFar++; - } - } -} \ No newline at end of file