zc
This commit is contained in:
172
Source/ArachnaeSwarm/Stat/StatWorker_IncubationInfo.cs
Normal file
172
Source/ArachnaeSwarm/Stat/StatWorker_IncubationInfo.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using System.Linq;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
// ARA_IncubationCost 的 StatWorker
|
||||
public class StatWorker_IncubationCost : StatWorker
|
||||
{
|
||||
public override bool ShouldShowFor(StatRequest req)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 只在拥有 CompProperties_ExtraIncubationInfo 的 ThingDef 上显示
|
||||
if (!base.ShouldShowFor(req))
|
||||
return false;
|
||||
|
||||
return HasIncubationComp(req);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationCost.ShouldShowFor for {req.Def?.defName}: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override float GetValueUnfinalized(StatRequest req, bool applyPostProcess = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 从 ThingDef 的 statBases 中获取值
|
||||
if (req.Def is ThingDef thingDef)
|
||||
{
|
||||
var statModifier = thingDef.statBases?.FirstOrDefault(s => s.stat == this.stat);
|
||||
if (statModifier != null)
|
||||
{
|
||||
return statModifier.value;
|
||||
}
|
||||
}
|
||||
|
||||
return base.GetValueUnfinalized(req, applyPostProcess);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationCost.GetValueUnfinalized for {req.Def?.defName}: {ex.Message}");
|
||||
return 0f;
|
||||
}
|
||||
}
|
||||
|
||||
public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!HasIncubationComp(req))
|
||||
return string.Empty;
|
||||
|
||||
float value = GetValueUnfinalized(req);
|
||||
return "IncubationCostDesc".Translate(value);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationCost.GetExplanationUnfinalized for {req.Def?.defName}: {ex.Message}");
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasIncubationComp(StatRequest req)
|
||||
{
|
||||
try
|
||||
{
|
||||
ThingDef thingDef = req.Def as ThingDef ?? req.Thing?.def;
|
||||
return thingDef?.comps?.Any(c => c is CompProperties_ExtraIncubationInfo) == true;
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationCost.HasIncubationComp for {req.Def?.defName}: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ARA_IncubationTime 的 StatWorker
|
||||
public class StatWorker_IncubationTime : StatWorker
|
||||
{
|
||||
public override bool ShouldShowFor(StatRequest req)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 只在拥有 CompProperties_ExtraIncubationInfo 的 ThingDef 上显示
|
||||
if (!base.ShouldShowFor(req))
|
||||
return false;
|
||||
|
||||
return HasIncubationComp(req);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationTime.ShouldShowFor for {req.Def?.defName}: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override float GetValueUnfinalized(StatRequest req, bool applyPostProcess = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 从 ThingDef 的 statBases 中获取值
|
||||
if (req.Def is ThingDef thingDef)
|
||||
{
|
||||
var statModifier = thingDef.statBases?.FirstOrDefault(s => s.stat == this.stat);
|
||||
if (statModifier != null)
|
||||
{
|
||||
return statModifier.value;
|
||||
}
|
||||
}
|
||||
|
||||
return base.GetValueUnfinalized(req, applyPostProcess);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationTime.GetValueUnfinalized for {req.Def?.defName}: {ex.Message}");
|
||||
return 0f;
|
||||
}
|
||||
}
|
||||
|
||||
public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!HasIncubationComp(req))
|
||||
return string.Empty;
|
||||
|
||||
float value = GetValueUnfinalized(req);
|
||||
return "IncubationTimeDesc".Translate(value);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationTime.GetExplanationUnfinalized for {req.Def?.defName}: {ex.Message}");
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest req, bool finalized = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!HasIncubationComp(req))
|
||||
return base.GetStatDrawEntryLabel(stat, value, numberSense, req, finalized);
|
||||
|
||||
return value + " days";
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationTime.GetStatDrawEntryLabel for {req.Def?.defName}: {ex.Message}");
|
||||
return value.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasIncubationComp(StatRequest req)
|
||||
{
|
||||
try
|
||||
{
|
||||
ThingDef thingDef = req.Def as ThingDef ?? req.Thing?.def;
|
||||
return thingDef?.comps?.Any(c => c is CompProperties_ExtraIncubationInfo) == true;
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
Log.Warning($"Error in StatWorker_IncubationTime.HasIncubationComp for {req.Def?.defName}: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user