UNPKG

yukinovel

Version:

Yukinovel is a simple web visual novel engine.

87 lines (86 loc) 2.37 kB
export class SaveManager { constructor() { this.storageKey = 'yukinovel_saves'; } // Save game state save(slot, state) { try { const saves = this.getAllSaves(); saves[slot] = { ...state, savedAt: new Date() }; localStorage.setItem(this.storageKey, JSON.stringify(saves)); } catch (error) { console.error('Failed to save game:', error); } } // Load game state load(slot) { try { const saves = this.getAllSaves(); const savedState = saves[slot]; if (savedState) { // Convert savedAt string back to Date if (savedState.savedAt) { savedState.savedAt = new Date(savedState.savedAt); } return savedState; } return null; } catch (error) { console.error('Failed to load game:', error); return null; } } // Get all saves getAllSaves() { try { const saves = localStorage.getItem(this.storageKey); return saves ? JSON.parse(saves) : {}; } catch (error) { console.error('Failed to get saves:', error); return {}; } } // Delete save deleteSave(slot) { try { const saves = this.getAllSaves(); delete saves[slot]; localStorage.setItem(this.storageKey, JSON.stringify(saves)); } catch (error) { console.error('Failed to delete save:', error); } } // Check if save exists hasSave(slot) { const saves = this.getAllSaves(); return saves[slot] !== undefined; } // Get save info getSaveInfo(slot) { const saves = this.getAllSaves(); const save = saves[slot]; if (save) { return { savedAt: new Date(save.savedAt || new Date()), currentScene: save.currentScene }; } return null; } // Clear all saves clearAllSaves() { try { localStorage.removeItem(this.storageKey); } catch (error) { console.error('Failed to clear saves:', error); } } }