Refactor ThoughtDefExtension_StageFromOpinion

This commit is contained in:
amevarashi 2022-10-14 20:57:17 +05:00
parent eda7261968
commit 5db34c0c1f
3 changed files with 26 additions and 23 deletions

View file

@ -270,7 +270,7 @@
<ThoughtDef> <ThoughtDef>
<defName>Virgin_Precious_Taken</defName> <defName>Virgin_Precious_Taken</defName>
<thoughtClass>RJWSexperience.Thought_Opinionbased</thoughtClass> <thoughtClass>RJWSexperience.Ideology.Thought_Opinionbased</thoughtClass>
<durationDays>7</durationDays> <durationDays>7</durationDays>
<stackLimit>1</stackLimit> <stackLimit>1</stackLimit>
<stages> <stages>
@ -296,7 +296,7 @@
</li> </li>
</stages> </stages>
<modExtensions> <modExtensions>
<li Class="RJWSexperience.ThoughtDefExtension_StageFromOpinion"> <li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<minimumValueforStage> <minimumValueforStage>
<li>-100</li> <li>-100</li>
<li>-50</li> <li>-50</li>
@ -309,7 +309,7 @@
<ThoughtDef> <ThoughtDef>
<defName>Virgin_Shameful_Taken</defName> <defName>Virgin_Shameful_Taken</defName>
<thoughtClass>RJWSexperience.Thought_Opinionbased</thoughtClass> <thoughtClass>RJWSexperience.Ideology.Thought_Opinionbased</thoughtClass>
<durationDays>7</durationDays> <durationDays>7</durationDays>
<stackLimit>1</stackLimit> <stackLimit>1</stackLimit>
<stages> <stages>
@ -330,7 +330,7 @@
</li> </li>
</stages> </stages>
<modExtensions> <modExtensions>
<li Class="RJWSexperience.ThoughtDefExtension_StageFromOpinion"> <li Class="RJWSexperience.Ideology.ThoughtDefExtension_StageFromValue">
<minimumValueforStage> <minimumValueforStage>
<li>-100</li> <li>-100</li>
<li>0</li> <li>0</li>

View file

@ -2,13 +2,26 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Verse; using Verse;
namespace RJWSexperience namespace RJWSexperience.Ideology
{ {
public class ThoughtDefExtension_StageFromOpinion : DefModExtension public class ThoughtDefExtension_StageFromValue : DefModExtension
{ {
[SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")] [SuppressMessage("Minor Code Smell", "S1104:Fields should not have public accessibility", Justification = "Field value loaded from XML")]
public List<float> minimumValueforStage = new List<float>(); public List<float> minimumValueforStage = new List<float>();
public int GetStageIndex(float value)
{
for (int i = minimumValueforStage.Count - 1; i > 0; i--)
{
if (minimumValueforStage[i] < value)
{
return i;
}
}
return 0;
}
public override IEnumerable<string> ConfigErrors() public override IEnumerable<string> ConfigErrors()
{ {
foreach (string error in base.ConfigErrors()) foreach (string error in base.ConfigErrors())

View file

@ -1,22 +1,21 @@
using RimWorld; using RimWorld;
using System.Collections.Generic;
using Verse; using Verse;
namespace RJWSexperience namespace RJWSexperience.Ideology
{ {
public class Thought_Opinionbased : Thought_Memory public class Thought_Opinionbased : Thought_Memory
{ {
private List<float> minimumValueforStage; private ThoughtDefExtension_StageFromValue stageFromValue;
protected List<float> MinimumValueforStage protected ThoughtDefExtension_StageFromValue StageFromValue
{ {
get get
{ {
if (minimumValueforStage == null) if (stageFromValue == null)
{ {
minimumValueforStage = def.GetModExtension<ThoughtDefExtension_StageFromOpinion>().minimumValueforStage; stageFromValue = def.GetModExtension<ThoughtDefExtension_StageFromValue>();
} }
return minimumValueforStage; return stageFromValue;
} }
} }
@ -47,16 +46,7 @@ namespace RJWSexperience
} }
float value = pawn.relations?.OpinionOf(otherPawn) ?? 0f; float value = pawn.relations?.OpinionOf(otherPawn) ?? 0f;
SetForcedStage(StageFromValue.GetStageIndex(value));
for (int i = MinimumValueforStage.Count - 1; i > 0; i--)
{
if (MinimumValueforStage[i] < value)
{
SetForcedStage(i);
return;
}
}
SetForcedStage(0);
} }
} }
} }