-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathengine.js
66 lines (53 loc) · 1.65 KB
/
engine.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class Engine {
static load(...args) {
window.onload = () => new Engine(...args);
}
constructor(firstSceneClass, storyDataUrl) {
this.firstSceneClass = firstSceneClass;
this.storyDataUrl = storyDataUrl;
this.header = document.body.appendChild(document.createElement("h1"));
this.output = document.body.appendChild(document.createElement("div"));
this.actionsContainer = document.body.appendChild(document.createElement("div"));
fetch(storyDataUrl).then(
(response) => response.json()
).then(
(json) => {
this.storyData = json;
this.gotoScene(firstSceneClass)
}
);
}
gotoScene(sceneClass, data) {
this.scene = new sceneClass(this);
this.scene.create(data);
}
addChoice(action, data) {
let button = this.actionsContainer.appendChild(document.createElement("button"));
button.innerText = action;
button.onclick = () => {
while(this.actionsContainer.firstChild) {
this.actionsContainer.removeChild(this.actionsContainer.firstChild)
}
this.scene.handleChoice(data);
}
}
setTitle(title) {
document.title = title;
this.header.innerText = title;
}
show(msg) {
let div = document.createElement("div");
div.innerHTML = msg;
this.output.appendChild(div);
}
}
class Scene {
constructor(engine) {
this.engine = engine;
}
create() { }
update() { }
handleChoice(action) {
console.warn('no choice handler on scene ', this);
}
}