Move events back into cell
id: ID
title: string
description: string
- events: ID[]
+ events: GameEventProperties[]
objects: ID[]
// agents are not saved
}
store() {
return Object.assign(<CellProperties>super.store(), {
objects: Array.from(this.objects).map( ([id, obj]) => id),
- events: Array.from(this.events).map( ([id, e]) => id),
+ events: Array.from(this.events).map( ([id, e]) => e.store()),
});
}
this.title = properties.title;
this.description = properties.description;
- // At this point the objects and events should already be loaded in gamestate
+ // At this point the objects should already be loaded in gamestate
this.objects = new Map();
for (let id of properties.objects) {
if (!gs.objects.has(id)) {
}
this.events = new Map();
- for (let id of properties.events) {
- if (!gs.events.has(id)) {
- throw new Error('Event not found in gamestate:' + id);
- }
- this.events.set(id, gs.events.get(id));
+ for (let event of properties.events) {
+ const ge = new GameEvent();
+ ge.load(event);
+ this.events.set(event.id, ge);
}
// We assume that since this cell was saved, it is navigable
+import Storable from './storable';
import { ID, generateID } from './id';
import { Script } from './script';
import gs from './gamestate';
}
export interface GameEventProperties {
+ id: ID
+ type: GameEventType
+ script: string
+ title: string
}
-export class GameEvent {
+export class GameEvent extends Storable {
id: ID
type: GameEventType
script: string
title: string
+ saveProperties = ['id', 'type', 'script', 'title']
constructor() {
+ super();
this.id = generateID();
this.type = GameEventType.Random;
this.script = '';
}
store() : GameEventProperties {
- return {};
+ return <GameEventProperties>super.store()
}
load(properties: GameEventProperties) {
+ return super.load(properties);
}
}