111 lines
2.9 KiB
C#
111 lines
2.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
[CreateAssetMenu(fileName = "SettingsScheme", menuName = "Создание настроек/Создать схему настроек")]
|
|
public class SettingsScheme : ScriptableObject
|
|
{
|
|
public List<SettingsGroup> groups;
|
|
|
|
public string CalculateHash()
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
foreach (var group in groups)
|
|
{
|
|
sb.Append(group.name);
|
|
foreach(var setting in group.Settings)
|
|
{
|
|
sb.Append(setting.GetStringForHash());
|
|
}
|
|
}
|
|
|
|
Debug.Log($"Сырые хэш данные: {sb.ToString()}");
|
|
|
|
string hash;
|
|
using (SHA256 sha256 = SHA256.Create())
|
|
{
|
|
byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
|
|
hash = BitConverter.ToString(hashBytes).Replace("-", "");
|
|
Debug.Log($"Хэш: {sb.ToString()}");
|
|
}
|
|
|
|
return hash;
|
|
}
|
|
|
|
|
|
public SettingsSchemeDTO GetDTO()
|
|
{
|
|
SettingsSchemeDTO dto = new SettingsSchemeDTO();
|
|
|
|
dto.groups = new List<SettingsGroupDTO>();
|
|
|
|
if (this.groups != null)
|
|
{
|
|
foreach (var group in this.groups)
|
|
{
|
|
if (group != null)
|
|
{
|
|
dto.groups.Add(group.GetDTO());
|
|
}
|
|
}
|
|
}
|
|
|
|
return dto;
|
|
}
|
|
|
|
// Статический метод для создания SettingsScheme из DTO
|
|
public static SettingsScheme FromDTO(SettingsSchemeDTO dto)
|
|
{
|
|
SettingsScheme scheme = CreateInstance<SettingsScheme>();
|
|
dto.ApplyTo(scheme);
|
|
return scheme;
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class SettingsSchemeDTO
|
|
{
|
|
public List<SettingsGroupDTO> groups;
|
|
|
|
// Метод для восстановления из DTO в SettingsScheme
|
|
public void ApplyTo(SettingsScheme scheme)
|
|
{
|
|
scheme.groups = new List<SettingsGroup>();
|
|
|
|
if (this.groups != null)
|
|
{
|
|
foreach (var groupDTO in this.groups)
|
|
{
|
|
SettingsGroup group = SettingsGroup.FromDTO(groupDTO);
|
|
scheme.groups.Add(group);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Метод для расчета хэша из DTO
|
|
public string CalculateHash()
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
foreach (var group in groups)
|
|
{
|
|
sb.Append(group.Name);
|
|
sb.Append(group.IconPath);
|
|
foreach (var setting in group.Settings)
|
|
{
|
|
sb.Append(setting.GetStringForHash());
|
|
}
|
|
}
|
|
|
|
using (SHA256 sha256 = SHA256.Create())
|
|
{
|
|
byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()));
|
|
string hash = BitConverter.ToString(hashBytes).Replace("-", "");
|
|
return hash;
|
|
}
|
|
}
|
|
}
|