feat: implemented Localstorage manipulation and config and save
This commit is contained in:
		
							parent
							
								
									869ba41f13
								
							
						
					
					
						commit
						fb951259fa
					
				
							
								
								
									
										5100
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5100
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -17,5 +17,8 @@
 | 
				
			||||||
    "typescript": "^3.9.7",
 | 
					    "typescript": "^3.9.7",
 | 
				
			||||||
    "vinyl-source-stream": "^2.0.0",
 | 
					    "vinyl-source-stream": "^2.0.0",
 | 
				
			||||||
    "watchify": "^3.11.1"
 | 
					    "watchify": "^3.11.1"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "typescript-require": "^0.3.0"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,15 @@
 | 
				
			||||||
import Scene from "../../Wolfie2D/Scene/Scene";
 | 
					import Scene from "../../Wolfie2D/Scene/Scene";
 | 
				
			||||||
 | 
					import ConfigManager from "../Tools/ConfigManager";
 | 
				
			||||||
 | 
					import SaveManager from "../Tools/SaveManager";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class MainMenu extends Scene {
 | 
					export default class MainMenu extends Scene {
 | 
				
			||||||
 | 
					    protected config: ConfigManager;
 | 
				
			||||||
 | 
					    protected save: SaveManager;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    // TODO
 | 
					    // TODO
 | 
				
			||||||
 | 
					    startScene(): void {
 | 
				
			||||||
 | 
					        this.config = new ConfigManager();
 | 
				
			||||||
 | 
					        this.save = new SaveManager();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										50
									
								
								src/shattered_sword/Tools/ConfigManager.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/shattered_sword/Tools/ConfigManager.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,50 @@
 | 
				
			||||||
 | 
					import Config from "./DataTypes/Config";
 | 
				
			||||||
 | 
					import LocalStorageDB from "./LocalStorageDB";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default class ConfigManager {
 | 
				
			||||||
 | 
					    private static config: Config;
 | 
				
			||||||
 | 
					    private db: LocalStorageDB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        this.db = new LocalStorageDB("config");
 | 
				
			||||||
 | 
					        this.loadConfig();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!ConfigManager.config)
 | 
				
			||||||
 | 
					            this.initConfig();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getVolume(): number {
 | 
				
			||||||
 | 
					        return ConfigManager.config.volume;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setVolume(volume: number): void {
 | 
				
			||||||
 | 
					        ConfigManager.config.volume = volume;
 | 
				
			||||||
 | 
					        this.saveConfig();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODOs
 | 
				
			||||||
 | 
					    // add more functions if needed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resetConfig(callback?: Function): void {
 | 
				
			||||||
 | 
					        this.initConfig();
 | 
				
			||||||
 | 
					        callback(ConfigManager.config);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private loadConfig(): void {
 | 
				
			||||||
 | 
					        ConfigManager.config = <Config>this.db.loadJSON();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private saveConfig(): void {
 | 
				
			||||||
 | 
					        this.db.saveJSON(ConfigManager.config);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private initConfig(): void {
 | 
				
			||||||
 | 
					        this.db.readJSON("shattered_sword_assets/jsons/sampleconfig.json", (config: object) => {
 | 
				
			||||||
 | 
					            if (!config)
 | 
				
			||||||
 | 
					                throw new Error("Fail to load config file");
 | 
				
			||||||
 | 
					            ConfigManager.config = <Config>config;
 | 
				
			||||||
 | 
					            console.log("Initializing Local Storage(config): ", ConfigManager.config);
 | 
				
			||||||
 | 
					            this.saveConfig();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								src/shattered_sword/Tools/DataTypes/Config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/shattered_sword/Tools/DataTypes/Config.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					export default class Config {
 | 
				
			||||||
 | 
					    volume: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/shattered_sword/Tools/DataTypes/Save.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/shattered_sword/Tools/DataTypes/Save.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					export default class Save {
 | 
				
			||||||
 | 
					    name: string;
 | 
				
			||||||
 | 
					    level: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
import Input from "./../Wolfie2D/Input/Input";
 | 
					import Input from "../../Wolfie2D/Input/Input";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class InputWrapper {
 | 
					export default class InputWrapper {
 | 
				
			||||||
    private static isInStoryMode: boolean;
 | 
					    private static isInStoryMode: boolean;
 | 
				
			||||||
							
								
								
									
										32
									
								
								src/shattered_sword/Tools/LocalStorageDB.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/shattered_sword/Tools/LocalStorageDB.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					export default class LocalStorageDB {
 | 
				
			||||||
 | 
					    private key: string;
 | 
				
			||||||
 | 
					    constructor(key: string) {
 | 
				
			||||||
 | 
					        this.key = key;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Read a json file from a path
 | 
				
			||||||
 | 
					     * @param JSONFilePath The path to the JSON file
 | 
				
			||||||
 | 
					     * @param callback Function to run after getting the JSON
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    readJSON(JSONFilePath: string, callback: Function): void {
 | 
				
			||||||
 | 
					        let xobj: XMLHttpRequest = new XMLHttpRequest();
 | 
				
			||||||
 | 
					        xobj.overrideMimeType("application/json");
 | 
				
			||||||
 | 
					        xobj.open('GET', JSONFilePath, true);
 | 
				
			||||||
 | 
					        xobj.onreadystatechange = function () {
 | 
				
			||||||
 | 
					            if ((xobj.readyState == 4) && (xobj.status == 200)) {
 | 
				
			||||||
 | 
					                callback(JSON.parse(xobj.responseText));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        xobj.send(null);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    loadJSON(): object {
 | 
				
			||||||
 | 
					        return JSON.parse(localStorage.getItem(this.key));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    saveJSON(value: object): void {
 | 
				
			||||||
 | 
					        localStorage.setItem(this.key, JSON.stringify(value));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										60
									
								
								src/shattered_sword/Tools/SaveManager.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src/shattered_sword/Tools/SaveManager.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,60 @@
 | 
				
			||||||
 | 
					import Save from "./DataTypes/Save";
 | 
				
			||||||
 | 
					import LocalStorageDB from "./LocalStorageDB";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default class SaveManager {
 | 
				
			||||||
 | 
					    private static save: Save;
 | 
				
			||||||
 | 
					    private db: LocalStorageDB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        this.db = new LocalStorageDB("save");
 | 
				
			||||||
 | 
					        this.loadSave();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!SaveManager.save)
 | 
				
			||||||
 | 
					            this.initSave();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getLevel(): number {
 | 
				
			||||||
 | 
					        return SaveManager.save.level;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setLevel(level: number): void {
 | 
				
			||||||
 | 
					        SaveManager.save.level = level;
 | 
				
			||||||
 | 
					        this.saveSave();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getName(): string {
 | 
				
			||||||
 | 
					        return SaveManager.save.name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setName(name: string): void {
 | 
				
			||||||
 | 
					        SaveManager.save.name = name;
 | 
				
			||||||
 | 
					        this.saveSave();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODOs
 | 
				
			||||||
 | 
					    // add more functions if needed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    resetSave(callback?: Function): void {
 | 
				
			||||||
 | 
					        this.initSave();
 | 
				
			||||||
 | 
					        callback(SaveManager.save);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private loadSave(): void {
 | 
				
			||||||
 | 
					        SaveManager.save = <Save>this.db.loadJSON();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private saveSave(): void {
 | 
				
			||||||
 | 
					        this.db.saveJSON(SaveManager.save);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private initSave(): void {
 | 
				
			||||||
 | 
					        this.db.readJSON("shattered_sword_assets/jsons/samplesave.json", (save: object) => {
 | 
				
			||||||
 | 
					            if (!save)
 | 
				
			||||||
 | 
					                throw new Error("Fail to load save file");
 | 
				
			||||||
 | 
					            SaveManager.save = <Save>save;
 | 
				
			||||||
 | 
					            console.log("Initializing Local Storage(save): ", SaveManager.save);
 | 
				
			||||||
 | 
					            this.saveSave();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user