From 5e5483367daa070d884d35bd0d8d54e4ae00aafa Mon Sep 17 00:00:00 2001 From: Tim Van Baak Date: Mon, 12 Aug 2024 14:51:07 -0700 Subject: [PATCH] Remove Season.Past so all lookups go through World --- MultiversalDiplomacy/Adjudicate/PathFinder.cs | 14 +++++++------- MultiversalDiplomacy/Model/Season.cs | 8 -------- MultiversalDiplomacy/Model/World.cs | 9 ++++++--- .../MovementAdjudicatorTest.cs | 6 +++--- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/MultiversalDiplomacy/Adjudicate/PathFinder.cs b/MultiversalDiplomacy/Adjudicate/PathFinder.cs index 95e1319..bd5c415 100644 --- a/MultiversalDiplomacy/Adjudicate/PathFinder.cs +++ b/MultiversalDiplomacy/Adjudicate/PathFinder.cs @@ -114,17 +114,17 @@ public static class PathFinder List adjacents = []; // The immediate past and all immediate futures are adjacent. - if (season.Past != null) adjacents.Add(season.Past); + if (season.PastId != null) adjacents.Add(world.GetSeason(season.PastId)); adjacents.AddRange(season.Futures); // Find all adjacent timelines by finding all timelines that branched off of this season's // timeline, i.e. all futures of this season's past that have different timelines. Also // include any timelines that branched off of the timeline this timeline branched off from. - List adjacentTimelineRoots = new(); + List adjacentTimelineRoots = []; Season? current; for (current = season; - current?.Past?.Timeline != null && current.Past.Timeline == current.Timeline; - current = current.Past) + current?.PastId != null && world.GetSeason(current.PastId).Timeline == current.Timeline; + current = world.GetSeason(current.PastId)) { adjacentTimelineRoots.AddRange( current.Futures.Where(s => s.Timeline != current.Timeline)); @@ -135,10 +135,10 @@ public static class PathFinder // then current is the branch timeline's root season (current.past.timeline != // current.timeline). There are co-branches if this season is in a branched timeline, since // the first timeline by definition cannot have co-branches. - if (current?.Past != null) + if (current?.PastId != null && world.GetSeason(current.PastId) is Season past) { - IEnumerable cobranchRoots = current.Past.Futures - .Where(s => s.Timeline != current.Timeline && s.Timeline != current.Past.Timeline); + IEnumerable cobranchRoots = past.Futures + .Where(s => s.Timeline != current.Timeline && s.Timeline != past.Timeline); adjacentTimelineRoots.AddRange(cobranchRoots); } diff --git a/MultiversalDiplomacy/Model/Season.cs b/MultiversalDiplomacy/Model/Season.cs index d9109b0..337edfb 100644 --- a/MultiversalDiplomacy/Model/Season.cs +++ b/MultiversalDiplomacy/Model/Season.cs @@ -10,13 +10,6 @@ public class Season /// public const int FIRST_TURN = 0; - /// - /// The season immediately preceding this season. - /// If this season is an alternate timeline root, the past is from the origin timeline. - /// The initial season does not have a past. - /// - public Season? Past { get; } - /// /// The designation of the season immediately preceding this season. /// If this season is an alternate timeline root, the past is from the origin timeline. @@ -54,7 +47,6 @@ public class Season private Season(Season? past, int turn, string timeline, TimelineFactory factory) { - this.Past = past; this.PastId = past?.ToString(); this.Turn = turn; this.Timeline = timeline; diff --git a/MultiversalDiplomacy/Model/World.cs b/MultiversalDiplomacy/Model/World.cs index b47c29e..6d063fe 100644 --- a/MultiversalDiplomacy/Model/World.cs +++ b/MultiversalDiplomacy/Model/World.cs @@ -245,9 +245,12 @@ public class World /// public Season GetTimelineRoot(Season season) { - Season? past = season.Past; - return past != null && season.Timeline == past.Timeline - ? GetTimelineRoot(season.Past!) + if (season.PastId is null) { + return season; + } + Season past = SeasonLookup[season.PastId]; + return season.Timeline == past.Timeline + ? GetTimelineRoot(past) : season; } diff --git a/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs b/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs index 111c5cd..64c3341 100644 --- a/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs +++ b/MultiversalDiplomacyTests/MovementAdjudicatorTest.cs @@ -171,7 +171,7 @@ public class MovementAdjudicatorTest // Confirm the future was created Assert.That(updated.Seasons.Count, Is.EqualTo(2)); Season future = updated.Seasons.Single(s => s != updated.RootSeason); - Assert.That(future.Past, Is.EqualTo(updated.RootSeason)); + Assert.That(future.PastId, Is.EqualTo(updated.RootSeason.ToString())); Assert.That(future.Futures, Is.Empty); Assert.That(future.Timeline, Is.EqualTo(updated.RootSeason.Timeline)); Assert.That(future.Turn, Is.EqualTo(Season.FIRST_TURN + 1)); @@ -200,7 +200,7 @@ public class MovementAdjudicatorTest // Confirm the future was created Season s2 = updated.GetSeason("a", 1); - Assert.That(s2.Past, Is.EqualTo(s1)); + Assert.That(s2.PastId, Is.EqualTo(s1.ToString())); Assert.That(s2.Futures, Is.Empty); Assert.That(s2.Timeline, Is.EqualTo(s1.Timeline)); Assert.That(s2.Turn, Is.EqualTo(s1.Turn + 1)); @@ -250,7 +250,7 @@ public class MovementAdjudicatorTest // Confirm the future was created Season s2 = updated.GetSeason(s1.Timeline, s1.Turn + 1); - Assert.That(s2.Past, Is.EqualTo(s1)); + Assert.That(s2.PastId, Is.EqualTo(s1.ToString())); Assert.That(s2.Futures, Is.Empty); Assert.That(s2.Timeline, Is.EqualTo(s1.Timeline)); Assert.That(s2.Turn, Is.EqualTo(s1.Turn + 1));