AxibugEmuOnline/AxibugEmuOnline.Client/Assets/MyNes.Core/ISettings.cs
2024-07-03 18:22:22 +08:00

154 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace MyNes.Core
{
public abstract class ISettings
{
protected string filePath;
protected FieldInfo[] Fields;
public ISettings(string filePath)
{
this.filePath = filePath;
}
public virtual void LoadSettings()
{
Fields = GetType().GetFields();
if (!File.Exists(filePath))
{
return;
}
string[] array = File.ReadAllLines(filePath);
for (int i = 0; i < array.Length; i++)
{
string[] array2 = array[i].Split('=');
if (array2 != null && array2.Length == 2)
{
SetField(array2[0], array2[1]);
}
}
}
public virtual void SaveSettings()
{
Fields = GetType().GetFields();
List<string> list = new List<string>();
FieldInfo[] fields = Fields;
foreach (FieldInfo fieldInfo in fields)
{
if (fieldInfo.IsPublic)
{
list.Add(fieldInfo.Name + "=" + GetFieldValue(fieldInfo));
}
}
File.WriteAllLines(filePath, list.ToArray());
}
protected virtual void SetField(string fieldName, string val)
{
for (int i = 0; i < Fields.Length; i++)
{
if (!(Fields[i].Name == fieldName))
{
continue;
}
if (Fields[i].FieldType == typeof(string))
{
Fields[i].SetValue(this, val);
}
else if (Fields[i].FieldType == typeof(bool))
{
Fields[i].SetValue(this, val == "1");
}
else if (Fields[i].FieldType == typeof(int))
{
int result = 0;
if (int.TryParse(val, out result))
{
Fields[i].SetValue(this, result);
}
}
else if (Fields[i].FieldType == typeof(float))
{
float result2 = 0f;
if (float.TryParse(val, out result2))
{
Fields[i].SetValue(this, result2);
}
}
else if (Fields[i].FieldType == typeof(string[]))
{
string[] value = val.Split(new string[1] { "*" }, StringSplitOptions.RemoveEmptyEntries);
Fields[i].SetValue(this, value);
}
else
{
Tracer.WriteLine("Unknown setting type = " + Fields[i].FieldType);
}
break;
}
}
protected virtual string GetFieldValue(string fieldName)
{
for (int i = 0; i < Fields.Length; i++)
{
if (Fields[i].Name == fieldName)
{
return GetFieldValue(Fields[i]);
}
}
return "";
}
protected virtual string GetFieldValue(FieldInfo field)
{
object value = field.GetValue(this);
if (field.FieldType == typeof(string))
{
return value.ToString();
}
if (field.FieldType == typeof(bool))
{
if (!(bool)value)
{
return "0";
}
return "1";
}
if (field.FieldType == typeof(int))
{
return value.ToString();
}
if (field.FieldType == typeof(float))
{
return value.ToString();
}
if (field.FieldType == typeof(string[]))
{
string text = "";
string[] array = (string[])value;
if (array != null)
{
string[] array2 = array;
foreach (string text2 in array2)
{
text = text + text2 + "*";
}
}
if (text.Length > 0)
{
return text.Substring(0, text.Length - 1);
}
return "";
}
return "";
}
}
}