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)
Сохранить текущее состояние игры в слот.
| Параметр | Тип | Описание |
|---|---|---|
slot | int | Индекс слота сохранения (обычно 0-2) |
Сериализует все зарегистрированные экземпляры SavableObject в JSON-файл. Сохранение синхронное и завершается до возврата метода.
Load(int slot)
Загрузить состояние игры из слота.
| Параметр | Тип | Описание |
|---|---|---|
slot | int | Индекс слота сохранения для загрузки |
Десериализует JSON-файл и применяет состояние ко всем зарегистрированным экземплярам SavableObject. Может инициировать переход сцены, если сохранённая позиция находится в другой сцене.
HasSaveData(int slot)
Проверить, есть ли данные в слоте сохранения.
| Параметр | Тип | Описание |
|---|---|---|
slot | int | Индекс проверяемого слота |
Возвращает: bool -- true если слот содержит данные сохранения.
DeleteSave(int slot)
Удалить данные сохранения из слота.
| Параметр | Тип | Описание |
|---|---|---|
slot | int | Индекс удаляемого слота |
События
OnSaved
Срабатывает после успешной операции сохранения.
Сигнатура: event Action<int> OnSaved
| Параметр | Тип | Описание |
|---|---|---|
slot | int | Слот, в который было выполнено сохранение |
OnLoaded
Срабатывает после успешной операции загрузки.
Сигнатура: event Action<int> OnLoaded
| Параметр | Тип | Описание |
|---|---|---|
slot | int | Слот, из которого была выполнена загрузка |
Пример использования
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}");
};
}
}