nadesiko3 3.7.2 → 3.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/batch/command.txt +472 -469
  2. package/batch/pickup_command.nako3 +1 -1
  3. package/core/.eslintrc.cjs +10 -3
  4. package/core/package-lock.json +1184 -645
  5. package/core/package.json +4 -5
  6. package/core/src/nako3.mjs +8 -6
  7. package/core/src/nako3.mts +19 -16
  8. package/core/src/nako_ast.mts +2 -3
  9. package/core/src/nako_core_version.mjs +2 -2
  10. package/core/src/nako_core_version.mts +2 -2
  11. package/core/src/nako_csv.mjs +1 -0
  12. package/core/src/nako_csv.mts +3 -2
  13. package/core/src/nako_from_dncl.mjs +1 -1
  14. package/core/src/nako_from_dncl.mts +1 -1
  15. package/core/src/nako_from_dncl2.mjs +1 -1
  16. package/core/src/nako_from_dncl2.mts +2 -2
  17. package/core/src/nako_gen.mjs +37 -35
  18. package/core/src/nako_gen.mts +70 -67
  19. package/core/src/nako_global.mjs +3 -2
  20. package/core/src/nako_global.mts +3 -2
  21. package/core/src/nako_lexer.mjs +3 -3
  22. package/core/src/nako_lexer.mts +3 -3
  23. package/core/src/nako_logger.mjs +1 -1
  24. package/core/src/nako_logger.mts +2 -2
  25. package/core/src/nako_parser3.mjs +67 -59
  26. package/core/src/nako_parser3.mts +96 -90
  27. package/core/src/nako_parser_base.mts +3 -3
  28. package/core/src/nako_prepare.mjs +1 -1
  29. package/core/src/nako_prepare.mts +1 -1
  30. package/core/src/nako_source_mapping.mts +0 -1
  31. package/core/src/nako_token.mts +8 -8
  32. package/core/src/nako_types.mts +1 -1
  33. package/core/src/plugin_api.mts +1 -1
  34. package/core/src/plugin_csv.mjs +1 -0
  35. package/core/src/plugin_csv.mts +2 -1
  36. package/core/src/plugin_math.mjs +2 -2
  37. package/core/src/plugin_math.mts +3 -3
  38. package/core/src/plugin_promise.mjs +1 -1
  39. package/core/src/plugin_promise.mts +1 -1
  40. package/core/src/plugin_system.mjs +117 -40
  41. package/core/src/plugin_system.mts +132 -58
  42. package/core/src/plugin_test.mjs +3 -1
  43. package/core/src/plugin_test.mts +3 -1
  44. package/core/test/basic_test.mjs +16 -0
  45. package/core/test/calc_test.mjs +7 -0
  46. package/core/test/plugin_system_test.mjs +33 -0
  47. package/doc/files.md +4 -4
  48. package/doc/plugins.md +1 -1
  49. package/package.json +9 -9
  50. package/release/_hash.txt +36 -121
  51. package/release/_script-tags.txt +16 -33
  52. package/release/command.json +1 -1
  53. package/release/command.json.js +1 -1
  54. package/release/command_cnako3.json +1 -1
  55. package/release/command_list.json +1 -1
  56. package/release/edit_main.js +3 -3
  57. package/release/edit_main.js.map +2 -2
  58. package/release/editor.js +3 -3
  59. package/release/plugin_markup.js +53 -53
  60. package/release/plugin_markup.js.map +3 -3
  61. package/release/plugin_weykturtle3d.js +1 -1
  62. package/release/plugin_weykturtle3d.js.map +4 -4
  63. package/release/version.js +3 -3
  64. package/release/version_main.js +3 -3
  65. package/release/version_main.js.map +2 -2
  66. package/release/wnako3.js +66 -66
  67. package/release/wnako3.js.map +3 -3
  68. package/release/wnako3webworker.js +58 -58
  69. package/release/wnako3webworker.js.map +3 -3
  70. package/src/browsers.txt +30 -20
  71. package/src/cnako3mod.mjs +19 -18
  72. package/src/cnako3mod.mts +17 -16
  73. package/src/deno_wrapper.mjs +6 -6
  74. package/src/deno_wrapper.mts +11 -11
  75. package/src/nako_version.mjs +2 -2
  76. package/src/nako_version.mts +2 -2
  77. package/src/plugin_browser.mjs +2 -2
  78. package/src/plugin_browser.mts +5 -5
  79. package/src/plugin_browser_ajax.mjs +2 -2
  80. package/src/plugin_browser_ajax.mts +2 -2
  81. package/src/plugin_browser_api.mts +0 -1
  82. package/src/plugin_browser_crypto.mjs +8 -8
  83. package/src/plugin_browser_crypto.mts +13 -13
  84. package/src/plugin_browser_dom_basic.mjs +3 -3
  85. package/src/plugin_browser_dom_basic.mts +5 -7
  86. package/src/plugin_browser_dom_event.mjs +1 -1
  87. package/src/plugin_browser_dom_event.mts +2 -1
  88. package/src/plugin_browser_dom_parts.mjs +33 -18
  89. package/src/plugin_browser_dom_parts.mts +60 -59
  90. package/src/plugin_browser_speech.mjs +1 -1
  91. package/src/plugin_browser_speech.mts +1 -1
  92. package/src/plugin_node.mjs +5 -3
  93. package/src/plugin_node.mts +6 -4
  94. package/src/plugin_weykturtle3d.mjs +38 -15
  95. package/src/plugin_weykturtle3d.mts +279 -240
  96. package/src/plugin_weykturtle3d_three.mjs +3 -0
  97. package/src/plugin_weykturtle3d_three.mts +214 -0
  98. package/src/plugin_weykturtle3d_threeutil.mjs +28 -0
  99. package/src/plugin_weykturtle3d_threeutil.mts +31 -0
  100. package/src/wnako3.mjs +1 -0
  101. package/src/wnako3.mts +1 -0
  102. package/src/wnako3mod.mjs +5 -2
  103. package/src/wnako3mod.mts +6 -3
  104. package/batch/command_nakopad.txt +0 -1177
  105. package/core/__report.txt +0 -617
  106. package/core/command/plugin_snako.mjs +0 -112
  107. package/core/command/snako.mjs +0 -108
  108. package/release/core_src_nako_josi_list_mjs.js +0 -3
  109. package/release/core_src_nako_josi_list_mjs.js.LICENSE.txt +0 -3
  110. package/release/core_src_nako_josi_list_mjs.js.map +0 -1
  111. package/release/core_src_nako_reserved_words_mjs.js +0 -3
  112. package/release/core_src_nako_reserved_words_mjs.js.LICENSE.txt +0 -3
  113. package/release/core_src_nako_reserved_words_mjs.js.map +0 -1
  114. package/release/editor/edit_main.js +0 -48
  115. package/release/editor/edit_main.js.map +0 -7
  116. package/release/editor/version_main.js +0 -44
  117. package/release/editor/version_main.js.map +0 -7
  118. package/release/editor.js.LICENSE.txt +0 -91
  119. package/release/editor.js.map +0 -1
  120. package/release/nako_gen_async.js +0 -2
  121. package/release/nako_gen_async.js.LICENSE.txt +0 -21
  122. package/release/nako_gen_async.js.map +0 -1
  123. package/release/plugin_caniuse.js.LICENSE.txt +0 -15
  124. package/release/plugin_datetime.js.LICENSE.txt +0 -21
  125. package/release/plugin_kansuji.js.LICENSE.txt +0 -3
  126. package/release/plugin_markup.js.LICENSE.txt +0 -15
  127. package/release/plugin_toml.js +0 -295
  128. package/release/plugin_toml.js.map +0 -7
  129. package/release/plugin_turtle.js.LICENSE.txt +0 -9
  130. package/release/plugin_webworker.js.LICENSE.txt +0 -3
  131. package/release/plugin_weykturtle3d.js.LICENSE.txt +0 -3
  132. package/release/src/plugin_caniuse.js +0 -2
  133. package/release/src/plugin_caniuse.js.map +0 -7
  134. package/release/src/plugin_datetime.js +0 -2
  135. package/release/src/plugin_datetime.js.map +0 -7
  136. package/release/src/plugin_kansuji.js +0 -2
  137. package/release/src/plugin_kansuji.js.map +0 -7
  138. package/release/src/plugin_keigo.js +0 -2
  139. package/release/src/plugin_keigo.js.map +0 -7
  140. package/release/src/plugin_markup.js +0 -64
  141. package/release/src/plugin_markup.js.map +0 -7
  142. package/release/src/plugin_three.js +0 -2
  143. package/release/src/plugin_three.js.map +0 -7
  144. package/release/src/plugin_turtle.js +0 -2
  145. package/release/src/plugin_turtle.js.map +0 -7
  146. package/release/src/plugin_webworker.js +0 -4
  147. package/release/src/plugin_webworker.js.map +0 -7
  148. package/release/src/plugin_weykturtle3d.js +0 -2
  149. package/release/src/plugin_weykturtle3d.js.map +0 -7
  150. package/release/src/wnako3.js +0 -482
  151. package/release/src/wnako3.js.map +0 -7
  152. package/release/src/wnako3webworker.js +0 -428
  153. package/release/src/wnako3webworker.js.map +0 -7
  154. package/release/stats.json +0 -1
  155. package/release/version.js.LICENSE.txt +0 -65
  156. package/release/version.js.map +0 -1
  157. package/release/wnako3.js.LICENSE.txt +0 -341
  158. package/release/wnako3webworker.js.LICENSE.txt +0 -209
  159. package/src/plugin_three.mts +0 -240
