Add item states
This commit is contained in:
		
							
								
								
									
										2
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -5,6 +5,7 @@ | |||||||
|   "requires": true, |   "requires": true, | ||||||
|   "packages": { |   "packages": { | ||||||
|     "": { |     "": { | ||||||
|  |       "name": "assassin-bug", | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "license": "ISC", |       "license": "ISC", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
| @@ -568,7 +569,6 @@ | |||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "anymatch": "~3.1.2", |         "anymatch": "~3.1.2", | ||||||
|         "braces": "~3.0.2", |         "braces": "~3.0.2", | ||||||
|         "fsevents": "~2.3.2", |  | ||||||
|         "glob-parent": "~5.1.2", |         "glob-parent": "~5.1.2", | ||||||
|         "is-binary-path": "~2.1.0", |         "is-binary-path": "~2.1.0", | ||||||
|         "is-glob": "~4.0.1", |         "is-glob": "~4.0.1", | ||||||
|   | |||||||
| @@ -20,6 +20,11 @@ export default class ItemBuilder { | |||||||
|         return this; |         return this; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     withState(key, value) { | ||||||
|  |         this.item.setState(key, value); | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |      | ||||||
|     isUsable(value) { |     isUsable(value) { | ||||||
|         this.item.usable = value; |         this.item.usable = value; | ||||||
|         return this; |         return this; | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ export default class Game { | |||||||
|     constructor(newGame = true) { |     constructor(newGame = true) { | ||||||
|         this.newGame = newGame; |         this.newGame = newGame; | ||||||
|         this.player = new Player(); |         this.player = new Player(); | ||||||
|         this.state = State; |         this.state = new State(); | ||||||
|         this.rooms = []; |         this.rooms = []; | ||||||
|         this.items = []; |         this.items = []; | ||||||
|         this.output = new Output(); |         this.output = new Output(); | ||||||
| @@ -41,7 +41,7 @@ export default class Game { | |||||||
|             item.context = this; |             item.context = this; | ||||||
|             return item; |             return item; | ||||||
|         }); |         }); | ||||||
|         this.state = data.state || State; |         this.state = data.state || new State(); | ||||||
|         this.commandHandler.addCommands(data.commands); |         this.commandHandler.addCommands(data.commands); | ||||||
|         this.player = new Player(); |         this.player = new Player(); | ||||||
|         this.player.context = this; |         this.player.context = this; | ||||||
|   | |||||||
| @@ -1,8 +1,11 @@ | |||||||
|  | import State from "./state"; | ||||||
|  |  | ||||||
| export default class Item { | export default class Item { | ||||||
|     constructor() { |     constructor() { | ||||||
|         this.id = "item"; |         this.id = "item"; | ||||||
|         this.name = "An item"; |         this.name = "An item"; | ||||||
|         this.description = "You see nothing special about this item"; |         this.description = "You see nothing special about this item"; | ||||||
|  |         this.state = new State(); | ||||||
|         this.usable = true; |         this.usable = true; | ||||||
|         this.takeable = true; |         this.takeable = true; | ||||||
|         this.useCallback = null; |         this.useCallback = null; | ||||||
| @@ -42,4 +45,12 @@ export default class Item { | |||||||
|     addTickCallback(callback) { |     addTickCallback(callback) { | ||||||
|         this.tickCallback = callback.bind(this); |         this.tickCallback = callback.bind(this); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     setState(key, value) { | ||||||
|  |         return this.state.set(key, value); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     getState(key) { | ||||||
|  |         return this.state.get(key); | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -7,6 +7,7 @@ export default class Serialization { | |||||||
|         const saveobj = { |         const saveobj = { | ||||||
|             state: this.context.state.serialize(), |             state: this.context.state.serialize(), | ||||||
|             itemLocations: this.serializeItemLocations(), |             itemLocations: this.serializeItemLocations(), | ||||||
|  |             itemStates: this.serializeItemStates(), | ||||||
|             player:             { |             player:             { | ||||||
|                 currentRoom: this.context.player.currentRoom, |                 currentRoom: this.context.player.currentRoom, | ||||||
|                 inventory: this.context.player.inventory |                 inventory: this.context.player.inventory | ||||||
| @@ -24,6 +25,7 @@ export default class Serialization { | |||||||
|         const loadobj = JSON.parse(localStorage.getItem("save")); |         const loadobj = JSON.parse(localStorage.getItem("save")); | ||||||
|         this.context.state.deserialize(loadobj.state); |         this.context.state.deserialize(loadobj.state); | ||||||
|         this.deserializeItemLocations(loadobj.itemLocations); |         this.deserializeItemLocations(loadobj.itemLocations); | ||||||
|  |         this.deserializeItemStates(loadobj.itemStates); | ||||||
|         this.deserializePlayer(loadobj.player); |         this.deserializePlayer(loadobj.player); | ||||||
|         this.context.output.sound.setSFXVolume(loadobj.volumes.sfx); |         this.context.output.sound.setSFXVolume(loadobj.volumes.sfx); | ||||||
|         this.context.output.sound.setMusicVolume(loadobj.volumes.music); |         this.context.output.sound.setMusicVolume(loadobj.volumes.music); | ||||||
| @@ -45,8 +47,21 @@ export default class Serialization { | |||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     deserializeItemStates(items) { | ||||||
|  |         items.forEach((item) => { | ||||||
|  |             const obj = this.context.getItem(item[0]); | ||||||
|  |             obj.state.deserialize(item[1]); | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     deserializePlayer(player) { |     deserializePlayer(player) { | ||||||
|         this.context.move(player.currentRoom); |         this.context.move(player.currentRoom); | ||||||
|         this.context.player.inventory = player.inventory; |         this.context.player.inventory = player.inventory; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     serializeItemStates() { | ||||||
|  |         return this.context.items.map((item) => { | ||||||
|  |             return [item.id, item.state.serialize()] | ||||||
|  |         }); | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| class State { | export default class State { | ||||||
|     constructor() { |     constructor() { | ||||||
|         this.states = new Map(); |         this.states = new Map(); | ||||||
|     } |     } | ||||||
| @@ -34,5 +34,3 @@ class State { | |||||||
|         this.states = new Map(data); |         this.states = new Map(data); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| export default new State(); |  | ||||||
		Reference in New Issue
	
	Block a user