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(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; } } } }