From 6767feb57c4b19c219e8e7b6292eaefadeb1fcc6 Mon Sep 17 00:00:00 2001 From: amevarashi Date: Mon, 1 Aug 2022 17:57:29 +0500 Subject: [PATCH] Refactor Thought_IncreaseRecord, also fix null error in it if no sexperience --- .../ThoughtDefExtension_IncreaseRecord.cs | 19 +++++ .../Thoughts/Thought_IncreaseRecord.cs | 69 ++++--------------- 2 files changed, 31 insertions(+), 57 deletions(-) diff --git a/Source/IdeologyAddon/Thoughts/ThoughtDefExtension_IncreaseRecord.cs b/Source/IdeologyAddon/Thoughts/ThoughtDefExtension_IncreaseRecord.cs index 29c2d6d..63ce3d7 100644 --- a/Source/IdeologyAddon/Thoughts/ThoughtDefExtension_IncreaseRecord.cs +++ b/Source/IdeologyAddon/Thoughts/ThoughtDefExtension_IncreaseRecord.cs @@ -1,4 +1,5 @@ using RimWorld; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using Verse; @@ -10,5 +11,23 @@ namespace RJWSexperience public RecordDef recordDef; [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] public float increment; + + public override IEnumerable ConfigErrors() + { + foreach (string error in base.ConfigErrors()) + { + yield return error; + } + + if (recordDef == null) + { + yield return " is empty"; + } + + if (increment == 0f) + { + yield return " is empty or 0"; + } + } } } diff --git a/Source/IdeologyAddon/Thoughts/Thought_IncreaseRecord.cs b/Source/IdeologyAddon/Thoughts/Thought_IncreaseRecord.cs index 0673802..f229813 100644 --- a/Source/IdeologyAddon/Thoughts/Thought_IncreaseRecord.cs +++ b/Source/IdeologyAddon/Thoughts/Thought_IncreaseRecord.cs @@ -1,70 +1,25 @@ using RimWorld; -using Verse; namespace RJWSexperience { + /// + /// Increments record every time the thought is added + /// The increment is permanent + /// public class Thought_IncreaseRecord : Thought_Memory { - private ThoughtDefExtension_IncreaseRecord extension; - - protected ThoughtDefExtension_IncreaseRecord Extension - { - get - { - if (extension == null) - extension = def.GetModExtension(); - return extension; - } - } - - protected RecordDef RecordDef => Extension.recordDef; - protected float Increment => Extension.increment; - - protected float recordIncrement; - - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref recordIncrement, "recordIncrement", recordIncrement, true); - } - - public override void ThoughtInterval() - { - base.ThoughtInterval(); - if (recordIncrement != 0) - { - pawn.records.AddTo(RecordDef, recordIncrement); - recordIncrement = 0; - } - } - + /// + /// This method is called for every thought right after the pawn is assigned + /// public override bool TryMergeWithExistingMemory(out bool showBubble) { - ThoughtHandler thoughts = pawn.needs.mood.thoughts; - if (thoughts.memories.NumMemoriesInGroup(this) >= def.stackLimit) + var defExtension = def.GetModExtension(); + + if (defExtension != null) { - Thought_IncreaseRecord thought_Memory = (Thought_IncreaseRecord)thoughts.memories.OldestMemoryInGroup(this); - if (thought_Memory != null) - { - showBubble = (thought_Memory.age > thought_Memory.def.DurationTicks / 2); - thought_Memory.Merged(); - return true; - } + pawn.records.AddTo(defExtension.recordDef, defExtension.increment); } - showBubble = true; - return false; - } - - public override void Init() - { - base.Init(); - recordIncrement = Increment; - } - - protected virtual void Merged() - { - age = 0; - recordIncrement += Increment; + return base.TryMergeWithExistingMemory(out showBubble); } } }