From d55bbddd88f28c0867d56123150dbcaba544505c Mon Sep 17 00:00:00 2001 From: Elliot Thomas Date: Tue, 17 Jan 2023 15:52:52 +0000 Subject: [PATCH] Restrict stacks by pattern and refactor comps --- Assemblies/NamedSubcores.dll | Bin 8704 -> 8704 bytes Source/NamedSubcores/Comps/BasePatternComp.cs | 11 +++---- .../NamedSubcores/Comps/InspectPatternComp.cs | 19 +++++++++++ .../NamedSubcores/Comps/MechGestatorComp.cs | 31 ++---------------- Source/NamedSubcores/Comps/MechPatternComp.cs | 2 +- .../NamedSubcores/Comps/SubcorePatternComp.cs | 21 ++++++++++-- .../NamedSubcores/Comps/SubcoreScannerComp.cs | 12 ++----- .../Harmony/Harmony_Building_MechGestator.cs | 12 ++++--- .../Harmony_Building_SubcoreScanner.cs | 4 +-- Source/NamedSubcores/NamedSubcores.csproj | 3 +- 10 files changed, 61 insertions(+), 54 deletions(-) create mode 100644 Source/NamedSubcores/Comps/InspectPatternComp.cs diff --git a/Assemblies/NamedSubcores.dll b/Assemblies/NamedSubcores.dll index 4dd79f68224b247a65c2559975f0c13b6fa4ae79..724b0848c430878146d993ac3b33f8255c8cd17f 100644 GIT binary patch delta 3184 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 diff --git a/Source/NamedSubcores/Comps/BasePatternComp.cs b/Source/NamedSubcores/Comps/BasePatternComp.cs index dc53043..432ceb0 100644 --- a/Source/NamedSubcores/Comps/BasePatternComp.cs +++ b/Source/NamedSubcores/Comps/BasePatternComp.cs @@ -3,14 +3,14 @@ namespace NamedSubcores { /// - /// BasePatternComp implements the common features for the subcore and mech components. + /// BasePatternComp implements the common features for the pattern components. /// public class BasePatternComp : ThingComp { /// /// PatternName tracks the name of the pawn scanned. /// - public Name PatternName = null; + public Name PatternName; /// /// PostExposeData is used to save our component state. @@ -22,12 +22,11 @@ public override void PostExposeData() } /// - /// CompInspectStringExtra adds to the item inspection pane. + /// Reset allows the component to be reset for reuse. /// - /// - public override string CompInspectStringExtra() + public void Reset() { - return "Pattern".Translate() + ": " + (PatternName?.ToStringShort ?? "Unknown".Translate()); + PatternName = null; } } } diff --git a/Source/NamedSubcores/Comps/InspectPatternComp.cs b/Source/NamedSubcores/Comps/InspectPatternComp.cs new file mode 100644 index 0000000..8a7bf93 --- /dev/null +++ b/Source/NamedSubcores/Comps/InspectPatternComp.cs @@ -0,0 +1,19 @@ +using Verse; + +namespace NamedSubcores +{ + /// + /// InspectPatternComp implements the common inspect method for pattern components. + /// + public class InspectPatternComp : BasePatternComp + { + /// + /// CompInspectStringExtra adds to the item inspection pane. + /// + /// + public override string CompInspectStringExtra() + { + return "Pattern".Translate() + ": " + (PatternName?.ToStringShort ?? "Unknown".Translate()); + } + } +} diff --git a/Source/NamedSubcores/Comps/MechGestatorComp.cs b/Source/NamedSubcores/Comps/MechGestatorComp.cs index 5d2e4c5..d1d53a8 100644 --- a/Source/NamedSubcores/Comps/MechGestatorComp.cs +++ b/Source/NamedSubcores/Comps/MechGestatorComp.cs @@ -1,32 +1,7 @@ -using Verse; - -namespace NamedSubcores +namespace NamedSubcores { /// - /// MechGestatorComp is added to mech gestators and allows us to track the subcore component during gestation. + /// MechGestatorComp is added to mech gestators and allows us to track the subcore pattern during gestation. /// - public class MechGestatorComp : ThingComp - { - /// - /// SubcoreComp tracks the subcore component. - /// - public SubcorePatternComp SubcoreComp; - - /// - /// PostExposeData is used to save our component state. - /// - public override void PostExposeData() - { - Scribe_Deep.Look(ref SubcoreComp, "subcoreComp"); - base.PostExposeData(); - } - - /// - /// Reset allows the component to be reset for reuse. - /// - public void Reset() - { - SubcoreComp = null; - } - } + public class MechGestatorComp : BasePatternComp { } } diff --git a/Source/NamedSubcores/Comps/MechPatternComp.cs b/Source/NamedSubcores/Comps/MechPatternComp.cs index 25eee13..816cb4f 100644 --- a/Source/NamedSubcores/Comps/MechPatternComp.cs +++ b/Source/NamedSubcores/Comps/MechPatternComp.cs @@ -3,5 +3,5 @@ /// /// MechPatternComp is added to mechanoids and is used to track the pawn scanned into the subcore. /// - public class MechPatternComp : BasePatternComp { } + public class MechPatternComp : InspectPatternComp { } } diff --git a/Source/NamedSubcores/Comps/SubcorePatternComp.cs b/Source/NamedSubcores/Comps/SubcorePatternComp.cs index edc64ac..281e429 100644 --- a/Source/NamedSubcores/Comps/SubcorePatternComp.cs +++ b/Source/NamedSubcores/Comps/SubcorePatternComp.cs @@ -1,7 +1,24 @@ -namespace NamedSubcores +using Verse; + +namespace NamedSubcores { /// /// MechPatternComp is added to subcores and is used to track the pawn scanned into the subcore. /// - public class SubcorePatternComp : BasePatternComp { } + public class SubcorePatternComp : InspectPatternComp { + /// + /// AllowStackWith ensures that subcores can only be stacked with others of the same pattern. + /// + /// + /// + public override bool AllowStackWith(Thing other) + { + if (base.AllowStackWith(other) == false) { return false; }; + + SubcorePatternComp otherComp = other?.TryGetComp(); + if (otherComp == null) { return false; } + + return PatternName == otherComp.PatternName; + } + } } diff --git a/Source/NamedSubcores/Comps/SubcoreScannerComp.cs b/Source/NamedSubcores/Comps/SubcoreScannerComp.cs index ae26b79..3ede35f 100644 --- a/Source/NamedSubcores/Comps/SubcoreScannerComp.cs +++ b/Source/NamedSubcores/Comps/SubcoreScannerComp.cs @@ -5,35 +5,29 @@ namespace NamedSubcores /// /// SubcoreScannerComp is added to subcore scanners and allows us to track when a subcore is ejected. /// - public class SubcoreScannerComp : ThingComp + public class SubcoreScannerComp : BasePatternComp { /// /// Ejected tracks whether a subcore has just been ejected. /// public bool Ejected = false; - /// - /// PatternName tracks the name of the pawn in the scanner. - /// - public Name OccupantName; - /// /// PostExposeData is used to save our component state. /// public override void PostExposeData() { Scribe_Values.Look(ref Ejected, "ejected"); - Scribe_Deep.Look(ref OccupantName, "occupantName"); base.PostExposeData(); } /// /// Reset allows the component to be reset for reuse. /// - public void Reset() + public new void Reset() { + base.Reset(); Ejected = false; - OccupantName = null; } } } diff --git a/Source/NamedSubcores/Harmony/Harmony_Building_MechGestator.cs b/Source/NamedSubcores/Harmony/Harmony_Building_MechGestator.cs index 840592d..b07b1a6 100644 --- a/Source/NamedSubcores/Harmony/Harmony_Building_MechGestator.cs +++ b/Source/NamedSubcores/Harmony/Harmony_Building_MechGestator.cs @@ -1,6 +1,5 @@ using HarmonyLib; using RimWorld; -using System; using System.Linq; using Verse; @@ -15,7 +14,7 @@ internal class Harmony_Building_MechGestator internal static class Harmony_Building_MechGestator_Notify_AllGestationCyclesCompleted { /// - /// Prefix stores the subcore component for later use. + /// Prefix stores the subcore pattern for later use. /// /// internal static void Prefix(Building_MechGestator __instance) @@ -24,10 +23,13 @@ internal static void Prefix(Building_MechGestator __instance) Thing subcore = __instance.innerContainer.FirstOrDefault(hasNamedSubcoreComp); if (subcore == null) { return; } + SubcorePatternComp subcoreComp = subcore.TryGetComp(); + if (subcoreComp == null) { return; } + MechGestatorComp gestatorComp = __instance.GetComp(); if (gestatorComp == null) { return; } - gestatorComp.SubcoreComp = subcore.TryGetComp(); + gestatorComp.PatternName = subcoreComp.PatternName; } /// @@ -39,10 +41,10 @@ internal static void Postfix(Building_MechGestator __instance) MechGestatorComp gestatorComp = __instance.GetComp(); if (gestatorComp == null) { return; } - SubcorePatternComp mechComp = __instance.GestatingMech.GetComp(); + MechPatternComp mechComp = __instance.GestatingMech.GetComp(); if (mechComp == null) { return; } - mechComp.PatternName = gestatorComp?.SubcoreComp?.PatternName; + mechComp.PatternName = gestatorComp.PatternName; } } } diff --git a/Source/NamedSubcores/Harmony/Harmony_Building_SubcoreScanner.cs b/Source/NamedSubcores/Harmony/Harmony_Building_SubcoreScanner.cs index f582c1f..8c9ed78 100644 --- a/Source/NamedSubcores/Harmony/Harmony_Building_SubcoreScanner.cs +++ b/Source/NamedSubcores/Harmony/Harmony_Building_SubcoreScanner.cs @@ -33,7 +33,7 @@ internal static class Harmony_Building_SubcoreScanner_Tick internal static void Prefix(Building_SubcoreScanner __instance) { SubcoreScannerComp scannerComp = __instance.GetComp(); - scannerComp.OccupantName = __instance?.Occupant?.Name ?? null; + scannerComp.PatternName = __instance?.Occupant?.Name ?? null; } /// @@ -48,7 +48,7 @@ internal static void Postfix(Building_SubcoreScanner __instance) SubcorePatternComp subcoreComp = TryGetSubcoreComp(__instance); if (subcoreComp != null) { - subcoreComp.PatternName = scannerComp.OccupantName; + subcoreComp.PatternName = scannerComp.PatternName; } scannerComp.Reset(); diff --git a/Source/NamedSubcores/NamedSubcores.csproj b/Source/NamedSubcores/NamedSubcores.csproj index 84fe652..e1bc6c3 100644 --- a/Source/NamedSubcores/NamedSubcores.csproj +++ b/Source/NamedSubcores/NamedSubcores.csproj @@ -57,8 +57,9 @@ - + +