Перейти к основному содержимому

ISaveSystem

Контракт для операций сохранения/загрузки. Поддерживает несколько слотов сохранения с уведомлениями о событиях.

Пространство имён: OpenMon.MCE.SDK

Определение

public interface ISaveSystem
{
void Save(int slot);
void Load(int slot);
bool HasSaveData(int slot);
void DeleteSave(int slot);
event Action<int> OnSaved;
event Action<int> OnLoaded;
}

Методы

Save(int slot)

Сохранить текущее состояние игры в слот.

ПараметрТипОписание
slotintИндекс слота сохранения (обычно 0-2)

Сериализует все зарегистрированные экземпляры SavableObject в JSON-файл. Сохранение синхронное и завершается до возврата метода.

Load(int slot)

Загрузить состояние игры из слота.

ПараметрТипОписание
slotintИндекс слота сохранения для загрузки

Десериализует JSON-файл и применяет состояние ко всем зарегистрированным экземплярам SavableObject. Может инициировать переход сцены, если сохранённая позиция находится в другой сцене.

HasSaveData(int slot)

Проверить, есть ли данные в слоте сохранения.

ПараметрТипОписание
slotintИндекс проверяемого слота

Возвращает: bool -- true если слот содержит данные сохранения.

DeleteSave(int slot)

Удалить данные сохранения из слота.

ПараметрТипОписание
slotintИндекс удаляемого слота

События

OnSaved

Срабатывает после успешной операции сохранения.

Сигнатура: event Action<int> OnSaved

ПараметрТипОписание
slotintСлот, в который было выполнено сохранение

OnLoaded

Срабатывает после успешной операции загрузки.

Сигнатура: event Action<int> OnLoaded

ПараметрТипОписание
slotintСлот, из которого была выполнена загрузка

Пример использования

using OpenMon.MCE.SDK;
using Zenject;

public class SaveLoadUI : MonoBehaviour
{
[Inject] private ISaveSystem saveSystem;

[SerializeField] private Button[] saveButtons;
[SerializeField] private Button[] loadButtons;
[SerializeField] private Button[] deleteButtons;
[SerializeField] private Text[] slotLabels;

private void Start()
{
// Обновление меток слотов
for (int i = 0; i < 3; i++)
{
int slot = i; // Capture for closure
slotLabels[i].text = saveSystem.HasSaveData(i)
? $"Slot {i + 1}: Saved"
: $"Slot {i + 1}: Empty";

saveButtons[i].onClick.AddListener(() => saveSystem.Save(slot));
loadButtons[i].onClick.AddListener(() =>
{
if (saveSystem.HasSaveData(slot))
saveSystem.Load(slot);
});
deleteButtons[i].onClick.AddListener(() =>
{
saveSystem.DeleteSave(slot);
slotLabels[slot].text = $"Slot {slot + 1}: Empty";
});
}

// Прослушивание событий сохранения
saveSystem.OnSaved += (slot) =>
{
slotLabels[slot].text = $"Slot {slot + 1}: Saved";
Debug.Log($"Game saved to slot {slot + 1}");
};
}
}