using System; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; 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 GetPrizes() { if (!File.Exists(FILE_PATH)) { Debug.Log("Не записаны призы беру дефолт"); return GetDefaultPrizes(); } string fileString = File.ReadAllText(FILE_PATH); return DeserializePrizes(fileString); } public static void SetPrizes(List prizes) { string serialized = SerializePrizes(prizes); Debug.Log($"serialized: {serialized}"); File.WriteAllText(FILE_PATH, serialized); } public static string SerializePrizes(List prizes) { StringBuilder sb = new(); for (int i = 0; i < CharactersAmount; i++) { sb.Append(prizes[i].ToString()); if (i < CharactersAmount - 1) sb.Append("\n"); } string result = sb.ToString(); //Debug.Log($"Serialized: {result}"); return result; } public static List DeserializePrizes(string serialized) { string[] lines = serialized.Split('\n'); if (lines.Length != CharactersAmount) { return GetDefaultPrizes(); } List prizes = new(); for (int i = 0; i < CharactersAmount; i++) { string[] elements = lines[i].Split(':'); PrizeType prizeType = (PrizeType)Enum.Parse(typeof(PrizeType), elements[0]); int prizeAmount = int.Parse(elements[1]); Prize prize = new Prize(prizeType, prizeAmount); prizes.Add(prize); //Debug.Log($"deserizlized Prize{i}. {prize}"); } return prizes; } //делает список пустых призов, последний индекс - приз с хоппера public static List GetDefaultPrizes() { List prizes = new(); for (int i = 0; i < CharactersAmount-1; i++) { prizes.Add(new Prize(prizeType: PrizeType.None, amount: 0)); } prizes.Add(new Prize(prizeType: PrizeType.Special, amount: 1)); SerializePrizes(prizes); return prizes; } }