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.
| Parametro | Tipo | Descripcion |
|---|---|---|
slot | int | Indice 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.
| Parametro | Tipo | Descripcion |
|---|---|---|
slot | int | Indice 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.
| Parametro | Tipo | Descripcion |
|---|---|---|
slot | int | Indice 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.
| Parametro | Tipo | Descripcion |
|---|---|---|
slot | int | Indice de ranura de guardado a eliminar |
Eventos
OnSaved
Se dispara despues de una operacion de guardado exitosa.
Firma: event Action<int> OnSaved
| Parametro | Tipo | Descripcion |
|---|---|---|
slot | int | La ranura en la que se guardo |
OnLoaded
Se dispara despues de una operacion de carga exitosa.
Firma: event Action<int> OnLoaded
| Parametro | Tipo | Descripcion |
|---|---|---|
slot | int | La 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}");
};
}
}