2024-10-16 14:11:05 +02:00
|
|
|
using System;
|
2024-04-04 23:05:34 +02:00
|
|
|
using System.Collections.Generic;
|
2024-10-16 14:11:05 +02:00
|
|
|
using System.Linq.Expressions;
|
|
|
|
using System.Reflection;
|
2024-04-04 23:05:34 +02:00
|
|
|
using Verse;
|
|
|
|
|
|
|
|
namespace Template.Settings;
|
|
|
|
|
|
|
|
public class TemplateSettings : ModSettings
|
|
|
|
{
|
2024-10-16 14:11:05 +02:00
|
|
|
private static TemplateSettings DefaultValues() => new();
|
|
|
|
|
2024-04-04 23:05:34 +02:00
|
|
|
#region Scribe Helpers
|
2024-10-16 14:11:05 +02:00
|
|
|
private void LookStruct<T>(Expression<Func<T>> expression)
|
2024-04-04 23:05:34 +02:00
|
|
|
{
|
2024-10-16 14:11:05 +02:00
|
|
|
if (
|
|
|
|
expression.Body
|
|
|
|
is not MemberExpression
|
|
|
|
{
|
|
|
|
Member: MemberInfo { MemberType: MemberTypes.Field, Name: string memberName }
|
|
|
|
}
|
|
|
|
)
|
|
|
|
{
|
|
|
|
throw new ArgumentException(
|
|
|
|
"Invalid expression passed to LookField",
|
|
|
|
nameof(expression)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
FieldInfo fieldInfo = typeof(TemplateSettings).GetField(memberName);
|
|
|
|
T? value = fieldInfo.GetValue(this).ChangeType<T>();
|
|
|
|
T defaultValue = fieldInfo.GetValue(DefaultValues()).ChangeType<T>();
|
|
|
|
Scribe_Values.Look(ref value, memberName, defaultValue);
|
|
|
|
fieldInfo.SetValue(this, value);
|
2024-04-04 23:05:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private static void LookHashSet<T>(
|
|
|
|
ref HashSet<T> valueHashSet,
|
|
|
|
string label,
|
|
|
|
HashSet<T> defaultValues
|
|
|
|
)
|
|
|
|
where T : notnull
|
|
|
|
{
|
|
|
|
if (Scribe.mode == LoadSaveMode.Saving && valueHashSet is null)
|
|
|
|
{
|
2024-10-16 14:11:05 +02:00
|
|
|
TemplateMod.Warn(label + " is null before saving. Reinitializing with default values.");
|
2024-04-04 23:05:34 +02:00
|
|
|
valueHashSet = defaultValues;
|
|
|
|
}
|
|
|
|
Scribe_Collections.Look(ref valueHashSet, label, lookMode: LookMode.Value);
|
|
|
|
if (Scribe.mode == LoadSaveMode.LoadingVars && valueHashSet is null)
|
|
|
|
{
|
2024-10-16 14:11:05 +02:00
|
|
|
TemplateMod.Warn(label + " is null after loading. Reinitializing with default values.");
|
2024-04-04 23:05:34 +02:00
|
|
|
valueHashSet = defaultValues;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
2024-10-16 14:11:05 +02:00
|
|
|
public bool TemplateEnabled;
|
|
|
|
|
|
|
|
public TemplateSettings()
|
|
|
|
{
|
|
|
|
Reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void Reset()
|
|
|
|
{
|
|
|
|
TemplateEnabled = true;
|
|
|
|
}
|
|
|
|
|
2024-04-04 23:05:34 +02:00
|
|
|
public override void ExposeData()
|
|
|
|
{
|
|
|
|
base.ExposeData();
|
2024-10-16 14:11:05 +02:00
|
|
|
|
|
|
|
LookStruct(() => TemplateEnabled);
|
2024-04-04 23:05:34 +02:00
|
|
|
}
|
|
|
|
}
|