/
HieSm.js
252 lines (224 loc) · 5.21 KB
/
HieSm.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
function HieSm() {
var module = this
// Autogenerated with DRAKON Editor 1.31
function buildMachine(builders, parent, node) {
// item 53
var machine = getMachine(
builders,
parent,
node.type
)
// item 107
var feedbacks = []
// item 540001
var _ind54 = 0;
var _col54 = node;
var _keys54 = Object.keys(_col54);
var _len54 = _keys54.length;
while (true) {
// item 540002
if (_ind54 < _len54) {
} else {
break;
}
// item 540004
var name = _keys54[_ind54]; var value = _col54[name];
// item 56
if (name == "type") {
} else {
// item 63
if (value.type) {
// item 108
if (value.type == "feedback") {
// item 133
value.name = name
// item 110
feedbacks.push(value)
} else {
// item 65
var child = buildMachine(
builders,
machine,
value
)
// item 66
machine[name] = child
}
} else {
// item 59
machine[name] = value
}
}
// item 540003
_ind54++;
}
// item 1110001
var _ind111 = 0;
var _col111 = feedbacks;
var _len111 = _col111.length;
while (true) {
// item 1110002
if (_ind111 < _len111) {
} else {
break;
}
// item 1110004
var node = _col111[_ind111];
// item 113
linkFeedback(machine, node)
// item 1110003
_ind111++;
}
// item 61
return machine
}
function findSubobject(obj, path) {
// item 140
var steps = path.split("/")
// item 1410001
var _ind141 = 0;
var _col141 = steps;
var _len141 = _col141.length;
while (true) {
// item 1410002
if (_ind141 < _len141) {
} else {
break;
}
// item 1410004
var step = _col141[_ind141];
// item 145
if (step) {
// item 148
if (step == "..") {
// item 150
obj = obj.parent
} else {
// item 144
obj = obj[step]
}
} else {
}
// item 1410003
_ind141++;
}
// item 143
return obj
}
function forwardToChild(self, child, messageType) {
// item 179
var action = function(message) {
invokeMethod(child, messageType, message)
}
// item 180
self[messageType] = action
}
function forwardToParent(self, messageType) {
// item 172
var action = function(message) {
resendToParent(self, messageType, message)
}
// item 173
self[messageType] = action
}
function getMachine(builders, parent, name) {
// item 79
var builder = builders[name]
// item 80
if (builder) {
// item 83
var machine = new builder()
machine.parent = parent
// item 85
return machine
} else {
// item 84
throw new Error("Unknown machine: \"" + name + "\"")
}
}
function getTime() {
// item 89
var d = new Date();
var seconds = d.getTime() / 1000;
// item 90
return seconds
}
function invokeAfter(messageType) {
// item 103
if (module.afterMessage) {
// item 106
module.afterMessage(messageType)
} else {
}
}
function invokeMethod(target, name, message) {
// item 156
var handler = target[name]
// item 158
if (handler) {
// item 157
handler.apply(target, [message])
} else {
}
}
function linkFeedback(machine, node) {
// item 119
var src = findSubobject(
machine,
node.path
)
// item 134
src[node.srcField] = machine
}
function makeDeltaTime(current, old) {
// item 96
var dt = current - old
// item 97
return Math.max(0, Math.min(dt, 0.2))
}
function requestUpdate(target) {
// item 38
target.time = getTime()
// item 39
var action = function() {
var newTime = getTime()
var dt = makeDeltaTime(newTime, target.time)
target.update(dt)
}
// item 40
window.requestAnimationFrame(action)
}
function resendToParent(self, messageType, message) {
// item 186
sendMessage(
self.parent,
messageType,
message
)
}
function sendMessage(target, messageType, message) {
// item 32
sendMessageAfter(
target,
messageType,
message,
0
)
}
function sendMessageAfter(target, messageType, message, ms) {
// item 72
var action = function() {
invokeMethod(target, messageType, message)
invokeAfter(messageType)
}
// item 73
window.setTimeout(action, ms)
}
module.buildMachine = buildMachine
module.sendMessage = sendMessage
module.sendMessageAfter = sendMessageAfter
module.requestUpdate = requestUpdate
module.findSubobject = findSubobject
module.forwardToParent = forwardToParent
module.forwardToChild = forwardToChild
}