chip-game/Assets/Scripts/PrizeSystem/PrizeSerializer.cs
2026-01-12 09:36:17 +03:00

98 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<Prize> GetPrizes()
{
if (!File.Exists(FILE_PATH))
{
Debug.Log("Не записаны призы беру дефолт");
return GetDefaultPrizes();
}
string fileString = File.ReadAllText(FILE_PATH);
return DeserializePrizes(fileString);
}
public static void SetPrizes(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].ToString());
if (i < CharactersAmount - 1)
sb.Append("\n");
}
string result = sb.ToString();
//Debug.Log($"Serialized: {result}");
return result;
}
public static List<Prize> DeserializePrizes(string serialized)
{
string[] lines = serialized.Split('\n');
if (lines.Length != CharactersAmount)
{
return GetDefaultPrizes();
}
List<Prize> 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<Prize> GetDefaultPrizes()
{
List<Prize> 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;
}
}