From 277d3871c26fc0a86628c3b2215e614b22ebf2f9 Mon Sep 17 00:00:00 2001 From: Oliveriver Date: Mon, 2 Jan 2023 07:39:11 +0000 Subject: [PATCH] Graceful fossil error handling (#3951) * Fossil error handling * Print error * Update comments --- .../fossilisation/FossilisedSpecies.cs | 21 +++++++++++++------ .../pages/ThriveopediaMuseumPage.cs | 7 +++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/thriveopedia/fossilisation/FossilisedSpecies.cs b/src/thriveopedia/fossilisation/FossilisedSpecies.cs index b810efa3dc8..b86c91d9cf9 100644 --- a/src/thriveopedia/fossilisation/FossilisedSpecies.cs +++ b/src/thriveopedia/fossilisation/FossilisedSpecies.cs @@ -118,16 +118,25 @@ public static bool IsSpeciesAlreadyFossilised(string name, List? existin /// Loads a fossilised species by its filename. /// /// The name of the .thrivefossil file (including extension) - /// The species saved in the provided file - public static FossilisedSpecies LoadSpeciesFromFile(string fossilName) + /// The species saved in the provided file, or null if the file doesn't exist or is corrupt + public static FossilisedSpecies? LoadSpeciesFromFile(string fossilName) { var target = Path.Combine(Constants.FOSSILISED_SPECIES_FOLDER, fossilName); - var (fossilisedInfo, species, previewImage) = LoadFromFile(target); + try + { + var (fossilisedInfo, species, previewImage) = LoadFromFile(target); - return new FossilisedSpecies(fossilisedInfo, species, Path.GetFileNameWithoutExtension(fossilName)) + return new FossilisedSpecies(fossilisedInfo, species, Path.GetFileNameWithoutExtension(fossilName)) + { + PreviewImage = previewImage, + }; + } + catch (Exception e) { - PreviewImage = previewImage, - }; + // This fossil doesn't exist or is corrupt, so just don't bother showing it + GD.PrintErr($"Error loading fossil: {e}"); + return null; + } } /// diff --git a/src/thriveopedia/pages/ThriveopediaMuseumPage.cs b/src/thriveopedia/pages/ThriveopediaMuseumPage.cs index 8d5e5530463..8e958f471b2 100644 --- a/src/thriveopedia/pages/ThriveopediaMuseumPage.cs +++ b/src/thriveopedia/pages/ThriveopediaMuseumPage.cs @@ -59,10 +59,13 @@ public override void OnThriveopediaOpened() foreach (var speciesName in FossilisedSpecies.CreateListOfFossils(true)) { - var card = (MuseumCard)museumCardScene.Instance(); - var savedSpecies = FossilisedSpecies.LoadSpeciesFromFile(speciesName); + // Don't add cards for corrupt fossils + if (savedSpecies == null) + continue; + + var card = (MuseumCard)museumCardScene.Instance(); card.SavedSpecies = savedSpecies.Species; card.FossilPreviewImage = savedSpecies.PreviewImage; card.Connect(nameof(MuseumCard.OnSpeciesSelected), this, nameof(UpdateSpeciesPreview));