Files
2025-11-19 10:17:55 +08:00

117 lines
4.1 KiB
C#

using System;
using UnityEngine;
using System.IO;
namespace CharacterPreview
{
[Serializable]
public class ConfigData
{
public Vector3 modelPosition;
public Vector3 modelRotation;
public float modelScale;
public bool use = false;
public bool tip = true;
public bool hideCamera = true;
public bool showSetEditButton = true;
public bool canEdit = true;
public float editSpeed = 1;
public bool showEquipment = true;
}
[Serializable]
public class Config
{
private const string MOD_ID = "CharacterPreview";
private string configSavePath;
public ConfigData data = new ConfigData();
public Config(string savePath)
{
configSavePath = savePath;
}
public void Save()
{
data.use = true;
var json = JsonUtility.ToJson(data, true);
File.WriteAllText(configSavePath, json);
}
public static Config Load(string savePath)
{
if (!File.Exists(savePath))
{
try
{
File.Create(savePath).Dispose();
}
catch (IOException ex)
{
Debug.LogError($"Failed to create empty config file at {savePath}: {ex.Message}");
return new Config(savePath) { data = new ConfigData() };
}
}
var json = File.ReadAllText(savePath);
var loadedData = JsonUtility.FromJson<ConfigData>(json);
var config = new Config(savePath);
config.data = loadedData ?? new ConfigData();
config.GenerateSetting();
return config;
}
public void GenerateSetting()
{
if (!Api.ModConfigAPI.Initialize())
return;
Api.ModConfigAPI.SafeAddBoolDropdownList(MOD_ID, "use", "使用配置中保存的位置数据", data.use);
Api.ModConfigAPI.SafeAddBoolDropdownList(MOD_ID, "tip", "开启操作提示", data.tip);
Api.ModConfigAPI.SafeAddBoolDropdownList(MOD_ID,"hideCamera","隐藏摄像机模型", data.hideCamera);
Api.ModConfigAPI.SafeAddBoolDropdownList(MOD_ID, "showSetEditButton", "显示启用编辑按钮", data.showSetEditButton);
Api.ModConfigAPI.SafeAddBoolDropdownList(MOD_ID, "canEdit", "是否启用编辑", data.canEdit);
Api.ModConfigAPI.SafeAddBoolDropdownList(MOD_ID, "showEquipment", "显示装备", data.showEquipment);
Api.ModConfigAPI.SafeAddInputWithSlider(MOD_ID, "editSpeed", "编辑灵敏度", typeof(float), 1,
new Vector2(0.1f, 10));
Api.ModConfigAPI.SafeAddOnOptionsChangedDelegate(OnSettingChange);
}
public void OnSettingChange(string key)
{
var content = key.Split('_');
if(content.Length<2||content[0]!=MOD_ID)
return;
key = content[1];
Debug.Log($"OnSettingChange_{key}");
switch (key)
{
case "use":
data.use = Api.ModConfigAPI.SafeLoad(MOD_ID, "use", false);
break;
case "tip":
data.tip = Api.ModConfigAPI.SafeLoad(MOD_ID, "tip", true);
break;
case "hideCamera":
data.hideCamera = Api.ModConfigAPI.SafeLoad(MOD_ID, "hideCamera", true);
break;
case "showSetEditButton":
data.showSetEditButton = Api.ModConfigAPI.SafeLoad(MOD_ID, "showSetEditButton", true);
break;
case "canEdit":
data.canEdit = Api.ModConfigAPI.SafeLoad(MOD_ID, "canEdit", true);
break;
case "showEquipment":
data.showEquipment = Api.ModConfigAPI.SafeLoad(MOD_ID, "showEquipment", true);
break;
case "editSpeed":
data.editSpeed = Api.ModConfigAPI.SafeLoad(MOD_ID, "editSpeed", 1f);
break;
}
}
}
}