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