121 lines
3.9 KiB
C#
121 lines
3.9 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using UnityEngine;
|
||
|
||
|
||
namespace PrizeSystem
|
||
{
|
||
public static class PrizeSerializer
|
||
{
|
||
const string CHARACTERS_PRIZES = "CharPrizes.prizRR";
|
||
static string FILE_PATH => Path.Combine(Application.persistentDataPath, CHARACTERS_PRIZES);
|
||
static int CharactersAmount => GameManager.instance.botsAmount;
|
||
|
||
public static List<Prize> LoadPrizes()
|
||
{
|
||
if (!File.Exists(FILE_PATH))
|
||
{
|
||
Debug.Log("Не записаны призы беру дефолт");
|
||
return GetDefaultPrizes();
|
||
}
|
||
|
||
string fileString = File.ReadAllText(FILE_PATH);
|
||
return DeserializePrizes(fileString);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Сериализует и записывает в файл
|
||
/// </summary>
|
||
/// <param name="prizes"></param>
|
||
public static void SavePrizes(List<Prize> prizes)
|
||
{
|
||
string serialized = SerializePrizes(prizes);
|
||
Debug.Log($"serialized: {serialized}");
|
||
File.WriteAllText(FILE_PATH, serialized);
|
||
}
|
||
|
||
|
||
public static string SerializePrizes(List<Prize> prizes)
|
||
{
|
||
StringBuilder sb = new();
|
||
|
||
for (int i = 0; i < CharactersAmount; i++)
|
||
{
|
||
sb.Append(prizes[i].Body);
|
||
string endOfLine = i < CharactersAmount - 1 ? "\n" : "";
|
||
sb.Append(endOfLine);
|
||
}
|
||
string result = sb.ToString();
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Преобразовать сериализованную строку в список призов
|
||
/// </summary>
|
||
public static List<Prize> DeserializePrizes(string serialized)
|
||
{
|
||
List<Prize> prizes = new();
|
||
|
||
string[] lines = serialized.Split('\n');
|
||
if (lines.Length != CharactersAmount)
|
||
{
|
||
return GetDefaultPrizes();
|
||
}
|
||
|
||
foreach (string line in lines)
|
||
{
|
||
if (line == "None")
|
||
{
|
||
prizes.Add(PrizeUtils.CreatePrize());
|
||
}
|
||
else if (line.StartsWith("VitrinaBox:"))
|
||
{
|
||
string stripped = line.Substring("VitrinaBox:".Length);
|
||
int[] boxes = stripped.Split(",").Select(int.Parse).ToArray();
|
||
prizes.Add(PrizeUtils.CreatePrize(boxes));
|
||
}
|
||
else if (line.StartsWith("Qr:"))
|
||
{
|
||
string stripped = line.Substring("Qr:".Length);
|
||
string[] entries = stripped.Split(',');
|
||
|
||
int rank = int.Parse(entries[0]);
|
||
string text = entries[1];
|
||
|
||
prizes.Add(PrizeUtils.CreatePrize(rank,text));
|
||
}
|
||
else
|
||
{//считаемый приз
|
||
string[] entries = line.Split(":");
|
||
CountablePrizeType Type = (CountablePrizeType)Enum.Parse(typeof(CountablePrizeType), entries[0]);
|
||
int amount = int.Parse(entries[1]);
|
||
|
||
prizes.Add(PrizeUtils.CreatePrize(Type, amount));
|
||
}
|
||
}
|
||
|
||
return prizes;
|
||
}
|
||
|
||
|
||
//делает список пустых призов, последний индекс - приз с хоппера
|
||
public static List<Prize> GetDefaultPrizes()
|
||
{
|
||
List<Prize> prizes = new();
|
||
|
||
for (int i = 0; i < CharactersAmount - 1; i++)
|
||
{
|
||
prizes.Add(PrizeUtils.CreatePrize());
|
||
}
|
||
prizes.Add(PrizeUtils.CreatePrize(3, "5000 руб."));
|
||
|
||
SerializePrizes(prizes);
|
||
|
||
return prizes;
|
||
}
|
||
}
|
||
|
||
} |