@@ -5,22 +5,18 @@
5
5
 
6
6
  import type { NakoSystem as NakoSystemBase } from '../core/src/plugin_api.mjs'
7
7
 
8
- import { ThreeUtil } from './plugin_three.mjs'
9
- import type { THREENS } from './plugin_three.mjs'
8
+ import { ThreeUtil } from './plugin_weykturtle3d_threeutil.mjs'
9
+ import type * as THREENS from './plugin_weykturtle3d_three.mjs'
10
10
 
11
11
  declare global {
12
12
  interface Navigator {
13
- nako3: { addPluginObject: (name: string, obj: object) => {} }
13
+ nako3: { addPluginObject: (name: string, obj: object) => void }
14
14
  }
15
15
  interface Window {
16
16
  THREE?: THREENS.THREE
17
17
  }
18
18
  }
19
19
 
20
- interface NakoSystem extends NakoSystemBase {
21
- tags: { weykturtle3d?: WeykTurtle3DSystem }
22
- }
23
-
24
20
  type CallbackType<T> = (a:T) => void
25
21
  type NumericArray3 = [ number, number, number ]
26
22
  type NakoRumtimeName = 'wnako'|'cnako'
@@ -68,19 +64,25 @@ interface Turtle3DEventMap {
68
64
  drawLine: CustomEvent<DrawLineEventArgs>
69
65
  }
70
66
 
