343 lines
12 KiB
C#
343 lines
12 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using System.IO;
|
|
|
|
[CreateAssetMenu(fileName = "SettingsData", menuName = "Settings/SettingsData", order = 0)]
|
|
public class SettingsData : ScriptableObject
|
|
{
|
|
[Tooltip("Ñïèñîê äåôîëòíûõ íàñòðîåê, áóäåò èñïîëüçîâàí ïðè ïåðâîì çàïóñêå èëè ïðè ñáðîñå")]
|
|
public List<SettingOption> defaultSettings = new List<SettingOption>();
|
|
|
|
public List<SettingOption> GetDefaults()
|
|
{
|
|
if (defaultSettings != null && defaultSettings.Count > 0)
|
|
return defaultSettings;
|
|
|
|
// fallback: âîçâðàùàåì âñòðîåííûå äåôîëòû
|
|
return CreateBuiltinDefaults();
|
|
}
|
|
|
|
// Ñîçäà¸ò íîâûé GameSettings (êëîíèðîâàííûé) íà îñíîâå defaultSettings èëè âñòðàèâàåìûõ äåôîëòîâ
|
|
public GameSettings CreateGameSettings()
|
|
{
|
|
var defaults = GetDefaults();
|
|
var gs = new GameSettings();
|
|
gs.settings = new List<SettingOption>();
|
|
|
|
foreach (var s in defaults)
|
|
{
|
|
gs.settings.Add(new SettingOption(s.settingName, new List<string>(s.options), s.defaultIndex, s.type, s.panelId));
|
|
}
|
|
|
|
gs.hash = ComputeHash(gs.settings);
|
|
return gs;
|
|
}
|
|
|
|
// Ñîçäà¸ò GameSettings íà îñíîâå âñòðîåííûõ äåôîëòîâ (ñòàòè÷åñêèé helper)
|
|
public static GameSettings CreateGameSettingsFromDefaults()
|
|
{
|
|
var defaults = CreateBuiltinDefaults();
|
|
var gs = new GameSettings();
|
|
gs.settings = new List<SettingOption>();
|
|
foreach (var s in defaults)
|
|
{
|
|
gs.settings.Add(new SettingOption(s.settingName, new List<string>(s.options), s.defaultIndex, s.type, s.panelId));
|
|
}
|
|
gs.hash = ComputeHash(gs.settings);
|
|
return gs;
|
|
}
|
|
|
|
private static int ComputeHash(List<SettingOption> settings)
|
|
{
|
|
var sb = new System.Text.StringBuilder();
|
|
foreach (var option in settings)
|
|
{
|
|
sb.Append(option.settingName);
|
|
foreach (var o in option.options)
|
|
{
|
|
sb.Append(o);
|
|
}
|
|
}
|
|
return sb.ToString().GetHashCode();
|
|
}
|
|
|
|
public static List<SettingOption> CreateBuiltinDefaults()
|
|
{
|
|
List<SettingOption> settings = new List<SettingOption>();
|
|
|
|
settings.Add(new SettingOption(settingName: "Ãðîìêîñòü ìóçûêè",
|
|
options: new List<string>() { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" },
|
|
defaultIndex: 1));
|
|
|
|
settings.Add(new SettingOption(settingName: "Ãðîìêîñòü ýôôåêòîâ",
|
|
options: new List<string>() { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" },
|
|
defaultIndex: 8));
|
|
|
|
settings.Add(new SettingOption(settingName: "Ãðîìêîñòü ãîëîñà",
|
|
options: new List<string>() { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" },
|
|
defaultIndex: 8));
|
|
settings.Add(new SettingOption(settingName: "QR-êîä äëÿ ñâÿçè",
|
|
options: new List<string>() { "Telegram", "WhatsApp" ,"Âñ¸"},
|
|
defaultIndex: 0));
|
|
settings.Add(new SettingOption(settingName: "Èãðîâàÿ òåìà",
|
|
options: new List<string>() { "Äåíü","Äåíü_2" ,"Íî÷ü" },
|
|
defaultIndex: 0));
|
|
settings.Add(new SettingOption(settingName: "Âûäà÷à ïðèçîâ ïðè èãðå ñ áîòîì",
|
|
options: new List<string>() { "Âûäàâàòü", "Íå âûäàâàòü" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Svitcher));
|
|
|
|
settings.Add(new SettingOption(settingName: "Áåñïëàòíàÿ èãðà",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 1,
|
|
type: SettingType.Svitcher));
|
|
settings.Add(new SettingOption(settingName: "Ïîêàçûâàòü êîíòàêòû àäìèíèñòðàöèè",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Svitcher));
|
|
|
|
settings.Add(new SettingOption(settingName: "Áûñòðàÿ ïðîâåðêà",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 1,
|
|
type: SettingType.Svitcher));
|
|
settings.Add(new SettingOption(settingName: "Áûñòðàÿ ïðîâåðêà íàëè÷èÿ ïðèçà",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 1,
|
|
type: SettingType.Svitcher));
|
|
settings.Add(new SettingOption(settingName: "Âûäàâàòü ïðèç ïðè îøèáêå",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 1,
|
|
type: SettingType.Svitcher));
|
|
settings.Add(new SettingOption(settingName: "Âûâîä îøèáêè âûäà÷è â ìåíþ",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 1,
|
|
type: SettingType.Svitcher));
|
|
settings.Add(new SettingOption(settingName: "Âûâîä èíôîðìàöèè î ñóïåðïðèçå â ìåíþ",
|
|
options: new List<string>() { "Âêë", "Âûêë" },
|
|
defaultIndex: 1,
|
|
type: SettingType.Svitcher));
|
|
|
|
// Íàñòðîéêè-ïàíåëè (îòêðûâàþòñÿ óäåðæàíèåì)
|
|
settings.Add(new SettingOption(
|
|
settingName: "Ââåñòè íîìåð òåëåôîíà òåõ-ïîääåðæêè",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Panel,
|
|
panelId: 0));
|
|
|
|
settings.Add(new SettingOption(
|
|
settingName: "Ââåñòè íîìåð äëÿ ñâÿçè â WhatsApp",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Panel,
|
|
panelId: 1));
|
|
|
|
settings.Add(new SettingOption(
|
|
settingName: "Ââåñòè íîìåð äëÿ ñâÿçè â Telegram",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Panel,
|
|
panelId: 2));
|
|
|
|
settings.Add(new SettingOption(
|
|
settingName: "Çàäàòü ÷àñîòó âûäà÷è ñïåöèàëüíîãî ïðèçà",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Panel,
|
|
panelId: 3));
|
|
settings.Add(new SettingOption(
|
|
settingName: "Çàäàòü ñóïåðïðèç",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Panel,
|
|
panelId: 4));
|
|
|
|
settings.Add(new SettingOption(
|
|
settingName: "Íàñòðîéêà ïåðñîíàæà",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Panel,
|
|
panelId: 5));
|
|
|
|
// Íàñòðîéêè-ýêøåíû (âûïîëíÿþòñÿ óäåðæàíèåì)
|
|
settings.Add(new SettingOption(
|
|
settingName: "Ñáðîñèòü ñ÷åò÷èê ìîíåò",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Action,
|
|
panelId: 100));
|
|
|
|
settings.Add(new SettingOption(
|
|
settingName: "Ñáðîñ ñòàòèñòèêè ïðèçîâ",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Action,
|
|
panelId: 101));
|
|
settings.Add(new SettingOption(
|
|
settingName: "Ñáðîñ ïðîãðåññà äî ñóïåðïðèçà",
|
|
options: new List<string>() { "" },
|
|
defaultIndex: 0,
|
|
type: SettingType.Action,
|
|
panelId: 102));
|
|
|
|
return settings;
|
|
}
|
|
|
|
// Ïîïûòêà çàãðóçèòü GameSettings èç JSON-ôàéëà. Âîçâðàùàåò null ïðè îøèáêå/îòñóòñòâèè ôàéëà.
|
|
public GameSettings TryLoadFromFile(string path)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(path)) return null;
|
|
string json = File.ReadAllText(path, System.Text.Encoding.UTF8);
|
|
var gs = JsonUtility.FromJson<GameSettings>(json);
|
|
return gs;
|
|
}
|
|
catch (System.Exception e)
|
|
{
|
|
Debug.LogWarning($"SettingsData.TryLoadFromFile failed: {e.Message}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Ïîïûòêà ñîõðàíèòü GameSettings â ôàéë. Âîçâðàùàåò true ïðè óñïåõå.
|
|
public bool TrySaveToFile(string path, GameSettings gs)
|
|
{
|
|
try
|
|
{
|
|
if (gs == null) return false;
|
|
string json = JsonUtility.ToJson(gs);
|
|
File.WriteAllText(path, json, System.Text.Encoding.UTF8);
|
|
return true;
|
|
}
|
|
catch (System.Exception e)
|
|
{
|
|
Debug.LogError($"SettingsData.TrySaveToFile failed: {e.Message}");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Çàãðóçèòü èç ôàéëà èëè ñîçäàòü äåôîëòíûé GameSettings è ñîõðàíèòü åãî
|
|
public GameSettings LoadOrCreateFromFile(string path)
|
|
{
|
|
var loaded = TryLoadFromFile(path);
|
|
if (loaded != null) return loaded;
|
|
|
|
var created = CreateGameSettings();
|
|
TrySaveToFile(path, created);
|
|
return created;
|
|
}
|
|
|
|
// Ïîïûòêà çàãðóçèòü GameSettings èç ôàéëà (ñòàòè÷åñêàÿ, íå òðåáóåò ýêçåìïëÿðà SettingsData)
|
|
public static GameSettings LoadFromFile(string path)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(path)) return null;
|
|
string json = File.ReadAllText(path, System.Text.Encoding.UTF8);
|
|
var gs = JsonUtility.FromJson<GameSettings>(json);
|
|
return gs;
|
|
}
|
|
catch (System.Exception e)
|
|
{
|
|
Debug.LogWarning($"SettingsData.LoadFromFile failed: {e.Message}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Ñîõðàíèòü GameSettings â ôàéë (ñòàòè÷åñêàÿ âåðñèÿ)
|
|
public static bool SaveToFile(string path, GameSettings gs)
|
|
{
|
|
try
|
|
{
|
|
if (gs == null) return false;
|
|
string json = JsonUtility.ToJson(gs);
|
|
File.WriteAllText(path, json, System.Text.Encoding.UTF8);
|
|
return true;
|
|
}
|
|
catch (System.Exception e)
|
|
{
|
|
Debug.LogError($"SettingsData.SaveToFile failed: {e.Message}");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Ñòàòè÷åñêàÿ ðåàëèçàöèÿ LoadOrCreate: ïûòàåòñÿ çàãðóçèòü, èíà÷å ñîçäà¸ò èç âñòðîåííûõ äåôîëòîâ è ñîõðàíÿåò
|
|
public static GameSettings LoadOrCreateFromFileStatic(string path)
|
|
{
|
|
var loaded = LoadFromFile(path);
|
|
if (loaded != null) return loaded;
|
|
|
|
var created = CreateGameSettingsFromDefaults();
|
|
SaveToFile(path, created);
|
|
return created;
|
|
}
|
|
|
|
const string DefaultFileName = "settings.json";
|
|
|
|
public static string GetDefaultFilePath()
|
|
{
|
|
return Path.Combine(Application.persistentDataPath, DefaultFileName);
|
|
}
|
|
|
|
// Îáåðòêè: ñòàòè÷åñêèå âåðñèè, èñïîëüçóþùèå ïóòü ïî óìîë÷àíèþ
|
|
public static GameSettings LoadFromDefaultPath()
|
|
{
|
|
return LoadFromFile(GetDefaultFilePath());
|
|
}
|
|
|
|
public static bool SaveToDefaultPath(GameSettings gs)
|
|
{
|
|
return SaveToFile(GetDefaultFilePath(), gs);
|
|
}
|
|
|
|
public static GameSettings LoadOrCreateFromFileDefault()
|
|
{
|
|
return LoadOrCreateFromFileStatic(GetDefaultFilePath());
|
|
}
|
|
|
|
// Ýêçåìïëÿðíûå îá¸ðòêè (ðàáîòàþò ÷åðåç ýòîò ScriptableObject)
|
|
public GameSettings TryLoadFromDefaultPath()
|
|
{
|
|
return TryLoadFromFile(GetDefaultFilePath());
|
|
}
|
|
|
|
public bool TrySaveToDefaultPath(GameSettings gs)
|
|
{
|
|
return TrySaveToFile(GetDefaultFilePath(), gs);
|
|
}
|
|
|
|
public GameSettings LoadOrCreateFromDefaultPath()
|
|
{
|
|
return LoadOrCreateFromFile(GetDefaultFilePath());
|
|
}
|
|
|
|
// Âîçâðàùàåò õåø äåôîëòîâ (÷òîáû íå ñîçäàâàòü GameSettings â ìåíåäæåðå)
|
|
public int GetDefaultsHash()
|
|
{
|
|
return ComputeHash(GetDefaults());
|
|
}
|
|
|
|
// Instance wrapper äëÿ ñîõðàíåíèÿ GameSettings â ïóòü ïî óìîë÷àíèþ
|
|
public bool SaveGameSettings(GameSettings gs)
|
|
{
|
|
return TrySaveToDefaultPath(gs);
|
|
}
|
|
|
|
// Instance wrapper äëÿ çàãðóçêè GameSettings èç ïóòè ïî óìîë÷àíèþ
|
|
public GameSettings LoadGameSettings()
|
|
{
|
|
return TryLoadFromDefaultPath();
|
|
}
|
|
|
|
// Instance wrapper LoadOrCreate
|
|
public GameSettings LoadOrCreateGameSettings()
|
|
{
|
|
return LoadOrCreateFromDefaultPath();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|