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.
- package/batch/command.txt +472 -469
- package/batch/pickup_command.nako3 +1 -1
- package/core/.eslintrc.cjs +10 -3
- package/core/package-lock.json +1184 -645
- package/core/package.json +4 -5
- package/core/src/nako3.mjs +8 -6
- package/core/src/nako3.mts +19 -16
- package/core/src/nako_ast.mts +2 -3
- package/core/src/nako_core_version.mjs +2 -2
- package/core/src/nako_core_version.mts +2 -2
- package/core/src/nako_csv.mjs +1 -0
- package/core/src/nako_csv.mts +3 -2
- package/core/src/nako_from_dncl.mjs +1 -1
- package/core/src/nako_from_dncl.mts +1 -1
- package/core/src/nako_from_dncl2.mjs +1 -1
- package/core/src/nako_from_dncl2.mts +2 -2
- package/core/src/nako_gen.mjs +37 -35
- package/core/src/nako_gen.mts +70 -67
- package/core/src/nako_global.mjs +3 -2
- package/core/src/nako_global.mts +3 -2
- package/core/src/nako_lexer.mjs +3 -3
- package/core/src/nako_lexer.mts +3 -3
- package/core/src/nako_logger.mjs +1 -1
- package/core/src/nako_logger.mts +2 -2
- package/core/src/nako_parser3.mjs +67 -59
- package/core/src/nako_parser3.mts +96 -90
- package/core/src/nako_parser_base.mts +3 -3
- package/core/src/nako_prepare.mjs +1 -1
- package/core/src/nako_prepare.mts +1 -1
- package/core/src/nako_source_mapping.mts +0 -1
- package/core/src/nako_token.mts +8 -8
- package/core/src/nako_types.mts +1 -1
- package/core/src/plugin_api.mts +1 -1
- package/core/src/plugin_csv.mjs +1 -0
- package/core/src/plugin_csv.mts +2 -1
- package/core/src/plugin_math.mjs +2 -2
- package/core/src/plugin_math.mts +3 -3
- package/core/src/plugin_promise.mjs +1 -1
- package/core/src/plugin_promise.mts +1 -1
- package/core/src/plugin_system.mjs +117 -40
- package/core/src/plugin_system.mts +132 -58
- package/core/src/plugin_test.mjs +3 -1
- package/core/src/plugin_test.mts +3 -1
- package/core/test/basic_test.mjs +16 -0
- package/core/test/calc_test.mjs +7 -0
- package/core/test/plugin_system_test.mjs +33 -0
- package/doc/files.md +4 -4
- package/doc/plugins.md +1 -1
- package/package.json +9 -9
- package/release/_hash.txt +36 -121
- package/release/_script-tags.txt +16 -33
- package/release/command.json +1 -1
- package/release/command.json.js +1 -1
- package/release/command_cnako3.json +1 -1
- package/release/command_list.json +1 -1
- package/release/edit_main.js +3 -3
- package/release/edit_main.js.map +2 -2
- package/release/editor.js +3 -3
- package/release/plugin_markup.js +53 -53
- package/release/plugin_markup.js.map +3 -3
- package/release/plugin_weykturtle3d.js +1 -1
- package/release/plugin_weykturtle3d.js.map +4 -4
- package/release/version.js +3 -3
- package/release/version_main.js +3 -3
- package/release/version_main.js.map +2 -2
- package/release/wnako3.js +66 -66
- package/release/wnako3.js.map +3 -3
- package/release/wnako3webworker.js +58 -58
- package/release/wnako3webworker.js.map +3 -3
- package/src/browsers.txt +30 -20
- package/src/cnako3mod.mjs +19 -18
- package/src/cnako3mod.mts +17 -16
- package/src/deno_wrapper.mjs +6 -6
- package/src/deno_wrapper.mts +11 -11
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
- package/src/plugin_browser.mjs +2 -2
- package/src/plugin_browser.mts +5 -5
- package/src/plugin_browser_ajax.mjs +2 -2
- package/src/plugin_browser_ajax.mts +2 -2
- package/src/plugin_browser_api.mts +0 -1
- package/src/plugin_browser_crypto.mjs +8 -8
- package/src/plugin_browser_crypto.mts +13 -13
- package/src/plugin_browser_dom_basic.mjs +3 -3
- package/src/plugin_browser_dom_basic.mts +5 -7
- package/src/plugin_browser_dom_event.mjs +1 -1
- package/src/plugin_browser_dom_event.mts +2 -1
- package/src/plugin_browser_dom_parts.mjs +33 -18
- package/src/plugin_browser_dom_parts.mts +60 -59
- package/src/plugin_browser_speech.mjs +1 -1
- package/src/plugin_browser_speech.mts +1 -1
- package/src/plugin_node.mjs +5 -3
- package/src/plugin_node.mts +6 -4
- package/src/plugin_weykturtle3d.mjs +38 -15
- package/src/plugin_weykturtle3d.mts +279 -240
- package/src/plugin_weykturtle3d_three.mjs +3 -0
- package/src/plugin_weykturtle3d_three.mts +214 -0
- package/src/plugin_weykturtle3d_threeutil.mjs +28 -0
- package/src/plugin_weykturtle3d_threeutil.mts +31 -0
- package/src/wnako3.mjs +1 -0
- package/src/wnako3.mts +1 -0
- package/src/wnako3mod.mjs +5 -2
- package/src/wnako3mod.mts +6 -3
- package/batch/command_nakopad.txt +0 -1177
- package/core/__report.txt +0 -617
- package/core/command/plugin_snako.mjs +0 -112
- package/core/command/snako.mjs +0 -108
- package/release/core_src_nako_josi_list_mjs.js +0 -3
- package/release/core_src_nako_josi_list_mjs.js.LICENSE.txt +0 -3
- package/release/core_src_nako_josi_list_mjs.js.map +0 -1
- package/release/core_src_nako_reserved_words_mjs.js +0 -3
- package/release/core_src_nako_reserved_words_mjs.js.LICENSE.txt +0 -3
- package/release/core_src_nako_reserved_words_mjs.js.map +0 -1
- package/release/editor/edit_main.js +0 -48
- package/release/editor/edit_main.js.map +0 -7
- package/release/editor/version_main.js +0 -44
- package/release/editor/version_main.js.map +0 -7
- package/release/editor.js.LICENSE.txt +0 -91
- package/release/editor.js.map +0 -1
- package/release/nako_gen_async.js +0 -2
- package/release/nako_gen_async.js.LICENSE.txt +0 -21
- package/release/nako_gen_async.js.map +0 -1
- package/release/plugin_caniuse.js.LICENSE.txt +0 -15
- package/release/plugin_datetime.js.LICENSE.txt +0 -21
- package/release/plugin_kansuji.js.LICENSE.txt +0 -3
- package/release/plugin_markup.js.LICENSE.txt +0 -15
- package/release/plugin_toml.js +0 -295
- package/release/plugin_toml.js.map +0 -7
- package/release/plugin_turtle.js.LICENSE.txt +0 -9
- package/release/plugin_webworker.js.LICENSE.txt +0 -3
- package/release/plugin_weykturtle3d.js.LICENSE.txt +0 -3
- package/release/src/plugin_caniuse.js +0 -2
- package/release/src/plugin_caniuse.js.map +0 -7
- package/release/src/plugin_datetime.js +0 -2
- package/release/src/plugin_datetime.js.map +0 -7
- package/release/src/plugin_kansuji.js +0 -2
- package/release/src/plugin_kansuji.js.map +0 -7
- package/release/src/plugin_keigo.js +0 -2
- package/release/src/plugin_keigo.js.map +0 -7
- package/release/src/plugin_markup.js +0 -64
- package/release/src/plugin_markup.js.map +0 -7
- package/release/src/plugin_three.js +0 -2
- package/release/src/plugin_three.js.map +0 -7
- package/release/src/plugin_turtle.js +0 -2
- package/release/src/plugin_turtle.js.map +0 -7
- package/release/src/plugin_webworker.js +0 -4
- package/release/src/plugin_webworker.js.map +0 -7
- package/release/src/plugin_weykturtle3d.js +0 -2
- package/release/src/plugin_weykturtle3d.js.map +0 -7
- package/release/src/wnako3.js +0 -482
- package/release/src/wnako3.js.map +0 -7
- package/release/src/wnako3webworker.js +0 -428
- package/release/src/wnako3webworker.js.map +0 -7
- package/release/stats.json +0 -1
- package/release/version.js.LICENSE.txt +0 -65
- package/release/version.js.map +0 -1
- package/release/wnako3.js.LICENSE.txt +0 -341
- package/release/wnako3webworker.js.LICENSE.txt +0 -209
- 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 './
|
|
9
|
-
import type
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
const
|
|
334
|
-
if (dir === 'u'
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
-
|
|
407
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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' : (
|
|
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' : (
|
|
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(
|
|
1059
|
+
callback(turtle3d.three !== null)
|
|
1018
1060
|
})
|
|
1019
1061
|
promise.catch(err => {
|
|
1020
|
-
|
|
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(
|
|
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 [
|
|
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>
|
|
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 : (
|
|
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
|
|
1080
|
-
const [
|
|
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 : (
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
1746
|
+
const [turtle3d, three] = WeykTurtle3DSystem.getEnv(sys)
|
|
1708
1747
|
turtle3d.setAxisHelper(false)
|
|
1709
1748
|
},
|
|
1710
1749
|
return_none: true
|