71
- interface Turtle3D extends EventTarget {
67
+ interface Turtle3DEventTarget extends EventTarget {
72
68
  addEventListener<K extends keyof Turtle3DEventMap>(
73
69
  type: K,
70
+ // eslint-disable-next-line no-use-before-define
74
71
  listener: ((this: Turtle3D, evt: Turtle3DEventMap[K]) => any) | null,
75
72
  options?: boolean | EventListenerOptions,): void
76
73
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void
77
74
  dispatchEvent<K extends keyof Turtle3DEventMap>(evt: Turtle3DEventMap[K]): boolean
78
75
  removeListener<K extends keyof Turtle3DEventMap>(
79
76
  type: K,
77
+ // eslint-disable-next-line no-use-before-define
80
78
  listener: (this: Turtle3D, evt: Turtle3DEventMap[K]) => any,
81
79
  options?: boolean | EventListenerOptions,): void
82
80
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void
83
81
  }
82
+
83
+ class Command {
84
+
85
+ }
84
86
  class CommandPromise {
85
87
  resolve: (result:any) => void
86
88
  reject: (err:Error) => void
@@ -90,9 +92,6 @@ class CommandPromise {
90
92
  this.resolve = resolve
91
93
  this.reject = reject
92
94
  }
93
- }
94
- class Command {
95
-
96
95
  }
97
96
  class CommandHome extends Command {
98
97
  cmd: string = 'home'
@@ -205,7 +204,9 @@ class CommandModel extends Command {
205
204
  }
206
205
  }
207
206
 
208
- class Turtle3D extends EventTarget {
207
+ const TypedTurtle3DEventTarget = EventTarget as { new(): Turtle3DEventTarget; prototype: Turtle3DEventTarget }
208
+
209
+ class Turtle3D extends TypedTurtle3DEventTarget implements Turtle3DEventTarget {
209
210
  private three: THREENS.THREE
210
211
  id: number
211
212
  obj: THREENS.Object3D
@@ -218,7 +219,7 @@ class Turtle3D extends EventTarget {
218
219
  f_visible: boolean
219
220
  macros: CommandPromise[]
220
221
 
221
- constructor(three: THREENS.THREE, id: number) {
222
+ constructor (three: THREENS.THREE, id: number) {
222
223
  super()
223
224
  this.three = three
224
225
  this.id = id
@@ -251,6 +252,7 @@ class Turtle3D extends EventTarget {
251
252
  this.f_visible = true
252
253
  this.obj.visible = true
253
254
  }
255
+
254
256
  discardModel (): void {
255
257
  if (this.disposal) {
256
258
  ThreeUtil.disposeChildObject(this.obj)
@@ -260,6 +262,7 @@ class Turtle3D extends EventTarget {
260
262
  }
261
263
  this.flagLoaded = false
262
264
  }
265
+
263
266
  loadTurtle (model: THREENS.Object3D|string) {
264
267
  if (this.isObject3D(model)) {
265
268
  this.discardModel()
@@ -302,119 +305,108 @@ class Turtle3D extends EventTarget {
302
305
  const que = this.macros.shift()
303
306
  if (typeof que === 'undefined') { return false }
304
307
  const m = que instanceof CommandPromise ? que.command : que
305
- if (m instanceof CommandJump) {
306
- // 起点を移動する
307
- this.obj.position.copy(m.v)
308
- } else
309
- if (m instanceof CommandMoveAbsolute) {
310
- const v1 = this.obj.position.clone()
311
- const v2 = m.v
312
- // 線を引く
313
- this.line(v1, v2)
314
- // カメの角度を変更
315
- this.obj.lookAt(v2)
316
- const headup90 = new this.three.Quaternion()
317
- const axisX = new this.three.Vector3(1, 0, 0)
318
- headup90.setFromAxisAngle(axisX, Math.PI / 2)
319
- this.obj.quaternion.multiply(headup90)
320
- // カメを移動
321
- this.obj.position.copy(v2)
322
- } else
323
- if (m instanceof CommandMoveDirection) {
324
- const dir = m.direction
325
- const l = m.length * ((dir === 'b') ? -1 : 1)
326
- const v1 = this.obj.position.clone()
327
- const v2 =new this.three.Vector3(0, l, 0)
328
- if (dir === 'f' || dir === 'b') {
329
- v2.applyQuaternion(this.obj.quaternion)
330
- } else {
331
- // u
332
- const modifier = new this.three.Quaternion()
333
- const target = this.obj.quaternion.clone()
334
- if (dir === 'u' || dir === 'd') {
335
- const axis = new this.three.Vector3(1, 0, 0)
336
- if (dir === 'u') {
337
- modifier.setFromAxisAngle(axis, (-90) * Math.PI / 180)
338
- } else { // dir === 'd'
339
- modifier.setFromAxisAngle(axis, 90 * Math.PI / 180)
340
- }
341
- } else { // dir === 'l' || dir === 'r'
342
- const axis = new this.three.Vector3(0, 0, 1)
343
- if (dir === 'l') {
344
- modifier.setFromAxisAngle(axis, 90 * Math.PI / 180)
345
- } else { // dir === 'r'
346
- modifier.setFromAxisAngle(axis, (-90) * Math.PI / 180)
347
- }
308
+ if (m instanceof CommandJump) {
309
+ // 起点を移動する
310
+ this.obj.position.copy(m.v)
311
+ } else if (m instanceof CommandMoveAbsolute) {
312
+ const v1 = this.obj.position.clone()
313
+ const v2 = m.v
314
+ // 線を引く
315
+ this.line(v1, v2)
316
+ // カメの角度を変更
317
+ this.obj.lookAt(v2)
318
+ const headup90 = new this.three.Quaternion()
319
+ const axisX = new this.three.Vector3(1, 0, 0)
320
+ headup90.setFromAxisAngle(axisX, Math.PI / 2)
321
+ this.obj.quaternion.multiply(headup90)
322
+ // カメを移動
323
+ this.obj.position.copy(v2)
324
+ } else if (m instanceof CommandMoveDirection) {
325
+ const dir = m.direction
326
+ const l = m.length * ((dir === 'b') ? -1 : 1)
327
+ const v1 = this.obj.position.clone()
328
+ const v2 = new this.three.Vector3(0, l, 0)
329
+ if (dir === 'f' || dir === 'b') {
330
+ v2.applyQuaternion(this.obj.quaternion)
331
+ } else {
332
+ // u
333
+ const modifier = new this.three.Quaternion()
334
+ const target = this.obj.quaternion.clone()
335
+ if (dir === 'u' || dir === 'd') {
336
+ const axis = new this.three.Vector3(1, 0, 0)
337
+ if (dir === 'u') {
338
+ modifier.setFromAxisAngle(axis, (-90) * Math.PI / 180)
339
+ } else { // dir === 'd'
340
+ modifier.setFromAxisAngle(axis, 90 * Math.PI / 180)
341
+ }
342
+ } else { // dir === 'l' || dir === 'r'
343
+ const axis = new this.three.Vector3(0, 0, 1)
344
+ if (dir === 'l') {
345
+ modifier.setFromAxisAngle(axis, 90 * Math.PI / 180)
346
+ } else { // dir === 'r'
347
+ modifier.setFromAxisAngle(axis, (-90) * Math.PI / 180)
348
348
  }
349
- target.multiply(modifier)
350
- v2.applyQuaternion(target)
351
- }
352
- v2.add(v1)
353
- this.line(v1, v2)
354
- this.obj.position.copy(v2)
355
- } else
356
- if (m instanceof CommandHome) {
357
- const mode = m.mode
358
- switch (mode) {
359
- case 'set':
360
- this.home.position.copy(this.obj.position)
361
- this.home.quaternion.copy(this.obj.quaternion)
362
- break
363
- case 'jump':
364
- this.obj.position.copy(this.home.position)
365
- this.obj.quaternion.copy(this.home.quaternion)
366
- break
367
- }
368
- } else
369
- if (m instanceof CommandRotate) {
370
- const dir = m.direction
371
- const rv = m.angle * (dir === 'l' || dir === 'd' ? 1 : -1)
372
- const target = new this.three.Quaternion()
373
- let axis:THREENS.Vector3
374
- if (dir === 'l' || dir === 'r') {
375
- axis = new this.three.Vector3(0, 0, 1)
376
- } else {
377
- axis = new this.three.Vector3(1, 0, 0)
378
- }
379
- target.setFromAxisAngle(axis, (rv % 360) * Math.PI / 180)
380
- this.obj.quaternion.multiply(target)
381
- } else
382
- if (m instanceof CommandRoll) {
383
- const dir = m.direction
384
- const rv = m.angle * (dir === 'r' ? 1 : -1)
385
- const axis = new this.three.Vector3(0, 1, 0)
386
- const target = new this.three.Quaternion()
387
- target.setFromAxisAngle(axis, (rv % 360) * Math.PI / 180)
388
- this.obj.quaternion.multiply(target)
389
- } else
390
- if (m instanceof CommandPenColor) {
391
- this.color = m.color
392
- } else
393
- if (m instanceof CommandPenWidth) {
394
- this.lineWidth = m.width
395
- } else
396
- if (m instanceof CommandPenEnable) {
397
- this.flagDown = m.enable
398
- } else
399
- if (m instanceof CommandVisible) {
400
- this.f_visible = m.visible
401
- if (this.f_visible) {
402
- this.obj.visible = true
403
- } else {
404
- this.obj.visible = false
405
349
  }
406
- } else
407
- if (m instanceof CommandModel) {
408
- this.flagLoaded = false
409
- this.loadTurtle(m.model)
410
- } else
411
- if (m instanceof CommandAngle) {
412
- const euler = new this.three.Euler()
413
- euler.fromArray(m.angle)
414
- // eslint-disable-next-line no-unused-vars
415
- const dir = new this.three.Quaternion()
416
- this.obj.quaternion.setFromEuler(euler)
350
+ target.multiply(modifier)
351
+ v2.applyQuaternion(target)
417
352
  }
353
+ v2.add(v1)
354
+ this.line(v1, v2)
355
+ this.obj.position.copy(v2)
356
+ } else if (m instanceof CommandHome) {
357
+ const mode = m.mode
358
+ switch (mode) {
359
+ case 'set':
360
+ this.home.position.copy(this.obj.position)
361
+ this.home.quaternion.copy(this.obj.quaternion)
362
+ break
363
+ case 'jump':
364
+ this.obj.position.copy(this.home.position)
365
+ this.obj.quaternion.copy(this.home.quaternion)
366
+ break
367
+ }
368
+ } else if (m instanceof CommandRotate) {
369
+ const dir = m.direction
370
+ const rv = m.angle * (dir === 'l' || dir === 'd' ? 1 : -1)
371
+ const target = new this.three.Quaternion()
372
+ let axis:THREENS.Vector3
373
+ if (dir === 'l' || dir === 'r') {
374
+ axis = new this.three.Vector3(0, 0, 1)
375
+ } else {
376
+ axis = new this.three.Vector3(1, 0, 0)
377
+ }
378
+ target.setFromAxisAngle(axis, (rv % 360) * Math.PI / 180)
379
+ this.obj.quaternion.multiply(target)
380
+ } else if (m instanceof CommandRoll) {
381
+ const dir = m.direction
382
+ const rv = m.angle * (dir === 'r' ? 1 : -1)
383
+ const axis = new this.three.Vector3(0, 1, 0)
384
+ const target = new this.three.Quaternion()
385
+ target.setFromAxisAngle(axis, (rv % 360) * Math.PI / 180)
386
+ this.obj.quaternion.multiply(target)
387
+ } else if (m instanceof CommandPenColor) {
388
+ this.color = m.color
389
+ } else if (m instanceof CommandPenWidth) {
390
+ this.lineWidth = m.width
391
+ } else if (m instanceof CommandPenEnable) {
392
+ this.flagDown = m.enable
393
+ } else if (m instanceof CommandVisible) {
394
+ this.f_visible = m.visible
395
+ if (this.f_visible) {
396
+ this.obj.visible = true
397
+ } else {
398
+ this.obj.visible = false
399
+ }
400
+ } else if (m instanceof CommandModel) {
401
+ this.flagLoaded = false
402
+ this.loadTurtle(m.model)
403
+ } else if (m instanceof CommandAngle) {
404
+ const euler = new this.three.Euler()
405
+ euler.fromArray(m.angle)
406
+ // eslint-disable-next-line no-unused-vars
407
+ const dir = new this.three.Quaternion()
408
+ this.obj.quaternion.setFromEuler(euler)
409
+ }
418
410
  if (que instanceof CommandPromise) {
419
411
  que.resolve(0)
420
412
  }
@@ -486,7 +478,7 @@ class Turtle3D extends EventTarget {
486
478
  this.dispatchEvent(evt)
487
479
  }
488
480
 
489
- private raiseDrawLine(v1: THREENS.Vector3, v2: THREENS.Vector3, width: number, color: THREENS.Color) : void {
481
+ private raiseDrawLine (v1: THREENS.Vector3, v2: THREENS.Vector3, width: number, color: THREENS.Color) : void {
490
482
  const args = new DrawLineEventArgs(v1, v2, width, color)
491
483
  const evt = new CustomEvent<DrawLineEventArgs>('drawLine', { detail: args })
492
484
  this.dispatchEvent(evt)
@@ -502,7 +494,13 @@ class Turtle3D extends EventTarget {
502
494
  }
503
495
  }
504
496
 
497
+ interface NakoSystem extends NakoSystemBase {
498
+ // eslint-disable-next-line no-use-before-define
499
+ tags: { weykturtle3d?: WeykTurtle3DSystem }
500
+ }
501
+
505
502
  class WeykTurtle3DSystem {
503
+ // eslint-disable-next-line no-use-before-define
506
504
  private static instance: WeykTurtle3DSystem
507
505
  private instanceCount: number
508
506
  sys: NakoSystem
@@ -521,16 +519,19 @@ class WeykTurtle3DSystem {
521
519
  flagSetTimer: boolean
522
520
  _prevUpdatedTime: number
523
521
 
524
- static getInstance(sys: NakoSystem) {
522
+ static getInstance (sys: NakoSystem) {
525
523
  if (WeykTurtle3DSystem.instance === undefined) {
526
- WeykTurtle3DSystem.instance = new WeykTurtle3DSystem(sys);
524
+ WeykTurtle3DSystem.instance = new WeykTurtle3DSystem(sys)
525
+ } else if (WeykTurtle3DSystem.instance.sys !== sys) {
526
+ console.log('T3D: difference sys instance')
527
+ WeykTurtle3DSystem.instance.sys = sys
527
528
  }
528
- const i = WeykTurtle3DSystem.instance;
529
- i.instanceCount += 1;
530
- return WeykTurtle3DSystem.instance;
529
+ const i = WeykTurtle3DSystem.instance
530
+ i.instanceCount += 1
531
+ return WeykTurtle3DSystem.instance
531
532
  }
532
533
 
533
- constructor(sys: NakoSystem) {
534
+ private constructor (sys: NakoSystem) {
534
535
  this.instanceCount = 0
535
536
  this.three = null
536
537
  this.sys = sys
@@ -566,9 +567,9 @@ class WeykTurtle3DSystem {
566
567
  scene.remove(this._axishelper)
567
568
  scene.add(this._axishelper)
568
569
  }
569
- this.initTurtle()
570
570
  }
571
571
  }
572
+
572
573
  disposeAllTurtle () {
573
574
  // カメをクリア
574
575
  for (const tt of this.turtles) {
@@ -579,18 +580,21 @@ class WeykTurtle3DSystem {
579
580
  this.camera = -1
580
581
  this.flagSetTimer = false
581
582
  }
583
+
582
584
  disposeAllLine () {
583
585
  // 引いた線を線用のバッファからクリア
584
586
  if (this._lines !== null) {
585
587
  ThreeUtil.disposeChildObject(this._lines)
586
588
  }
587
589
  }
588
- private getThree(): THREENS.THREE {
590
+
591
+ private getThree (): THREENS.THREE {
589
592
  if (!this.three) {
590
593
  throw new Error('ThreeJSの準備される前に使用しようとしました')
591
594
  }
592
595
  return this.three
593
596
  }
597
+
594
598
  createTurtle (modelUrl: string): number {
595
599
  // カメの情報を sys._turtle リストに追加
596
600
  const three = this.getThree()
@@ -612,6 +616,7 @@ class WeykTurtle3DSystem {
612
616
  scene.add(tt.obj)
613
617
  return id
614
618
  }
619
+
615
620
  initTurtle (): void {
616
621
  if (this.turtles.length === 0) {
617
622
  if (this._renderer === null) {
@@ -634,6 +639,7 @@ class WeykTurtle3DSystem {
634
639
  this.target = -1
635
640
  }
636
641
  }
642
+
637
643
  getCur (): Turtle3D {
638
644
  if (this.turtles.length === 0) {
639
645
  throw Error('最初に『T3Dカメ作成』命令を呼び出してください。')
@@ -643,15 +649,17 @@ class WeykTurtle3DSystem {
643
649
  }
644
650
  return this.turtles[this.target]
645
651
  }
652
+
646
653
  queCurrentTurtle (cmd: Command): Promise<number> {
647
654
  const tt = this.getCur()
648
- const promise = new Promise<number>((resolve,reject) => {
655
+ const promise = new Promise<number>((resolve, reject) => {
649
656
  const que = new CommandPromise(cmd, resolve, reject)
650
657
  tt.macros.push(que)
651
658
  this.animationStart()
652
659
  })
653
660
  return promise
654
661
  }
662
+
655
663
  doDraw (beforeClear: boolean) {
656
664
  if (this.camera === -1) { return }
657
665
  if (!this._scene) { return }
@@ -677,6 +685,7 @@ class WeykTurtle3DSystem {
677
685
  }
678
686
  this._renderer.render(this._scene, this._camera)
679
687
  }
688
+
680
689
  setCameraHelper (flag: boolean) {
681
690
  const three = this.getThree()
682
691
  if (flag) {
@@ -695,8 +704,9 @@ class WeykTurtle3DSystem {
695
704
  if (this._camerahelper !== null) {
696
705
  this._camerahelper.visible = false
697
706
  }
698
- }
707
+ }
699
708
  }
709
+
700
710
  setAxisHelper (flag: boolean) {
701
711
  const three = this.getThree()
702
712
  if (flag) {
@@ -717,6 +727,7 @@ class WeykTurtle3DSystem {
717
727
  }
718
728
  }
719
729
  }
730
+
720
731
  getScene (): THREENS.Scene {
721
732
  const three = this.getThree()
722
733
  if (this._scene === null) {
@@ -724,6 +735,7 @@ class WeykTurtle3DSystem {
724
735
  }
725
736
  return this._scene
726
737
  }
738
+
727
739
  getCamera (): THREENS.Camera {
728
740
  const three = this.getThree()
729
741
  if (this._camera === null) {
@@ -733,6 +745,7 @@ class WeykTurtle3DSystem {
733
745
  }
734
746
  return this._camera
735
747
  }
748
+
736
749
  resetCamera (camera: THREENS.Camera):void {
737
750
  const three = this.getThree()
738
751
  camera.position.set(0, 0, 1000)
@@ -746,6 +759,7 @@ class WeykTurtle3DSystem {
746
759
  camera.up = new three.Vector3(0, 1, 0)
747
760
  camera.lookAt(new three.Vector3(0, 0, 0))
748
761
  }
762
+
749
763
  initTrutle3dEnv (renderer: THREENS.WebGLRenderer) {
750
764
  renderer.setClearColor(0x000000, 1.0)
751
765
  renderer.autoClear = false
@@ -761,6 +775,7 @@ class WeykTurtle3DSystem {
761
775
  }
762
776
  }
763
777
  }
778
+
764
779
  initRenderer ():THREENS.WebGLRenderer {
765
780
  // 描画先をセットする
766
781
  let to = this.sys.__getSysVar('T3Dカメ描画先')
@@ -772,33 +787,34 @@ class WeykTurtle3DSystem {
772
787
  this.setupRenderer()
773
788
  return renderer
774
789
  }
790
+
775
791
  setRenderer (to: Element|HTMLCanvasElement|THREENS.WebGLRenderer):THREENS.WebGLRenderer {
776
792
  const three = this.getThree()
777
793
  let renderer: null|THREENS.WebGLRenderer = null
778
794
  if (to instanceof three.WebGLRenderer) {
779
795
  renderer = to
780
- } else
781
- if (to instanceof HTMLCanvasElement) {
782
- renderer = new three.WebGLRenderer({ antialias: false, alpha: true, canvas:to })
796
+ } else if (to instanceof HTMLCanvasElement) {
797
+ renderer = new three.WebGLRenderer({ antialias: false, alpha: true, canvas: to })
783
798
  if (renderer === null) {
784
- throw new Error('レンダラを作成できません')
799
+ throw new Error('レンダラを作成できません。指定したCanvas要素は使用できません')
785
800
  }
786
- renderer.setSize( to.width, to.height )
787
- } else
788
- if (to instanceof Element) {
801
+ renderer.setSize(to.width, to.height)
802
+ } else if (to instanceof Element) {
789
803
  renderer = new three.WebGLRenderer({ antialias: false, alpha: true })
790
804
  if (renderer === null) {
791
- throw new Error('レンダラを作成できません')
805
+ throw new Error('レンダラを作成できません。指定したDOM要素は使用できません')
792
806
  }
793
- renderer.setSize(to.clientWidth, to.clientHeight );
807
+ renderer.setSize(to.clientWidth, to.clientHeight)
794
808
  to.appendChild(renderer.domElement)
795
- } else [
809
+ } else {
796
810
  // never
797
- ]
798
- renderer!.setPixelRatio(window.devicePixelRatio)
811
+ throw new Error('レンダラを作成できません。それは作成先に指定できません')
812
+ }
813
+ renderer.setPixelRatio(window.devicePixelRatio)
799
814
  this._renderer = renderer
800
- return this._renderer!
815
+ return this._renderer
801
816
  }
817
+
802
818
  clearRenderer () {
803
819
  this._renderer = null
804
820
  if (this._controls) {
@@ -806,17 +822,20 @@ class WeykTurtle3DSystem {
806
822
  this._controls = null
807
823
  }
808
824
  }
825
+
809
826
  setupRenderer () {
810
827
  if (this._renderer) {
811
828
  this.initTrutle3dEnv(this._renderer)
812
829
  }
813
830
  }
831
+
814
832
  getRenderer (): THREENS.Renderer {
815
833
  if (this._renderer === null) {
816
834
  this.initRenderer()
817
835
  }
818
836
  return this._renderer!
819
837
  }
838
+
820
839
  setupControl (controlConstrucor: THREENS.Controls): THREENS.Controls {
821
840
  if (typeof controlConstrucor === 'undefined') {
822
841
  throw new Error('指定されたコンコントロールが見当たりません。')
@@ -836,18 +855,20 @@ class WeykTurtle3DSystem {
836
855
  this._controls = controls
837
856
  return this._controls
838
857
  }
858
+
839
859
  drawLine (v1: THREENS.Vector3, v2: THREENS.Vector3, width: number, color: THREENS.Color):void {
840
860
  const three = this.getThree()
841
861
  const geometry = new three.BufferGeometry()
842
862
  const vertices = new three.Float32BufferAttribute(6, 3)
843
863
  vertices.copyArray([v1.x, v1.y, v1.z, v2.x, v2.y, v2.z])
844
- const material = new three.LineBasicMaterial({ color: color, linewidth: width })
864
+ const material = new three.LineBasicMaterial({ color, linewidth: width })
845
865
  geometry.setAttribute('position', vertices)
846
866
  const line = new three.Line(geometry, material)
847
867
  if (this._lines) {
848
868
  this._lines.add(line)
849
869
  }
850
870
  }
871
+
851
872
  doMacroAllTurtles (): boolean {
852
873
  let hasNext = false
853
874
  for (const tt of this.turtles) {
@@ -855,6 +876,7 @@ class WeykTurtle3DSystem {
855
876
  }
856
877
  return hasNext
857
878
  }
879
+
858
880
  animationStart ():void {
859
881
  const wait = this.getWait()
860
882
  const macrorun = !!this.sys.__getSysVar('T3D自動実行')
@@ -869,17 +891,20 @@ class WeykTurtle3DSystem {
869
891
  this.flagSetTimer = true
870
892
  this.animationFrame(() => this.animation())
871
893
  }
894
+
872
895
  getWait (): number {
873
896
  return this.sys.__getSysVar('T3Dカメ速度')
874
897
  }
898
+
875
899
  isNoWait (): boolean {
876
900
  return this.sys.__getSysVar('T3Dカメ速度') === 0
877
901
  }
902
+
878
903
  animation () {
879
904
  const redraw = !!this.sys.__getSysVar('T3D自動描画')
880
905
  const macrorun = !!this.sys.__getSysVar('T3D自動実行')
881
906
  const hasNext = this.animationTick()
882
- if (redraw) {
907
+ if (redraw) {
883
908
  this.doDraw(true)
884
909
  }
885
910
  if ((hasNext || this._controls !== null) && macrorun) {
@@ -888,6 +913,7 @@ class WeykTurtle3DSystem {
888
913
  this.flagSetTimer = false
889
914
  }
890
915
  }
916
+
891
917
  animationTick () {
892
918
  const now = Date.now()
893
919
  const noWait = this.isNoWait()
@@ -908,18 +934,19 @@ class WeykTurtle3DSystem {
908
934
  hasNext = false
909
935
  } else {
910
936
  hasNext = this.doMacroAllTurtles()
911
- }
937
+ }
912
938
  return hasNext
913
939
  }
940
+
914
941
  animationFrame (callback: () => void, element?: Element) {
915
942
  window.setTimeout(callback, 1000 / 60)
916
943
  }
944
+
917
945
  ck (): THREENS.THREE {
918
946
  if (this.three === null) {
919
947
  if (this.sys.__getSysVar('THREE') !== null) {
920
948
  this.three = this.sys.__getSysVar('THREE')
921
- } else
922
- if (typeof window.THREE !== 'undefined') {
949
+ } else if (typeof window.THREE !== 'undefined') {
923
950
  this.three = window.THREE
924
951
  }
925
952
  }
@@ -934,13 +961,15 @@ class WeykTurtle3DSystem {
934
961
  }
935
962
  return this.three
936
963
  }
937
- static getTurtle3D(sys: NakoSystem): WeykTurtle3DSystem {
964
+
965
+ static getTurtle3D (sys: NakoSystem): WeykTurtle3DSystem {
938
966
  if (!sys.tags.weykturtle3d) {
939
967
  throw new Error('プラグインの初期化が行われていません')
940
968
  }
941
969
  return sys.tags.weykturtle3d
942
970
  }
943
- static getEnv(sys: NakoSystem):[ WeykTurtle3DSystem, THREENS.THREE ] {
971
+
972
+ static getEnv (sys: NakoSystem):[ WeykTurtle3DSystem, THREENS.THREE ] {
944
973
  const turtle3d = WeykTurtle3DSystem.getTurtle3D(sys)
945
974
  const three = turtle3d.ck()
946
975
  return [turtle3d, three]
@@ -971,9 +1000,20 @@ const PluginWeykTurtle3D: NakoPluginObject = {
971
1000
  sys.__setSysVar('THREE', null)
972
1001
  }
973
1002
  },
1003
+ '!クリア': {
1004
+ type: 'func',
1005
+ josi: [],
1006
+ pure: true,
1007
+ fn: function (sys: NakoSystem):void {
1008
+ if (sys.tags.weykturtle3d) {
1009
+ sys.tags.weykturtle3d.clearAll()
1010
+ sys.tags.weykturtle3d.clearRenderer()
1011
+ }
1012
+ }
1013
+ },
974
1014
  // @3Dタートルグラフィックス・ライブラリとプラグイン
975
- 'THREE': {type: 'const', value: ''}, // @THREE
976
- 'T3DベースURL': {type: 'var', value: 'https://cdn.jsdelivr.net/npm/three@0.127.0'}, // @T3DべーすURL
1015
+ 'THREE': { type: 'const', value: '' }, // @THREE
1016
+ 'T3DベースURL': { type: 'var', value: 'https://cdn.jsdelivr.net/npm/three@0.127.0' }, // @T3DべーすURL
977
1017
  'T3Dライブラリ読込': { // @ThreeJSのライブラリを動的に読み込む // @T3Dらいぶらりよみこむ
978
1018
  type: 'func',
979
1019
  josi: [],
@@ -983,7 +1023,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
983
1023
  const turtle3d = WeykTurtle3DSystem.getTurtle3D(sys)
984
1024
  if (turtle3d.three === null && sys.__getSysVar('THREE') === null) {
985
1025
  const baseUrl = sys.__getSysVar('T3DベースURL')
986
- const moduleUrl = baseUrl === '' ? 'three' : ( baseUrl + '/build/three.module.js' )
1026
+ const moduleUrl = baseUrl === '' ? 'three' : (baseUrl + '/build/three.module.js')
987
1027
  const promise = import(/* webpackIgnore: true */ moduleUrl)
988
1028
  promise.then(module => {
989
1029
  turtle3d.three = Object.assign({}, module)
@@ -991,6 +1031,8 @@ const PluginWeykTurtle3D: NakoPluginObject = {
991
1031
  return true
992
1032
  })
993
1033
  promise.catch(err => {
1034
+ console.error('T3D:ThreeJSのライブラリの読み込みに失敗しました')
1035
+ console.error(err)
994
1036
  return false
995
1037
  })
996
1038
  return await promise
@@ -1009,19 +1051,21 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1009
1051
  const turtle3d = WeykTurtle3DSystem.getTurtle3D(sys)
1010
1052
  if (turtle3d.three === null && sys.__getSysVar('THREE') === null) {
1011
1053
  const baseUrl = sys.__getSysVar('T3DベースURL')
1012
- const moduleUrl = baseUrl === '' ? 'three' : ( baseUrl + '/build/three.module.js' )
1054
+ const moduleUrl = baseUrl === '' ? 'three' : (baseUrl + '/build/three.module.js')
1013
1055
  const promise = import(/* webpackIgnore: true */ moduleUrl)
1014
1056
  promise.then(module => {
1015
1057
  turtle3d.three = Object.assign({}, module)
1016
1058
  turtle3d.ck()
1017
- callback(true)
1059
+ callback(turtle3d.three !== null)
1018
1060
  })
1019
1061
  promise.catch(err => {
1020
- callback(false)
1062
+ console.error('T3D:ThreeJSのライブラリの読み込みに失敗しました')
1063
+ console.error(err)
1064
+ callback(turtle3d.three !== null)
1021
1065
  })
1022
1066
  } else {
1023
1067
  turtle3d.ck()
1024
- callback(true)
1068
+ callback(turtle3d.three !== null)
1025
1069
  }
1026
1070
  },
1027
1071
  return_none: true
@@ -1032,13 +1076,13 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1032
1076
  asyncFn: true,
1033
1077
  pure: true,
1034
1078
  fn: async function (plugins: string[], sys: NakoSystem):Promise<void> {
1035
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1079
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1036
1080
  const l = plugins.length
1037
1081
  if (l === 0) {
1038
1082
  return
1039
1083
  }
1040
1084
  const baseUrl = sys.__getSysVar('T3DベースURL')
1041
- const totalPromise = new Promise<void> ((resolve, reject) => {
1085
+ const totalPromise = new Promise<void>((resolve, reject) => {
1042
1086
  const callbacks = (function (total) {
1043
1087
  let countTotal = 0
1044
1088
  let countSuccess = 0
@@ -1051,19 +1095,21 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1051
1095
  if (countTotal === countSuccess) {
1052
1096
  resolve()
1053
1097
  } else {
1054
- reject()
1098
+ reject(new Error('読み込みに失敗したプラグインがあります'))
1055
1099
  }
1056
1100
  }
1057
1101
  }
1058
1102
  })(l)
1059
1103
  for (const name of plugins) {
1060
- const pluginUrl = baseUrl === '' ? name : ( baseUrl + '/examples/jsm/' + name )
1104
+ const pluginUrl = baseUrl === '' ? name : (baseUrl + '/examples/jsm/' + name)
1061
1105
  const promise = import(/* webpackIgnore: true */ pluginUrl)
1062
1106
  promise.then(module => {
1063
1107
  Object.assign<THREENS.THREE, any>(three, module)
1064
1108
  callbacks(true)
1065
1109
  })
1066
1110
  promise.catch(err => {
1111
+ console.error('T3D:ThreeJSのプラグインの読み込みに失敗しました')
1112
+ console.error(err)
1067
1113
  callbacks(false)
1068
1114
  })
1069
1115
  }
@@ -1076,8 +1122,8 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1076
1122
  type: 'func',
1077
1123
  josi: [['に'], ['を']],
1078
1124
  pure: true,
1079
- fn: function (callback: CallbackType<void> , plugins: string[], sys: NakoSystem):void {
1080
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1125
+ fn: function (callback: CallbackType<void>, plugins: string[], sys: NakoSystem):void {
1126
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1081
1127
  const l = plugins.length
1082
1128
  if (l === 0) {
1083
1129
  callback()
@@ -1087,21 +1133,23 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1087
1133
  const callbacks = (function (callback, total) {
1088
1134
  let count = 0
1089
1135
  return function (success: boolean) {
1090
- count+=1
1136
+ count += 1
1091
1137
  if (count === total) {
1092
1138
  callback()
1093
1139
  }
1094
1140
  }
1095
1141
  })(callback, l)
1096
- for (let i=0;i < l;i++) {
1142
+ for (let i = 0; i < l; i++) {
1097
1143
  const name = plugins[i]
1098
- const pluginUrl = baseUrl === '' ? name : ( baseUrl + '/examples/jsm/' + name )
1144
+ const pluginUrl = baseUrl === '' ? name : (baseUrl + '/examples/jsm/' + name)
1099
1145
  const promise = import(/* webpackIgnore: true */ pluginUrl)
1100
1146
  promise.then(module => {
1101
1147
  Object.assign<THREENS.THREE, any>(three, module)
1102
1148
  callbacks(true)
1103
1149
  })
1104
1150
  promise.catch(err => {
1151
+ console.error('T3D:ThreeJSのプラグインの読み込みに失敗しました')
1152
+ console.error(err)
1105
1153
  callbacks(false)
1106
1154
  })
1107
1155
  }
@@ -1114,7 +1162,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1114
1162
  josi: [],
1115
1163
  pure: true,
1116
1164
  fn: function (sys: NakoSystem): number {
1117
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1165
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1118
1166
  turtle3d.initTurtle()
1119
1167
  const modelUrl = sys.__getSysVar('T3DカメモデルURL')
1120
1168
  const id = turtle3d.createTurtle(modelUrl)
@@ -1127,7 +1175,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1127
1175
  josi: [['に', 'へ', 'の']],
1128
1176
  pure: true,
1129
1177
  fn: function (id: number, sys: NakoSystem):void {
1130
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1178
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1131
1179
  turtle3d.target = id
1132
1180
  },
1133
1181
  return_none: true
@@ -1139,7 +1187,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1139
1187
  josi: [['に', 'へ']],
1140
1188
  pure: true,
1141
1189
  fn: function (url: string, sys: NakoSystem):Promise<number> {
1142
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1190
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1143
1191
  return turtle3d.queCurrentTurtle(new CommandModel(url))
1144
1192
  },
1145
1193
  return_none: false
@@ -1159,7 +1207,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1159
1207
  josi: [['に', 'へ']],
1160
1208
  pure: true,
1161
1209
  fn: function (xyz: NumericArray3, sys: NakoSystem): Promise<number> {
1162
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1210
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1163
1211
  return turtle3d.queCurrentTurtle(new CommandMoveAbsolute(new three.Vector3(xyz[0], xyz[1], xyz[2])))
1164
1212
  },
1165
1213
  return_none: false
@@ -1169,7 +1217,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1169
1217
  josi: [],
1170
1218
  pure: true,
1171
1219
  fn: function (sys: NakoSystem): Promise<number> {
1172
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1220
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1173
1221
  return turtle3d.queCurrentTurtle(new CommandHome('set'))
1174
1222
  },
1175
1223
  return_none: false
@@ -1179,7 +1227,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1179
1227
  josi: [],
1180
1228
  pure: true,
1181
1229
  fn: function (sys: NakoSystem): Promise<number> {
1182
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1230
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1183
1231
  return turtle3d.queCurrentTurtle(new CommandHome('jump'))
1184
1232
  },
1185
1233
  return_none: false
@@ -1189,7 +1237,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1189
1237
  josi: [['に', 'へ']],
1190
1238
  pure: true,
1191
1239
  fn: function (xyz: NumericArray3, sys: NakoSystem): Promise<number> {
1192
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1240
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1193
1241
  return turtle3d.queCurrentTurtle(new CommandJump(new three.Vector3(xyz[0], xyz[1], xyz[2])))
1194
1242
  },
1195
1243
  return_none: false
@@ -1199,7 +1247,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1199
1247
  josi: [['だけ']],
1200
1248
  pure: true,
1201
1249
  fn: function (l: number, sys: NakoSystem): Promise<number> {
1202
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1250
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1203
1251
  return turtle3d.queCurrentTurtle(new CommandMoveDirection('f', l))
1204
1252
  },
1205
1253
  return_none: false
@@ -1209,7 +1257,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1209
1257
  josi: [['だけ']],
1210
1258
  pure: true,
1211
1259
  fn: function (l: number, sys: NakoSystem): Promise<number> {
1212
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1260
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1213
1261
  return turtle3d.queCurrentTurtle(new CommandMoveDirection('b', l))
1214
1262
  },
1215
1263
  return_none: false
@@ -1219,7 +1267,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1219
1267
  josi: [['だけ']],
1220
1268
  pure: true,
1221
1269
  fn: function (l: number, sys: NakoSystem): Promise<number> {
1222
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1270
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1223
1271
  return turtle3d.queCurrentTurtle(new CommandMoveDirection('u', l))
1224
1272
  },
1225
1273
  return_none: false
@@ -1229,7 +1277,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1229
1277
  josi: [['だけ']],
1230
1278
  pure: true,
1231
1279
  fn: function (l: number, sys: NakoSystem): Promise<number> {
1232
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1280
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1233
1281
  return turtle3d.queCurrentTurtle(new CommandMoveDirection('d', l))
1234
1282
  },
1235
1283
  return_none: false
@@ -1239,7 +1287,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1239
1287
  josi: [['だけ']],
1240
1288
  pure: true,
1241
1289
  fn: function (l: number, sys: NakoSystem): Promise<number> {
1242
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1290
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1243
1291
  return turtle3d.queCurrentTurtle(new CommandMoveDirection('l', l))
1244
1292
  },
1245
1293
  return_none: false
@@ -1249,7 +1297,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1249
1297
  josi: [['だけ']],
1250
1298
  pure: true,
1251
1299
  fn: function (l: number, sys: NakoSystem): Promise<number> {
1252
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1300
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1253
1301
  return turtle3d.queCurrentTurtle(new CommandMoveDirection('r', l))
1254
1302
  },
1255
1303
  return_none: false
@@ -1259,24 +1307,19 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1259
1307
  josi: [['へ', 'に'], ['だけ']],
1260
1308
  pure: true,
1261
1309
  fn: function (dir:string, l: number, sys: NakoSystem): Promise<number> {
1262
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1310
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1263
1311
  let cmd:MoveDirection
1264
1312
  if (dir === '前' || dir === 'FORWARD' || dir === 'まえ') {
1265
1313
  cmd = 'f'
1266
- } else
1267
- if (dir === '後' || dir === 'BACK' || dir === 'うしろ' || dir === 'BACKWARD' || dir === 'あと') {
1314
+ } else if (dir === '後' || dir === 'BACK' || dir === 'うしろ' || dir === 'BACKWARD' || dir === 'あと') {
1268
1315
  cmd = 'b'
1269
- } else
1270
- if (dir === '上' || dir === 'UP' || dir === 'うえ') {
1316
+ } else if (dir === '上' || dir === 'UP' || dir === 'うえ') {
1271
1317
  cmd = 'u'
1272
- } else
1273
- if (dir === '下' || dir === 'DOWN' || dir === 'した') {
1318
+ } else if (dir === '下' || dir === 'DOWN' || dir === 'した') {
1274
1319
  cmd = 'd'
1275
- } else
1276
- if (dir === '右' || dir === 'RIGHT' || dir === 'みぎ') {
1320
+ } else if (dir === '右' || dir === 'RIGHT' || dir === 'みぎ') {
1277
1321
  cmd = 'r'
1278
- } else
1279
- if (dir === '左' || dir === 'LEFT' || dir === 'ひだり') {
1322
+ } else if (dir === '左' || dir === 'LEFT' || dir === 'ひだり') {
1280
1323
  cmd = 'l'
1281
1324
  } else {
1282
1325
  throw Error('方向の指定が正しくありません。前後上下左右のいずれかで指定してください。')
@@ -1290,7 +1333,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1290
1333
  josi: [['に', 'へ', 'の']],
1291
1334
  pure: true,
1292
1335
  fn: function (angle: THREENS.EulerArray, sys: NakoSystem): Promise<number> {
1293
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1336
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1294
1337
  return turtle3d.queCurrentTurtle(new CommandAngle(angle))
1295
1338
  },
1296
1339
  return_none: false
@@ -1300,7 +1343,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1300
1343
  josi: [['だけ']],
1301
1344
  pure: true,
1302
1345
  fn: function (a: number, sys: NakoSystem): Promise<number> {
1303
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1346
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1304
1347
  return turtle3d.queCurrentTurtle(new CommandRotate('r', a))
1305
1348
  },
1306
1349
  return_none: false
@@ -1310,7 +1353,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1310
1353
  josi: [['だけ']],
1311
1354
  pure: true,
1312
1355
  fn: function (a: number, sys: NakoSystem): Promise<number> {
1313
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1356
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1314
1357
  return turtle3d.queCurrentTurtle(new CommandRotate('l', a))
1315
1358
  },
1316
1359
  return_none: false
@@ -1320,7 +1363,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1320
1363
  josi: [['だけ']],
1321
1364
  pure: true,
1322
1365
  fn: function (a: number, sys: NakoSystem): Promise<number> {
1323
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1366
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1324
1367
  return turtle3d.queCurrentTurtle(new CommandRotate('u', a))
1325
1368
  },
1326
1369
  return_none: false
@@ -1330,7 +1373,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1330
1373
  josi: [['だけ']],
1331
1374
  pure: true,
1332
1375
  fn: function (a: number, sys: NakoSystem): Promise<number> {
1333
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1376
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1334
1377
  return turtle3d.queCurrentTurtle(new CommandRotate('d', a))
1335
1378
  },
1336
1379
  return_none: false
@@ -1340,18 +1383,15 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1340
1383
  josi: [['へ', 'に'], ['だけ']],
1341
1384
  pure: true,
1342
1385
  fn: function (dir: string, a: number, sys: NakoSystem): Promise<number> {
1343
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1386
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1344
1387
  let cmd:RotateDirection
1345
1388
  if (dir === '上' || dir === 'UP' || dir === 'うえ') {
1346
1389
  cmd = 'u'
1347
- } else
1348
- if (dir === '下' || dir === 'DOWN' || dir === 'した') {
1390
+ } else if (dir === '下' || dir === 'DOWN' || dir === 'した') {
1349
1391
  cmd = 'd'
1350
- } else
1351
- if (dir === '右' || dir === 'RIGHT' || dir === 'みぎ') {
1392
+ } else if (dir === '右' || dir === 'RIGHT' || dir === 'みぎ') {
1352
1393
  cmd = 'r'
1353
- } else
1354
- if (dir === '左' || dir === 'LEFT' || dir === 'ひだり') {
1394
+ } else if (dir === '左' || dir === 'LEFT' || dir === 'ひだり') {
1355
1395
  cmd = 'l'
1356
1396
  } else {
1357
1397
  throw Error('方向の指定が正しくありません。上下左右のいずれかで指定してください。')
@@ -1365,7 +1405,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1365
1405
  josi: [['だけ']],
1366
1406
  pure: true,
1367
1407
  fn: function (a: number, sys: NakoSystem): Promise<number> {
1368
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1408
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1369
1409
  return turtle3d.queCurrentTurtle(new CommandRoll('r', a))
1370
1410
  },
1371
1411
  return_none: false
@@ -1375,7 +1415,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1375
1415
  josi: [['だけ']],
1376
1416
  pure: true,
1377
1417
  fn: function (a: number, sys: NakoSystem): Promise<number> {
1378
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1418
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1379
1419
  return turtle3d.queCurrentTurtle(new CommandRoll('l', a))
1380
1420
  },
1381
1421
  return_none: false
@@ -1385,12 +1425,11 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1385
1425
  josi: [['に', 'へ'], ['だけ']],
1386
1426
  pure: true,
1387
1427
  fn: function (dir: string, a: number, sys: NakoSystem): Promise<number> {
1388
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1428
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1389
1429
  let cmd:RollDirection
1390
1430
  if (dir === '右' || dir === 'RIGHT' || dir === 'みぎ') {
1391
1431
  cmd = 'r'
1392
- } else
1393
- if (dir === '左' || dir === 'LEFT' || dir === 'ひだり') {
1432
+ } else if (dir === '左' || dir === 'LEFT' || dir === 'ひだり') {
1394
1433
  cmd = 'l'
1395
1434
  } else {
1396
1435
  throw Error('向きの指定が正しくありません。左右のどちらかで指定してください。')
@@ -1404,7 +1443,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1404
1443
  josi: [['に', 'へ']],
1405
1444
  pure: true,
1406
1445
  fn: function (c: number|THREENS.Color, sys: NakoSystem): Promise<number> {
1407
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1446
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1408
1447
  if (typeof c === 'number') { c = new three.Color(c) }
1409
1448
  return turtle3d.queCurrentTurtle(new CommandPenColor(c))
1410
1449
  },
@@ -1415,7 +1454,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1415
1454
  josi: [['に', 'へ']],
1416
1455
  pure: true,
1417
1456
  fn: function (w: number, sys: NakoSystem): Promise<number> {
1418
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1457
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1419
1458
  return turtle3d.queCurrentTurtle(new CommandPenWidth(w))
1420
1459
  },
1421
1460
  return_none: false
@@ -1425,7 +1464,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1425
1464
  josi: [['に', 'へ']],
1426
1465
  pure: true,
1427
1466
  fn: function (w: boolean|number, sys: NakoSystem): Promise<number> {
1428
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1467
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1429
1468
  return turtle3d.queCurrentTurtle(new CommandPenEnable(!!w))
1430
1469
  },
1431
1470
  return_none: false
@@ -1435,7 +1474,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1435
1474
  josi: [],
1436
1475
  pure: true,
1437
1476
  fn: function (sys: NakoSystem):void {
1438
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1477
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1439
1478
  turtle3d.clearAll()
1440
1479
  },
1441
1480
  return_none: true
@@ -1445,7 +1484,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1445
1484
  josi: [],
1446
1485
  pure: true,
1447
1486
  fn: function (sys: NakoSystem): Promise<number> {
1448
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1487
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1449
1488
  return turtle3d.queCurrentTurtle(new CommandVisible(false))
1450
1489
  },
1451
1490
  return_none: false
@@ -1455,7 +1494,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1455
1494
  josi: [],
1456
1495
  pure: true,
1457
1496
  fn: function (sys: NakoSystem): Promise<number> {
1458
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1497
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1459
1498
  return turtle3d.queCurrentTurtle(new CommandVisible(true))
1460
1499
  },
1461
1500
  return_none: false
@@ -1465,7 +1504,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1465
1504
  josi: [['に', 'へ']],
1466
1505
  pure: true,
1467
1506
  fn: function (n: number, sys: NakoSystem):void {
1468
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1507
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1469
1508
  if (n < 0 || n >= turtle3d.turtles.length) {
1470
1509
  throw Error('指定された番号のカメはいません。')
1471
1510
  }
@@ -1475,14 +1514,14 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1475
1514
  return_none: true
1476
1515
  },
1477
1516
  // @3Dタートルグラフィックス・基本機能
1478
- 'T3D自動描画': {type: 'var', value: true}, // @T3Dじどうびょうが
1479
- 'T3D自動実行': {type: 'var', value: true}, // @T3Dじどうじっこう
1517
+ 'T3D自動描画': { type: 'var', value: true }, // @T3Dじどうびょうが
1518
+ 'T3D自動実行': { type: 'var', value: true }, // @T3Dじどうじっこう
1480
1519
  'T3D描画準備': { // @指定したDOMのIDに対する描画を準備し、描画オブジェクトを返す // @T3Dびょうがじゅんび
1481
1520
  type: 'func',
1482
1521
  josi: [['に', 'へ']],
1483
1522
  pure: true,
1484
1523
  fn: function (to: string|Element|null, sys: NakoSystem):THREENS.WebGLRenderer {
1485
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1524
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1486
1525
 
1487
1526
  if (typeof to === 'string') { to = document.querySelector(to) || document.getElementById(to) }
1488
1527
  if (!to) { throw new Error('T3D描画準備に指定した描画先に誤りがあります') }
@@ -1498,7 +1537,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1498
1537
  josi: [],
1499
1538
  pure: true,
1500
1539
  fn: function (sys: NakoSystem):void {
1501
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1540
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1502
1541
  turtle3d.doDraw(true)
1503
1542
  },
1504
1543
  return_none: true
@@ -1508,7 +1547,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1508
1547
  josi: [],
1509
1548
  pure: true,
1510
1549
  fn: function (sys: NakoSystem):void {
1511
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1550
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1512
1551
  turtle3d.doDraw(false)
1513
1552
  },
1514
1553
  return_none: true
@@ -1518,7 +1557,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1518
1557
  josi: [],
1519
1558
  pure: true,
1520
1559
  fn: function (sys: NakoSystem):void {
1521
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1560
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1522
1561
  turtle3d.animationTick()
1523
1562
  },
1524
1563
  return_none: true
@@ -1528,7 +1567,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1528
1567
  josi: [['に', 'へ']],
1529
1568
  pure: true,
1530
1569
  fn: function (c: number, sys: NakoSystem):void {
1531
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1570
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1532
1571
  const renderer = turtle3d.getRenderer()
1533
1572
  renderer.setClearColor(c)
1534
1573
  turtle3d.animationStart()
@@ -1540,7 +1579,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1540
1579
  josi: [['に', 'へ']],
1541
1580
  pure: true,
1542
1581
  fn: function (a: number, sys: NakoSystem):void {
1543
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1582
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1544
1583
  const renderer = turtle3d.getRenderer()
1545
1584
  renderer.setClearAlpha(a)
1546
1585
  turtle3d.animationStart()
@@ -1552,7 +1591,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1552
1591
  josi: [],
1553
1592
  pure: true,
1554
1593
  fn: function (sys: NakoSystem): null|string {
1555
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1594
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1556
1595
  if (!turtle3d._lines) { return null }
1557
1596
  return JSON.stringify(turtle3d._lines.toJSON())
1558
1597
  },
@@ -1563,7 +1602,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1563
1602
  josi: [],
1564
1603
  pure: true,
1565
1604
  fn: function (sys: NakoSystem):void {
1566
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1605
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1567
1606
  turtle3d.clearRenderer()
1568
1607
  },
1569
1608
  return_none: true
@@ -1573,7 +1612,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1573
1612
  josi: [],
1574
1613
  pure: true,
1575
1614
  fn: function (sys: NakoSystem): THREENS.WebGLRenderer {
1576
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1615
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1577
1616
  return turtle3d.getRenderer()
1578
1617
  },
1579
1618
  return_none: false
@@ -1583,7 +1622,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1583
1622
  josi: [],
1584
1623
  pure: true,
1585
1624
  fn: function (sys: NakoSystem): THREENS.Scene {
1586
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1625
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1587
1626
  return turtle3d.getScene()
1588
1627
  },
1589
1628
  return_none: false
@@ -1593,7 +1632,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1593
1632
  josi: [],
1594
1633
  pure: true,
1595
1634
  fn: function (sys: NakoSystem): THREENS.Camera {
1596
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1635
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1597
1636
  return turtle3d.getCamera()
1598
1637
  },
1599
1638
  return_none: false
@@ -1603,7 +1642,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1603
1642
  josi: [],
1604
1643
  pure: true,
1605
1644
  fn: function (sys: NakoSystem): null|THREENS.Group {
1606
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1645
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1607
1646
  return turtle3d._lines
1608
1647
  },
1609
1648
  return_none: false
@@ -1613,7 +1652,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1613
1652
  josi: [],
1614
1653
  pure: true,
1615
1654
  fn: function (sys: NakoSystem): null|THREENS.Group {
1616
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1655
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1617
1656
  const lines = turtle3d._lines
1618
1657
  turtle3d._lines = new three.Group()
1619
1658
  turtle3d.animationStart()
@@ -1637,7 +1676,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1637
1676
  josi: [],
1638
1677
  pure: true,
1639
1678
  fn: function (sys: NakoSystem): null|THREENS.OrbitControls {
1640
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1679
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1641
1680
  if (typeof three.OrbitControls !== 'undefined') {
1642
1681
  return turtle3d.setupControl(three.OrbitControls) as THREENS.OrbitControls
1643
1682
  }
@@ -1650,7 +1689,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1650
1689
  josi: [],
1651
1690
  pure: true,
1652
1691
  fn: function (sys: NakoSystem):void {
1653
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1692
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1654
1693
  if (turtle3d._controls) {
1655
1694
  turtle3d._controls.enabled = true
1656
1695
  }
@@ -1662,7 +1701,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1662
1701
  josi: [],
1663
1702
  pure: true,
1664
1703
  fn: function (sys: NakoSystem):void {
1665
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1704
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1666
1705
  if (turtle3d._controls) {
1667
1706
  turtle3d._controls.enabled = false
1668
1707
  }
@@ -1674,7 +1713,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1674
1713
  josi: [],
1675
1714
  pure: true,
1676
1715
  fn: function (sys: NakoSystem):void {
1677
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1716
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1678
1717
  turtle3d.setCameraHelper(true)
1679
1718
  },
1680
1719
  return_none: true
@@ -1684,7 +1723,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1684
1723
  josi: [],
1685
1724
  pure: true,
1686
1725
  fn: function (sys: NakoSystem):void {
1687
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1726
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1688
1727
  turtle3d.setCameraHelper(false)
1689
1728
  },
1690
1729
  return_none: true
@@ -1694,7 +1733,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1694
1733
  josi: [],
1695
1734
  pure: true,
1696
1735
  fn: function (sys: NakoSystem):void {
1697
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1736
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1698
1737
  turtle3d.setAxisHelper(true)
1699
1738
  },
1700
1739
  return_none: true
@@ -1704,7 +1743,7 @@ const PluginWeykTurtle3D: NakoPluginObject = {
1704
1743
  josi: [],
1705
1744
  pure: true,
1706
1745
  fn: function (sys: NakoSystem):void {
1707
- const [ turtle3d, three ] = WeykTurtle3DSystem.getEnv(sys)
1746
+ const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
1708
1747
  turtle3d.setAxisHelper(false)
1709
1748
  },
1710
1749
  return_none: true