Saltar al contenido principal

ISaveSystem

Contrato para operaciones de guardado/carga. Soporta multiples ranuras de guardado con notificaciones de eventos.

Namespace: OpenMon.MCE.SDK

Definicion

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;
}

Metodos

Save(int slot)

Guardar el estado actual del juego en una ranura.

ParametroTipoDescripcion
slotintIndice de ranura de guardado (tipicamente 0-2)

Serializa todas las instancias SavableObject registradas a un archivo JSON. El guardado es sincrono y se completa antes de que el metodo retorne.

Load(int slot)

Cargar un estado de juego desde una ranura.

ParametroTipoDescripcion
slotintIndice de ranura de guardado desde la que cargar

Deserializa el archivo JSON y aplica el estado a todas las instancias SavableObject registradas. Puede activar transiciones de escena si la posicion guardada esta en una escena diferente.

HasSaveData(int slot)

Verificar si una ranura de guardado tiene datos.

ParametroTipoDescripcion
slotintIndice de ranura de guardado a verificar

Devuelve: bool -- true si la ranura contiene datos de guardado.

DeleteSave(int slot)

Eliminar datos de guardado de una ranura.

ParametroTipoDescripcion
slotintIndice de ranura de guardado a eliminar

Eventos

OnSaved

Se dispara despues de una operacion de guardado exitosa.

Firma: event Action<int> OnSaved

ParametroTipoDescripcion
slotintLa ranura en la que se guardo

OnLoaded

Se dispara despues de una operacion de carga exitosa.

Firma: event Action<int> OnLoaded

ParametroTipoDescripcion
slotintLa ranura desde la que se cargo

Ejemplo de uso

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()
{
// Update slot labels
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";
});
}

// Listen for save events
saveSystem.OnSaved += (slot) =>
{
slotLabels[slot].text = $"Slot {slot + 1}: Saved";
Debug.Log($"Game saved to slot {slot + 1}");
};
}
}