From 54da27813bdc654df15f4e5aa601286a1cf79a92 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 9 Mar 2023 19:36:57 +0900 Subject: [PATCH 01/37] =?UTF-8?q?=ED=8C=8C=EB=A1=9C=EB=93=88=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9D=20=EC=BD=94=EB=93=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EC=8B=A0=ED=98=B8=20=EB=B8=94=EB=9F=AD=20-=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/playground/blocks/hardware/block_robotry_parodule.js diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js new file mode 100644 index 0000000000..3eed58e182 --- /dev/null +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -0,0 +1,110 @@ +'use strict'; + +Entry.Robotry_Parodule = { + id: ['4B.2'], + name: 'Robotry_Parodule', + url: 'http://robotry.co.kr', + imageName: 'arduinoNano.png', + title: { + ko: '파로듈', + en: 'Parodule', + }, + + setZero() { + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue = { + GET: {}, + SET: {}, + }; + } else { + const keySet = Object.keys(Entry.hw.sendQueue.SET); + keySet.forEach((key) => { + Entry.hw.sendQueue.SET[key].data = 0; + Entry.hw.sendQueue.SET[key].time = new Date().getTime(); + }); + } + Entry.hw.update(); + }, + + controlTypes: { + DIGITAL: 0, + ANALOG: 1, + STRING: 2, + }, + BlockState: {}, +}; + +Entry.Robotry_Parodule.setLanguage = function() { + return { + ko: { + template: { + Parodule_Update: '파로듈 업데이트 %1', + }, + Helper:{ // 블록 선택시 나타나는 한글 설명 + Parodule_Update : "파로듈을 업데이트하는 블록" + }, + Blocks : { + } + }, + en: { + template: { + Parodule_Update: 'Parodule Update %1', + }, + Helper:{ + Parodule_Update : "파로듈을 업데이트하는 블록" + }, + Blocks : { + }, + }, + }; +}; + +// 블록의 배치 순서 +Entry.Robotry_Parodule.blockMenuBlocks = [ + 'Parodule_Update', +]; + +/* + * 로보트리의 아두이노 제어 블록 리스트 + * 주석에 블록이라고 표시된것만 제어 블록임 나머진 포트 리스트 + */ +Entry.Robotry_Parodule.getBlocks = function() { + return { + Parodule_Update: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_Update', + }, + paramsKeyMap: {}, + class: 'Set', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const comand = "update\n"; + Entry.hw.sendQueue.SET[0] = { + type: Entry.Robotry_Parodule.controlTypes.STRING, + data: comand, + time: new Date().getTime(), + }; + }, + syntax: { + js: [], + py: [], + } + } + }; +}; + + +module.exports = Entry.Robotry_Parodule; \ No newline at end of file From d40195ecdb58ff95494acbbb51290d58527ca114 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 30 Mar 2023 18:29:35 +0900 Subject: [PATCH 02/37] =?UTF-8?q?=EB=AA=A8=ED=84=B0=EB=A5=BC=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=ED=95=98=EB=8A=94=20=EC=9E=84=EC=8B=9C=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9D=20=EC=95=84=EC=A7=81=20=EB=AF=B8=EB=93=A4=EC=9B=A8?= =?UTF-8?q?=EC=96=B4=20=EC=AA=BD=20=EB=B2=84=ED=8D=BC=20=ED=95=A9=EC=84=B1?= =?UTF-8?q?=EC=9D=84=20=EA=B5=AC=ED=98=84=20=EC=95=88=ED=95=B4=EB=86=94?= =?UTF-8?q?=EC=84=9C=20=EB=8F=99=EC=9E=91=EC=9D=80=20=EC=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 105 +++++++++++++++++- 1 file changed, 99 insertions(+), 6 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 3eed58e182..563d818274 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -13,6 +13,7 @@ Entry.Robotry_Parodule = { setZero() { if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue = { + CMD: {}, GET: {}, SET: {}, }; @@ -39,9 +40,11 @@ Entry.Robotry_Parodule.setLanguage = function() { ko: { template: { Parodule_Update: '파로듈 업데이트 %1', + Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전' }, Helper:{ // 블록 선택시 나타나는 한글 설명 - Parodule_Update : "파로듈을 업데이트하는 블록" + Parodule_Update : "파로듈을 업데이트하는 블록", + Parodule_Motor: '모터를 제어하는 블록' }, Blocks : { } @@ -49,9 +52,11 @@ Entry.Robotry_Parodule.setLanguage = function() { en: { template: { Parodule_Update: 'Parodule Update %1', + Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전' }, Helper:{ - Parodule_Update : "파로듈을 업데이트하는 블록" + Parodule_Update : "파로듈을 업데이트하는 블록", + Parodule_Motor: '모터를 제어하는 블록' }, Blocks : { }, @@ -62,6 +67,7 @@ Entry.Robotry_Parodule.setLanguage = function() { // 블록의 배치 순서 Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Update', + 'Parodule_Motor', ]; /* @@ -70,6 +76,7 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ */ Entry.Robotry_Parodule.getBlocks = function() { return { + /* Parodule Upadate Start */ Parodule_Update: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -91,18 +98,104 @@ Entry.Robotry_Parodule.getBlocks = function() { class: 'Set', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const comand = "update\n"; - Entry.hw.sendQueue.SET[0] = { + const update = "update\r\n"; + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue['CMD'] = { type: Entry.Robotry_Parodule.controlTypes.STRING, - data: comand, + data: update, + time: new Date().getTime(), + } + }, + syntax: { + js: [], + py: [], + } + }, + /* Parodule Update END */ + + /* Paroduel Motor Start */ + Parodule_Motor: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Dropdown', + option: [ + ['1', '1'], + ['2', '2'], + ['3', '3'], + ['4', '4'], + ], + value: '1', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + option: [ + ['정회전', '0'], + ['역회전', '34'], + ], + value: '0', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + option: [ + ['25%', '36'], + ['50%', '37'], + ['75%', '38'], + ['100%', '39'], + ], + value: '0', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_Motor', + }, + paramsKeyMap: { + PORT: 0, + STATE: 1, + VALUE: 2 + }, + class: 'Set', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + const state = script.getNumberValue('STATE'); + const value = script.getNumberValue('VALUE'); + if(!Entry.hw.sendQueue.SET){ + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: state + value, time: new Date().getTime(), - }; + } }, syntax: { js: [], py: [], } } + /* Parodule Motor End */ }; }; From 5111f727641d59ba0183fefc0e0efb4719f415c5 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 6 Apr 2023 17:04:08 +0900 Subject: [PATCH 03/37] =?UTF-8?q?LED=20=EB=AA=A8=EB=93=88=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=20=EB=B8=94=EB=A1=9D=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 139 ++++++++++++++---- 1 file changed, 113 insertions(+), 26 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 563d818274..1f7d3cb42d 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -13,9 +13,9 @@ Entry.Robotry_Parodule = { setZero() { if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue = { + SET: {}, CMD: {}, GET: {}, - SET: {}, }; } else { const keySet = Object.keys(Entry.hw.sendQueue.SET); @@ -40,7 +40,8 @@ Entry.Robotry_Parodule.setLanguage = function() { ko: { template: { Parodule_Update: '파로듈 업데이트 %1', - Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전' + Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', + Parodule_LED: '%1 번 LED를 %2 으로 설정 %4', }, Helper:{ // 블록 선택시 나타나는 한글 설명 Parodule_Update : "파로듈을 업데이트하는 블록", @@ -52,7 +53,8 @@ Entry.Robotry_Parodule.setLanguage = function() { en: { template: { Parodule_Update: 'Parodule Update %1', - Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전' + Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', + Parodule_LED: '%1 번 LED를 %2 으로 설정 %4', }, Helper:{ Parodule_Update : "파로듈을 업데이트하는 블록", @@ -68,6 +70,7 @@ Entry.Robotry_Parodule.setLanguage = function() { Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Update', 'Parodule_Motor', + 'Parodule_LED', ]; /* @@ -95,18 +98,19 @@ Entry.Robotry_Parodule.getBlocks = function() { type: 'Parodule_Update', }, paramsKeyMap: {}, - class: 'Set', + class: 'CMD', isNotFor: ['Robotry_Parodule'], func(sprite, script) { const update = "update\r\n"; - if (!Entry.hw.sendQueue.SET) { - Entry.hw.sendQueue.SET = {}; + if (!Entry.hw.sendQueue.CMD) { + Entry.hw.sendQueue.CMD = {}; } - Entry.hw.sendQueue['CMD'] = { + Entry.hw.sendQueue.CMD = { type: Entry.Robotry_Parodule.controlTypes.STRING, data: update, time: new Date().getTime(), } + return script.callReturn(); }, syntax: { js: [], @@ -124,37 +128,37 @@ Entry.Robotry_Parodule.getBlocks = function() { params: [ { type: 'Dropdown', - option: [ - ['1', '1'], - ['2', '2'], - ['3', '3'], - ['4', '4'], + options: [ + ['1', 1], + ['2', 2], + ['3', 3], + ['4', 4], ], - value: '1', + value: [1], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, { type: 'Dropdown', - option: [ - ['정회전', '0'], - ['역회전', '34'], + options: [ + ['정회전', 0], + ['역회전', 34], ], - value: '0', + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, { type: 'Dropdown', - option: [ - ['25%', '36'], - ['50%', '37'], - ['75%', '38'], - ['100%', '39'], + options: [ + ['100%', 39], + [ '75%', 38], + [ '50%', 37], + [ '25%', 36], ], - value: '0', + value: [39], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -175,7 +179,7 @@ Entry.Robotry_Parodule.getBlocks = function() { STATE: 1, VALUE: 2 }, - class: 'Set', + class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT'); @@ -184,17 +188,100 @@ Entry.Robotry_Parodule.getBlocks = function() { if(!Entry.hw.sendQueue.SET){ Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue[port] = { + Entry.hw.sendQueue.SET[port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: state + value, time: new Date().getTime(), } + return script.callReturn(); }, syntax: { js: [], py: [], } - } + }, + /* Parodule Motor End */ + + + /* Paroduel Motor Start */ + Parodule_LED: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Dropdown', + options: [ + ['1', 1], + ['2', 2], + ['3', 3], + ['4', 4], + ], + value: [1], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['없음', 238], + ['빨강색', 19], + ['다홍색', 20], + ['주황색', 21], + ['귤색', 22], + ['노랑색', 23], + ['연두색', 24], + ['녹색', 25], + ['청록색', 26], + ['파랑색', 27], + ['감청색', 28], + ['남색', 29], + ['남보라색', 30], + ['보라색', 31], + ['자주색', 32], + ], + value: [19], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_LED', + }, + paramsKeyMap: { + PORT: 0, + VALUE: 1 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + const value = script.getNumberValue('VALUE'); + if(!Entry.hw.sendQueue.SET){ + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: value, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [], + } + }, /* Parodule Motor End */ }; }; From fd83a7bb14835bebff249f5fe5aa423421a0da22 Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Fri, 7 Apr 2023 15:32:05 +0900 Subject: [PATCH 04/37] =?UTF-8?q?=EB=B6=80=EC=A0=80=20=EB=B8=94=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 104 +++++++++++++++++- 1 file changed, 100 insertions(+), 4 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 1f7d3cb42d..237205d944 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -41,7 +41,8 @@ Entry.Robotry_Parodule.setLanguage = function() { template: { Parodule_Update: '파로듈 업데이트 %1', Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', - Parodule_LED: '%1 번 LED를 %2 으로 설정 %4', + Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %4', + Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', }, Helper:{ // 블록 선택시 나타나는 한글 설명 Parodule_Update : "파로듈을 업데이트하는 블록", @@ -54,7 +55,8 @@ Entry.Robotry_Parodule.setLanguage = function() { template: { Parodule_Update: 'Parodule Update %1', Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', - Parodule_LED: '%1 번 LED를 %2 으로 설정 %4', + Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %4', + Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', }, Helper:{ Parodule_Update : "파로듈을 업데이트하는 블록", @@ -71,6 +73,7 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Update', 'Parodule_Motor', 'Parodule_LED', + 'Parodule_BUZZER', ]; /* @@ -203,7 +206,7 @@ Entry.Robotry_Parodule.getBlocks = function() { /* Parodule Motor End */ - /* Paroduel Motor Start */ + /* Paroduel LED Start */ Parodule_LED: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -282,7 +285,100 @@ Entry.Robotry_Parodule.getBlocks = function() { py: [], } }, - /* Parodule Motor End */ + /* Parodule LED End */ + + /* Paroduel Buzzer Start */ + Parodule_BUZZER: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Dropdown', + options: [ + ['1', 1], + ['2', 2], + ['3', 3], + ['4', 4], + ], + value: [1], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['0', 0], + ['1', 12], + ['2', 24], + ['3', 36], + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['도', 47], + ['도#', 48], + ['레', 49], + ['레#', 50], + ['미', 51], + ['파', 52], + ['파#', 53], + ['솔', 54], + ['솔#', 55], + ['라', 56], + ['라#', 57], + ['시', 58], + ], + value: [47], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_BUZZER', + }, + paramsKeyMap: { + PORT: 0, + OCTAVE: 1, + TONE: 2 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + const octave = script.getNumberValue('OCTAVE'); + const tone = script.getNumberValue('TONE'); + if(!Entry.hw.sendQueue.SET){ + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: octave + tone, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [], + } + }, + /* Parodule Buzzer End */ }; }; From dc2f269b0b48936ad3e407a47f0aea83612854b3 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Sat, 8 Apr 2023 00:57:08 +0900 Subject: [PATCH 05/37] =?UTF-8?q?=ED=95=98=EB=93=9C=EC=9B=A8=EC=96=B4=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9D=20=EB=A7=88=ED=81=AC=20=EC=98=A4=ED=83=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 237205d944..025918391c 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -41,7 +41,7 @@ Entry.Robotry_Parodule.setLanguage = function() { template: { Parodule_Update: '파로듈 업데이트 %1', Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', - Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %4', + Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %3', Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', }, Helper:{ // 블록 선택시 나타나는 한글 설명 From 5bd6021d891d681a4278f888110ff1be02e86c73 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 12 Apr 2023 19:34:17 +0900 Subject: [PATCH 06/37] =?UTF-8?q?=EB=B6=80=EC=A0=80=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20=EC=98=A5=ED=83=80=EB=B8=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 025918391c..33ffaf7e2e 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -310,10 +310,10 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['0', 0], - ['1', 12], - ['2', 24], - ['3', 36], + ['3', 0], + ['4', 12], + ['5', 24], + ['6', 36], ], value: [0], fontSize: 12, @@ -323,18 +323,19 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['도', 47], - ['도#', 48], - ['레', 49], - ['레#', 50], - ['미', 51], - ['파', 52], - ['파#', 53], - ['솔', 54], - ['솔#', 55], - ['라', 56], - ['라#', 57], - ['시', 58], + ['무음', 200], + ['도', 47], + ['도#', 48], + ['레', 49], + ['레#', 50], + ['미', 51], + ['파', 52], + ['파#', 53], + ['솔', 54], + ['솔#', 55], + ['라', 56], + ['라#', 57], + ['시', 58], ], value: [47], fontSize: 12, @@ -361,8 +362,13 @@ Entry.Robotry_Parodule.getBlocks = function() { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT'); - const octave = script.getNumberValue('OCTAVE'); + var octave = script.getNumberValue('OCTAVE'); const tone = script.getNumberValue('TONE'); + + if (tone === 200) { + octave = 0; + } + if(!Entry.hw.sendQueue.SET){ Entry.hw.sendQueue.SET = {}; } From 534e2bd42b1a81429878ec1949f34cb5c77a7f60 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 12 Apr 2023 19:34:30 +0900 Subject: [PATCH 07/37] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=A0=95=EC=A7=80?= =?UTF-8?q?=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 33ffaf7e2e..faa22e9c57 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -160,6 +160,7 @@ Entry.Robotry_Parodule.getBlocks = function() { [ '75%', 38], [ '50%', 37], [ '25%', 36], + [ '0%', 200], ], value: [39], fontSize: 12, @@ -229,7 +230,7 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['없음', 238], + ['무색', 200], ['빨강색', 19], ['다홍색', 20], ['주황색', 21], From d725629d129c0ce06ccc47bcfdcd26edc0234924 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 12 Apr 2023 19:34:34 +0900 Subject: [PATCH 08/37] Update block_robotry_parodule.js --- src/playground/blocks/hardware/block_robotry_parodule.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index faa22e9c57..c006006205 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -187,8 +187,13 @@ Entry.Robotry_Parodule.getBlocks = function() { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT'); - const state = script.getNumberValue('STATE'); + var state = script.getNumberValue('STATE'); const value = script.getNumberValue('VALUE'); + + if (value === 200) { + state = 0; + } + if(!Entry.hw.sendQueue.SET){ Entry.hw.sendQueue.SET = {}; } From aadab055733b8c27596f6ad3f3fbea4222beec7c Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Fri, 14 Apr 2023 18:40:50 +0900 Subject: [PATCH 09/37] =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index c006006205..9b2ca6c470 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -146,7 +146,7 @@ Entry.Robotry_Parodule.getBlocks = function() { type: 'Dropdown', options: [ ['정회전', 0], - ['역회전', 34], + ['역회전', 4], ], value: [0], fontSize: 12, From 4673be0e7decd385b137df93f9c0f7f2c6fb6475 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 27 Apr 2023 18:11:38 +0900 Subject: [PATCH 10/37] =?UTF-8?q?=ED=8C=8C=EB=A1=9C=EB=93=88=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=EB=AA=A8=EB=93=88=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/hw/robotry_parodule.png | Bin 0 -> 175516 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/hw/robotry_parodule.png diff --git a/images/hw/robotry_parodule.png b/images/hw/robotry_parodule.png new file mode 100644 index 0000000000000000000000000000000000000000..78ab6f6c1fe068444f49278c4baf6709a189abbc GIT binary patch literal 175516 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 literal 0 HcmV?d00001 From c40919a670450e43661bc8d078251c60219938e4 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 27 Apr 2023 18:11:58 +0900 Subject: [PATCH 11/37] Update block_robotry_parodule.js --- .../blocks/hardware/block_robotry_parodule.js | 581 ++++++++++++++---- 1 file changed, 474 insertions(+), 107 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 9b2ca6c470..690feebb11 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -9,7 +9,11 @@ Entry.Robotry_Parodule = { ko: '파로듈', en: 'Parodule', }, - + monitorTemplate: { + imgPath: 'hw/robotry_parodule.png', + width: 700, + height: 700, + }, setZero() { if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue = { @@ -26,40 +30,69 @@ Entry.Robotry_Parodule = { } Entry.hw.update(); }, - + getOffsetX(str) { + return str.indexOf('\0') * 5 - 10; + }, + getTerminal(port) { + return this.Terminal[port]; + }, + setTerminal(port1, port2, port3, port4) { + this.Terminal = [port1, port2, port3, port4]; + }, + Terminal : ['', '', '', ''], controlTypes: { DIGITAL: 0, ANALOG: 1, STRING: 2, }, BlockState: {}, + }; Entry.Robotry_Parodule.setLanguage = function() { return { ko: { template: { + Parodule_Output_title: '제어 블럭\0', + Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', + Parodule_BUZZER: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + + Parodule_Custom_title:'커스텀 제어 블럭\0', + Parodule_Custom_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', + Parodule_Custom_LED:'%1 (으)로 픽셀 설정 %2', + Parodule_Custom_Motor:'%1 의 파워로 %2 %3', + Parodule_Update: '파로듈 업데이트 %1', - Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', - Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %3', - Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', }, Helper:{ // 블록 선택시 나타나는 한글 설명 - Parodule_Update : "파로듈을 업데이트하는 블록", - Parodule_Motor: '모터를 제어하는 블록' + Parodule_LED: '다양한 색상을 표현할수 있는 LED 블럭입니다', + Parodule_Motor: '모터를 제어할 수 있는 블록입니다', + Parodule_BUZZER: '부저를 이용해 음을 재생할 수 있는 블록입니다', + + Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', + Parodule_Custom_Motor:'모터 모듈을 움직입니다.', + + Parodule_Update: '파로듈 업데이트', }, Blocks : { } }, en: { template: { - Parodule_Update: 'Parodule Update %1', - Parodule_Motor: '%1 번 모터를 %2 방항으로 %3 의 파워로 회전 %4', - Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %4', + Parodule_Output_title: '제어 블럭', + Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %3', + Parodule_Motor: '%1 번 모터를 %2 의 파워로 %2 %4', Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', + + Parodule_Custom_title:'커스텀 제어 블럭', + Parodule_Custom_Set: '1 번 %1 2 번%2 3 번 %3 4번 %4 으로 설정 %5', + Parodule_Custom_Motor:'트럭의 %1 번 모터를 이용해 %2 의 파워로 %3 %4', + + Parodule_Update: '파로듈 업데이트 %1', }, Helper:{ - Parodule_Update : "파로듈을 업데이트하는 블록", + Parodule_Update : "파로듈을 업데이트하는 블록입니다. \n이 블록을 사용하면 메인모듈과 연결이 끊어집니다.", Parodule_Motor: '모터를 제어하는 블록' }, Blocks : { @@ -70,10 +103,17 @@ Entry.Robotry_Parodule.setLanguage = function() { // 블록의 배치 순서 Entry.Robotry_Parodule.blockMenuBlocks = [ - 'Parodule_Update', - 'Parodule_Motor', + 'Parodule_Output_title', 'Parodule_LED', + 'Parodule_Motor', 'Parodule_BUZZER', + + 'Parodule_Custom_title', + 'Parodule_Custom_Set', + 'Parodule_Custom_LED', + 'Parodule_Custom_Motor', + + 'Parodule_Update', ]; /* @@ -82,35 +122,102 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ */ Entry.Robotry_Parodule.getBlocks = function() { return { - /* Parodule Upadate Start */ - Parodule_Update: { + Parodule_Output_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Output_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_Output_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_Output_title', + }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, + }, + + /* Paroduel LED Start */ + Parodule_LED: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ + { + type: 'Dropdown', + options: [ + ['세모', 1], + ['네모', 2], + ['십자', 3], + ['원', 4], + ], + value: [1], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['무색', 200], + ['아우라', 18], + ['빨강색', 19], + ['다홍색', 20], + ['주황색', 21], + ['귤색', 22], + ['노랑색', 23], + ['연두색', 24], + ['녹색', 25], + ['청록색', 26], + ['파랑색', 27], + ['감청색', 28], + ['남색', 29], + ['남보라색', 30], + ['보라색', 31], + ['자주색', 32], + ], + value: [19], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, { type: 'Indicator', - img: 'block_icon/hardware_icon.svg', + img: 'block_icon/hardware_led.png', size: 12, } ], events: {}, def: { params: [], - type: 'Parodule_Update', + type: 'Parodule_LED', }, - paramsKeyMap: {}, - class: 'CMD', + paramsKeyMap: { + PORT: 0, + VALUE: 1 + }, + class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const update = "update\r\n"; - if (!Entry.hw.sendQueue.CMD) { - Entry.hw.sendQueue.CMD = {}; + const port = script.getNumberValue('PORT'); + const value = script.getNumberValue('VALUE'); + if(!Entry.hw.sendQueue.SET){ + Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.CMD = { - type: Entry.Robotry_Parodule.controlTypes.STRING, - data: update, + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: value, time: new Date().getTime(), } return script.callReturn(); @@ -120,7 +227,7 @@ Entry.Robotry_Parodule.getBlocks = function() { py: [], } }, - /* Parodule Update END */ + /* Parodule LED End */ /* Paroduel Motor Start */ Parodule_Motor: { @@ -132,23 +239,27 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['1', 1], - ['2', 2], - ['3', 3], - ['4', 4], + ['세모', 1], + ['네모', 2], + ['십자', 3], + ['원', 4], ], value: [1], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + { type: 'Dropdown', options: [ - ['정회전', 0], - ['역회전', 4], + ['100%', 39], + [ '75%', 38], + [ '50%', 37], + [ '25%', 36], + [ '0%', 200], ], - value: [0], + value: [39], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -156,20 +267,17 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['100%', 39], - [ '75%', 38], - [ '50%', 37], - [ '25%', 36], - [ '0%', 200], + ['정회전', 0], + ['역회전', 4], ], - value: [39], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, { type: 'Indicator', - img: 'block_icon/hardware_icon.svg', + img: 'block_icon/hardware_dc.png', size: 12, } ], @@ -180,8 +288,9 @@ Entry.Robotry_Parodule.getBlocks = function() { }, paramsKeyMap: { PORT: 0, - STATE: 1, - VALUE: 2 + VALUE: 1, + STATE: 2, + }, class: 'SET', isNotFor: ['Robotry_Parodule'], @@ -211,9 +320,8 @@ Entry.Robotry_Parodule.getBlocks = function() { }, /* Parodule Motor End */ - - /* Paroduel LED Start */ - Parodule_LED: { + /* Paroduel Buzzer Start */ + Parodule_BUZZER: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -222,20 +330,222 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['1', 1], - ['2', 2], - ['3', 3], - ['4', 4], + ['세모', 1], + ['네모', 2], + ['십자', 3], + ['원', 4], ], value: [1], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + { + type: 'Dropdown', + options: [ + ['3', 0], + ['4', 12], + ['5', 24], + ['6', 36], + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['무음', 200], + ['도', 47], + ['도#', 48], + ['레', 49], + ['레#', 50], + ['미', 51], + ['파', 52], + ['파#', 53], + ['솔', 54], + ['솔#', 55], + ['라', 56], + ['라#', 57], + ['시', 58], + ], + value: [47], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Indicator', + img: 'block_icon/hardware_bzr2.png', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_BUZZER', + }, + paramsKeyMap: { + PORT: 0, + OCTAVE: 1, + TONE: 2 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + var octave = script.getNumberValue('OCTAVE'); + const tone = script.getNumberValue('TONE'); + + if (tone === 200) { + octave = 0; + } + + if(!Entry.hw.sendQueue.SET){ + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: octave + tone, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [], + } + }, + /* Parodule Buzzer End */ + + + Parodule_Custom_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_Custom_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_Custom_title', + }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, + }, + + /* Paroduel Custom Set Start */ + Parodule_Custom_Set: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Dropdown', + options: [ + ['LED' , 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'LED', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['LED' , 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'MOTOR', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['LED' , 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'MOTOR', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['LED' , 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'BUZZER', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_Custom_Set', + }, + paramsKeyMap: { + PORT1: 0, + PORT2: 1, + PORT3: 2, + PORT4: 3, + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + var port1 = script.getField('PORT1', script); // 1번 모터 + var port2 = script.getField('PORT2', script); // 1번 모터 + var port3 = script.getField('PORT3', script); // 1번 모터 + var port4 = script.getField('PORT4', script); // 1번 모터 + Entry.Robotry_Parodule.setTerminal(port1, port2, port3, port4); + }, + syntax: { + js: [], + py: [], + } + }, + /* Paroduel Custom Set Start */ + + + /* Paroduel Custom LED Start */ + Parodule_Custom_LED: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ { type: 'Dropdown', options: [ ['무색', 200], + ['아우라', 18], ['빨강색', 19], ['다홍색', 20], ['주황색', 21], @@ -258,31 +568,34 @@ Entry.Robotry_Parodule.getBlocks = function() { }, { type: 'Indicator', - img: 'block_icon/hardware_icon.svg', + img: 'block_icon/hardware_led.png', size: 12, } ], events: {}, def: { params: [], - type: 'Parodule_LED', + type: 'Parodule_Custom_LED', }, paramsKeyMap: { - PORT: 0, - VALUE: 1 + VALUE: 0 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); const value = script.getNumberValue('VALUE'); if(!Entry.hw.sendQueue.SET){ Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: value, - time: new Date().getTime(), + for (var i = 0; i < 4; i++) { + console.log(Entry.Robotry_Parodule.getTerminal(i)); + if (Entry.Robotry_Parodule.getTerminal(i) === 'LED') { + Entry.hw.sendQueue.SET[i + 1] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: value, + time: new Date().getTime(), + } + } } return script.callReturn(); }, @@ -291,10 +604,10 @@ Entry.Robotry_Parodule.getBlocks = function() { py: [], } }, - /* Parodule LED End */ + /* Parodule Custom LED End */ - /* Paroduel Buzzer Start */ - Parodule_BUZZER: { + /* Paroduel Custom Motor Start */ + Parodule_Custom_Motor: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -303,25 +616,13 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['1', 1], - ['2', 2], - ['3', 3], - ['4', 4], - ], - value: [1], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - { - type: 'Dropdown', - options: [ - ['3', 0], - ['4', 12], - ['5', 24], - ['6', 36], + ['100%', 39], + [ '75%', 38], + [ '50%', 37], + [ '25%', 36], + [ '0%', 200], ], - value: [0], + value: [39], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -329,21 +630,12 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['무음', 200], - ['도', 47], - ['도#', 48], - ['레', 49], - ['레#', 50], - ['미', 51], - ['파', 52], - ['파#', 53], - ['솔', 54], - ['솔#', 55], - ['라', 56], - ['라#', 57], - ['시', 58], + ['전진', 1], + ['후진', 2], + ['좌회전', 3], + ['우회전', 4], ], - value: [47], + value: [1], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -357,30 +649,105 @@ Entry.Robotry_Parodule.getBlocks = function() { events: {}, def: { params: [], - type: 'Parodule_BUZZER', + type: 'Parodule_Custom_Motor', }, paramsKeyMap: { - PORT: 0, - OCTAVE: 1, - TONE: 2 + VALUE: 0, + STATE: 1, }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); - var octave = script.getNumberValue('OCTAVE'); - const tone = script.getNumberValue('TONE'); - - if (tone === 200) { - octave = 0; + const value = script.getNumberValue('VALUE'); + var state = script.getNumberValue('STATE'); + var motor1 = 0; + var motor2 = 0; + if (state === 1) { + motor1 = 0; + motor2 = 0; } + else if (state === 2) { + motor1 = 4; + motor2 = 4; + } + else if (state === 3) { + motor1 = 0; + motor2 = 4; + } + else if (state === 4) { + motor1 = 4; + motor2 = 0; + } + else {} if(!Entry.hw.sendQueue.SET){ Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: octave + tone, + + if (value === 200) { + motor1 = 0; + motor2 = 0; + } + + for (var i = 0; i < 4; i++) { + console.log(Entry.Robotry_Parodule.getTerminal(i)); + if (Entry.Robotry_Parodule.getTerminal(i) === 'MOTOR') { + if (i === 0 || i === 1) { + Entry.hw.sendQueue.SET[i + 1] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: motor1 + value, + time: new Date().getTime(), + } + } + else if (i === 2 || i === 3) { + Entry.hw.sendQueue.SET[i + 1] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: motor2 + value, + time: new Date().getTime(), + } + } + else {} + + } + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [], + } + }, + /* Parodule Custom Motor End */ + + /* Parodule Upadate Start */ + Parodule_Update: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_Update', + }, + paramsKeyMap: {}, + class: 'CMD', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const update = "update\r\n"; + if (!Entry.hw.sendQueue.CMD) { + Entry.hw.sendQueue.CMD = {}; + } + Entry.hw.sendQueue.CMD = { + type: Entry.Robotry_Parodule.controlTypes.STRING, + data: update, time: new Date().getTime(), } return script.callReturn(); @@ -390,7 +757,7 @@ Entry.Robotry_Parodule.getBlocks = function() { py: [], } }, - /* Parodule Buzzer End */ + /* Parodule Update END */ }; }; From 33d643e2375a4f0d65ba4ff7e8e9894058ec43d1 Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Mon, 31 Jul 2023 18:38:45 +0900 Subject: [PATCH 12/37] =?UTF-8?q?=EB=B6=80=EC=A0=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 282 ++++++++++++------ 1 file changed, 183 insertions(+), 99 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 690feebb11..422829c83a 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -14,7 +14,7 @@ Entry.Robotry_Parodule = { width: 700, height: 700, }, - setZero() { + setZero() { if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue = { SET: {}, @@ -39,17 +39,17 @@ Entry.Robotry_Parodule = { setTerminal(port1, port2, port3, port4) { this.Terminal = [port1, port2, port3, port4]; }, - Terminal : ['', '', '', ''], + Terminal: ['', '', '', ''], controlTypes: { DIGITAL: 0, ANALOG: 1, STRING: 2, }, BlockState: {}, - + }; -Entry.Robotry_Parodule.setLanguage = function() { +Entry.Robotry_Parodule.setLanguage = function () { return { ko: { template: { @@ -58,24 +58,24 @@ Entry.Robotry_Parodule.setLanguage = function() { Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', Parodule_BUZZER: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', - Parodule_Custom_title:'커스텀 제어 블럭\0', + Parodule_Custom_title: '커스텀 제어 블럭\0', Parodule_Custom_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', - Parodule_Custom_LED:'%1 (으)로 픽셀 설정 %2', - Parodule_Custom_Motor:'%1 의 파워로 %2 %3', + Parodule_Custom_LED: '%1 (으)로 픽셀 설정 %2', + Parodule_Custom_Motor: '%1 의 파워로 %2 %3', Parodule_Update: '파로듈 업데이트 %1', }, - Helper:{ // 블록 선택시 나타나는 한글 설명 + Helper: { // 블록 선택시 나타나는 한글 설명 Parodule_LED: '다양한 색상을 표현할수 있는 LED 블럭입니다', Parodule_Motor: '모터를 제어할 수 있는 블록입니다', Parodule_BUZZER: '부저를 이용해 음을 재생할 수 있는 블록입니다', Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', - Parodule_Custom_Motor:'모터 모듈을 움직입니다.', + Parodule_Custom_Motor: '모터 모듈을 움직입니다.', Parodule_Update: '파로듈 업데이트', - }, - Blocks : { + }, + Blocks: { } }, en: { @@ -85,17 +85,17 @@ Entry.Robotry_Parodule.setLanguage = function() { Parodule_Motor: '%1 번 모터를 %2 의 파워로 %2 %4', Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', - Parodule_Custom_title:'커스텀 제어 블럭', + Parodule_Custom_title: '커스텀 제어 블럭', Parodule_Custom_Set: '1 번 %1 2 번%2 3 번 %3 4번 %4 으로 설정 %5', - Parodule_Custom_Motor:'트럭의 %1 번 모터를 이용해 %2 의 파워로 %3 %4', + Parodule_Custom_Motor: '트럭의 %1 번 모터를 이용해 %2 의 파워로 %3 %4', Parodule_Update: '파로듈 업데이트 %1', }, - Helper:{ - Parodule_Update : "파로듈을 업데이트하는 블록입니다. \n이 블록을 사용하면 메인모듈과 연결이 끊어집니다.", + Helper: { + Parodule_Update: "파로듈을 업데이트하는 블록입니다. \n이 블록을 사용하면 메인모듈과 연결이 끊어집니다.", Parodule_Motor: '모터를 제어하는 블록' - }, - Blocks : { + }, + Blocks: { }, }, }; @@ -112,7 +112,7 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Custom_Set', 'Parodule_Custom_LED', 'Parodule_Custom_Motor', - + 'Parodule_Update', ]; @@ -120,7 +120,7 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ * 로보트리의 아두이노 제어 블록 리스트 * 주석에 블록이라고 표시된것만 제어 블록임 나머진 포트 리스트 */ -Entry.Robotry_Parodule.getBlocks = function() { +Entry.Robotry_Parodule.getBlocks = function () { return { Parodule_Output_title: { skeleton: 'basic_text', @@ -170,22 +170,22 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['무색', 200], - ['아우라', 18], - ['빨강색', 19], - ['다홍색', 20], - ['주황색', 21], - ['귤색', 22], - ['노랑색', 23], - ['연두색', 24], - ['녹색', 25], - ['청록색', 26], - ['파랑색', 27], - ['감청색', 28], - ['남색', 29], + ['무색', 200], + ['아우라', 18], + ['빨강색', 19], + ['다홍색', 20], + ['주황색', 21], + ['귤색', 22], + ['노랑색', 23], + ['연두색', 24], + ['녹색', 25], + ['청록색', 26], + ['파랑색', 27], + ['감청색', 28], + ['남색', 29], ['남보라색', 30], - ['보라색', 31], - ['자주색', 32], + ['보라색', 31], + ['자주색', 32], ], value: [19], fontSize: 12, @@ -205,21 +205,21 @@ Entry.Robotry_Parodule.getBlocks = function() { }, paramsKeyMap: { PORT: 0, - VALUE: 1 + VALUE: 1 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT'); const value = script.getNumberValue('VALUE'); - if(!Entry.hw.sendQueue.SET){ + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } Entry.hw.sendQueue.SET[port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: value, time: new Date().getTime(), - } + } return script.callReturn(); }, syntax: { @@ -249,15 +249,15 @@ Entry.Robotry_Parodule.getBlocks = function() { bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, - + { type: 'Dropdown', options: [ ['100%', 39], - [ '75%', 38], - [ '50%', 37], - [ '25%', 36], - [ '0%', 200], + ['75%', 38], + ['50%', 37], + ['25%', 36], + ['0%', 200], ], value: [39], fontSize: 12, @@ -288,9 +288,9 @@ Entry.Robotry_Parodule.getBlocks = function() { }, paramsKeyMap: { PORT: 0, - VALUE: 1, + VALUE: 1, STATE: 2, - + }, class: 'SET', isNotFor: ['Robotry_Parodule'], @@ -303,14 +303,14 @@ Entry.Robotry_Parodule.getBlocks = function() { state = 0; } - if(!Entry.hw.sendQueue.SET){ + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } Entry.hw.sendQueue.SET[port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: state + value, time: new Date().getTime(), - } + } return script.callReturn(); }, syntax: { @@ -343,7 +343,7 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['3', 0], + ['3', 0], ['4', 12], ['5', 24], ['6', 36], @@ -357,18 +357,18 @@ Entry.Robotry_Parodule.getBlocks = function() { type: 'Dropdown', options: [ ['무음', 200], - ['도', 47], - ['도#', 48], - ['레', 49], - ['레#', 50], - ['미', 51], - ['파', 52], - ['파#', 53], - ['솔', 54], - ['솔#', 55], - ['라', 56], - ['라#', 57], - ['시', 58], + ['도', 47], + ['도#', 48], + ['레', 49], + ['레#', 50], + ['미', 51], + ['파', 52], + ['파#', 53], + ['솔', 54], + ['솔#', 55], + ['라', 56], + ['라#', 57], + ['시', 58], ], value: [47], fontSize: 12, @@ -387,9 +387,9 @@ Entry.Robotry_Parodule.getBlocks = function() { type: 'Parodule_BUZZER', }, paramsKeyMap: { - PORT: 0, + PORT: 0, OCTAVE: 1, - TONE: 2 + TONE: 2 }, class: 'SET', isNotFor: ['Robotry_Parodule'], @@ -402,14 +402,14 @@ Entry.Robotry_Parodule.getBlocks = function() { octave = 0; } - if(!Entry.hw.sendQueue.SET){ + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } Entry.hw.sendQueue.SET[port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: octave + tone, time: new Date().getTime(), - } + } return script.callReturn(); }, syntax: { @@ -455,7 +455,7 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['LED' , 'LED'], + ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], ], @@ -467,7 +467,7 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['LED' , 'LED'], + ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], ], @@ -479,7 +479,7 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['LED' , 'LED'], + ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], ], @@ -491,7 +491,7 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['LED' , 'LED'], + ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], ], @@ -544,22 +544,22 @@ Entry.Robotry_Parodule.getBlocks = function() { { type: 'Dropdown', options: [ - ['무색', 200], - ['아우라', 18], - ['빨강색', 19], - ['다홍색', 20], - ['주황색', 21], - ['귤색', 22], - ['노랑색', 23], - ['연두색', 24], - ['녹색', 25], - ['청록색', 26], - ['파랑색', 27], - ['감청색', 28], - ['남색', 29], + ['무색', 200], + ['아우라', 18], + ['빨강색', 19], + ['다홍색', 20], + ['주황색', 21], + ['귤색', 22], + ['노랑색', 23], + ['연두색', 24], + ['녹색', 25], + ['청록색', 26], + ['파랑색', 27], + ['감청색', 28], + ['남색', 29], ['남보라색', 30], - ['보라색', 31], - ['자주색', 32], + ['보라색', 31], + ['자주색', 32], ], value: [19], fontSize: 12, @@ -584,7 +584,7 @@ Entry.Robotry_Parodule.getBlocks = function() { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const value = script.getNumberValue('VALUE'); - if(!Entry.hw.sendQueue.SET){ + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } for (var i = 0; i < 4; i++) { @@ -594,9 +594,9 @@ Entry.Robotry_Parodule.getBlocks = function() { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: value, time: new Date().getTime(), - } + } } - } + } return script.callReturn(); }, syntax: { @@ -617,10 +617,10 @@ Entry.Robotry_Parodule.getBlocks = function() { type: 'Dropdown', options: [ ['100%', 39], - [ '75%', 38], - [ '50%', 37], - [ '25%', 36], - [ '0%', 200], + ['75%', 38], + ['50%', 37], + ['25%', 36], + ['0%', 200], ], value: [39], fontSize: 12, @@ -652,7 +652,7 @@ Entry.Robotry_Parodule.getBlocks = function() { type: 'Parodule_Custom_Motor', }, paramsKeyMap: { - VALUE: 0, + VALUE: 0, STATE: 1, }, class: 'SET', @@ -678,12 +678,12 @@ Entry.Robotry_Parodule.getBlocks = function() { motor1 = 4; motor2 = 0; } - else {} + else { } - if(!Entry.hw.sendQueue.SET){ + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - + if (value === 200) { motor1 = 0; motor2 = 0; @@ -697,19 +697,19 @@ Entry.Robotry_Parodule.getBlocks = function() { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: motor1 + value, time: new Date().getTime(), - } + } } else if (i === 2 || i === 3) { Entry.hw.sendQueue.SET[i + 1] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: motor2 + value, time: new Date().getTime(), - } + } } - else {} - + else { } + } - } + } return script.callReturn(); }, syntax: { @@ -719,6 +719,90 @@ Entry.Robotry_Parodule.getBlocks = function() { }, /* Parodule Custom Motor End */ + /* Paroduel Buzzer Start */ + Parodule_BUZZER: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Dropdown', + options: [ + ['3', 0], + ['4', 12], + ['5', 24], + ['6', 36], + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['무음', 200], + ['도', 47], + ['도#', 48], + ['레', 49], + ['레#', 50], + ['미', 51], + ['파', 52], + ['파#', 53], + ['솔', 54], + ['솔#', 55], + ['라', 56], + ['라#', 57], + ['시', 58], + ], + value: [47], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Indicator', + img: 'block_icon/hardware_bzr2.png', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_BUZZER', + }, + paramsKeyMap: { + OCTAVE: 0, + TONE: 1 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + var octave = script.getNumberValue('OCTAVE'); + const tone = script.getNumberValue('TONE'); + + if (tone === 200) { + octave = 0; + } + + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: octave + tone, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [], + } + }, + /* Parodule Buzzer End */ + /* Parodule Upadate Start */ Parodule_Update: { color: EntryStatic.colorSet.block.default.HARDWARE, @@ -749,7 +833,7 @@ Entry.Robotry_Parodule.getBlocks = function() { type: Entry.Robotry_Parodule.controlTypes.STRING, data: update, time: new Date().getTime(), - } + } return script.callReturn(); }, syntax: { From ad8c65eee54b1eceee88ca7b4b4422faa866cf9d Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 3 Aug 2023 18:52:59 +0900 Subject: [PATCH 13/37] =?UTF-8?q?=EB=B6=80=EC=A0=80=20=EC=A0=9C=EC=96=B4?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 79 +++++++++++-------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 422829c83a..628fefdc5b 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -56,19 +56,20 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Output_title: '제어 블럭\0', Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', - Parodule_BUZZER: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', Parodule_Custom_title: '커스텀 제어 블럭\0', Parodule_Custom_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', Parodule_Custom_LED: '%1 (으)로 픽셀 설정 %2', Parodule_Custom_Motor: '%1 의 파워로 %2 %3', + Parodule_Custom_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', Parodule_Update: '파로듈 업데이트 %1', }, Helper: { // 블록 선택시 나타나는 한글 설명 Parodule_LED: '다양한 색상을 표현할수 있는 LED 블럭입니다', Parodule_Motor: '모터를 제어할 수 있는 블록입니다', - Parodule_BUZZER: '부저를 이용해 음을 재생할 수 있는 블록입니다', + Parodule_Buzzer: '부저를 이용해 음을 재생할 수 있는 블록입니다', Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', Parodule_Custom_Motor: '모터 모듈을 움직입니다.', @@ -80,20 +81,28 @@ Entry.Robotry_Parodule.setLanguage = function () { }, en: { template: { - Parodule_Output_title: '제어 블럭', - Parodule_LED: '%1 번 픽셀을 %2 으로 설정 %3', - Parodule_Motor: '%1 번 모터를 %2 의 파워로 %2 %4', - Parodule_BUZZER: '%1 번 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Output_title: '제어 블럭\0', + Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', + Parodule_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', - Parodule_Custom_title: '커스텀 제어 블럭', - Parodule_Custom_Set: '1 번 %1 2 번%2 3 번 %3 4번 %4 으로 설정 %5', - Parodule_Custom_Motor: '트럭의 %1 번 모터를 이용해 %2 의 파워로 %3 %4', + Parodule_Custom_title: '커스텀 제어 블럭\0', + Parodule_Custom_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', + Parodule_Custom_LED: '%1 (으)로 픽셀 설정 %2', + Parodule_Custom_Motor: '%1 의 파워로 %2 %3', + Parodule_Custom_Buzzer: '%2 옥타브 %3 (으)로 재생 %4', Parodule_Update: '파로듈 업데이트 %1', }, Helper: { - Parodule_Update: "파로듈을 업데이트하는 블록입니다. \n이 블록을 사용하면 메인모듈과 연결이 끊어집니다.", - Parodule_Motor: '모터를 제어하는 블록' + Parodule_LED: '다양한 색상을 표현할수 있는 LED 블럭입니다', + Parodule_Motor: '모터를 제어할 수 있는 블록입니다', + Parodule_Buzzer: '부저를 이용해 음을 재생할 수 있는 블록입니다', + + Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', + Parodule_Custom_Motor: '모터 모듈을 움직입니다.', + + Parodule_Update: '파로듈 업데이트', }, Blocks: { }, @@ -106,12 +115,13 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Output_title', 'Parodule_LED', 'Parodule_Motor', - 'Parodule_BUZZER', + 'Parodule_Buzzer', 'Parodule_Custom_title', 'Parodule_Custom_Set', 'Parodule_Custom_LED', 'Parodule_Custom_Motor', + 'Parodule_Custom_Buzzer', 'Parodule_Update', ]; @@ -158,9 +168,9 @@ Entry.Robotry_Parodule.getBlocks = function () { type: 'Dropdown', options: [ ['세모', 1], + ['원', 4], ['네모', 2], ['십자', 3], - ['원', 4], ], value: [1], fontSize: 12, @@ -194,7 +204,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_led.png', + img: 'block_icon/hardware_led.svg', size: 12, } ], @@ -240,9 +250,9 @@ Entry.Robotry_Parodule.getBlocks = function () { type: 'Dropdown', options: [ ['세모', 1], + ['원', 4], ['네모', 2], ['십자', 3], - ['원', 4], ], value: [1], fontSize: 12, @@ -277,7 +287,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_dc.png', + img: 'block_icon/hardware_dc.svg', size: 12, } ], @@ -321,7 +331,7 @@ Entry.Robotry_Parodule.getBlocks = function () { /* Parodule Motor End */ /* Paroduel Buzzer Start */ - Parodule_BUZZER: { + Parodule_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -331,9 +341,9 @@ Entry.Robotry_Parodule.getBlocks = function () { type: 'Dropdown', options: [ ['세모', 1], + ['원', 4], ['네모', 2], ['십자', 3], - ['원', 4], ], value: [1], fontSize: 12, @@ -377,14 +387,14 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_bzr2.png', + img: 'block_icon/hardware_bzr2.svg', size: 12, } ], events: {}, def: { params: [], - type: 'Parodule_BUZZER', + type: 'Parodule_Buzzer', }, paramsKeyMap: { PORT: 0, @@ -455,6 +465,7 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ + ['없음', 'NONE'], ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], @@ -467,6 +478,7 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ + ['없음', 'NONE'], ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], @@ -479,6 +491,7 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ + ['없음', 'NONE'], ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], @@ -491,6 +504,7 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ + ['없음', 'NONE'], ['LED', 'LED'], ['모터', 'MOTOR'], ['부저', 'BUZZER'], @@ -568,7 +582,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_led.png', + img: 'block_icon/hardware_led.svg', size: 12, } ], @@ -642,7 +656,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_icon.svg', + img: 'block_icon/hardware_dc.svg', size: 12, } ], @@ -720,7 +734,7 @@ Entry.Robotry_Parodule.getBlocks = function () { /* Parodule Custom Motor End */ /* Paroduel Buzzer Start */ - Parodule_BUZZER: { + Parodule_Custom_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -763,14 +777,14 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_bzr2.png', + img: 'block_icon/hardware_bzr2.svg', size: 12, } ], events: {}, def: { params: [], - type: 'Parodule_BUZZER', + type: 'Parodule_Custom_Buzzer', }, paramsKeyMap: { OCTAVE: 0, @@ -781,18 +795,21 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { var octave = script.getNumberValue('OCTAVE'); const tone = script.getNumberValue('TONE'); - if (tone === 200) { octave = 0; } - if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: octave + tone, - time: new Date().getTime(), + for (var i = 0; i < 4; i++) { + console.log(Entry.Robotry_Parodule.getTerminal(i)); + if (Entry.Robotry_Parodule.getTerminal(i) === 'BUZZER') { + Entry.hw.sendQueue.SET[i + 1] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: octave + tone, + time: new Date().getTime(), + } + } } return script.callReturn(); }, From 4d3378814e54ec96e753093a835328fcd68cc060 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Tue, 8 Aug 2023 20:00:26 +0900 Subject: [PATCH 14/37] =?UTF-8?q?=EC=84=BC=EC=84=9C=20=EB=B8=94=EB=A1=9D?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80,=20=EC=9D=98?= =?UTF-8?q?=EB=8F=84=EC=B9=98=20=EC=95=8A=EC=9D=80=20=EC=83=81=ED=99=A9?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9D=EC=9D=B4=20=ED=98=B8=EC=B6=9C=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=ED=98=84=EC=83=81=EC=9D=B4=20=EC=9E=88=EC=96=B4=20?= =?UTF-8?q?=EC=9D=BC=EB=8B=A8=20=EC=88=A8=EA=B9=80=20=EC=B2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 87 ++++++++++++++++++- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 628fefdc5b..3d643bb3ae 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -53,6 +53,8 @@ Entry.Robotry_Parodule.setLanguage = function () { return { ko: { template: { + Parodule_Input_title: '센서 블럭\0', + Parodule_Sensor_Data: '%1 센서', Parodule_Output_title: '제어 블럭\0', Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', @@ -74,13 +76,15 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', Parodule_Custom_Motor: '모터 모듈을 움직입니다.', - Parodule_Update: '파로듈 업데이트', + //Parodule_Update: '파로듈 업데이트', }, Blocks: { } }, en: { template: { + Parodule_Input_title: '센서 블럭\0', + Parodule_Sensor_Data: '%1 센서', Parodule_Output_title: '제어 블럭\0', Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', @@ -102,7 +106,7 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', Parodule_Custom_Motor: '모터 모듈을 움직입니다.', - Parodule_Update: '파로듈 업데이트', + //Parodule_Update: '파로듈 업데이트', }, Blocks: { }, @@ -112,6 +116,8 @@ Entry.Robotry_Parodule.setLanguage = function () { // 블록의 배치 순서 Entry.Robotry_Parodule.blockMenuBlocks = [ + 'Parodule_Input_title', + 'Parodule_Sensor_Data', 'Parodule_Output_title', 'Parodule_LED', 'Parodule_Motor', @@ -123,7 +129,7 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Custom_Motor', 'Parodule_Custom_Buzzer', - 'Parodule_Update', + //'Parodule_Update', ]; /* @@ -132,6 +138,81 @@ Entry.Robotry_Parodule.blockMenuBlocks = [ */ Entry.Robotry_Parodule.getBlocks = function () { return { + Parodule_Input_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Input_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_Input_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_Input_title', + }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, + }, + + Parodule_Sensor_Data: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + fontColor: '#fff', + skeleton: 'basic_string_field', + statements: [], + params: [ + { + type: 'Dropdown', + options: [ + ['세모', 0], + ['원', 3], + ['네모', 1], + ['십자', 2], + ], + value: [1], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [ + null, + ], + type: 'Parodule_Sensor_Data', + }, + paramsKeyMap: { + PORT: 0, + }, + class: 'Get', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + const sensor_data = Entry.hw.portData.SENSOR; + let value = false; + if (sensor_data[port] === 48) { + value = false; + } + else if (sensor_data[port] === 49) { + value = true; + } + return value; + }, + syntax: { + js: [], + py: [], + }, + }, Parodule_Output_title: { skeleton: 'basic_text', skeletonOptions: { From 58578461b9a622824b98dfef9862a423cd257484 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 9 Aug 2023 20:54:53 +0900 Subject: [PATCH 15/37] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=EB=A5=BC=20=EC=97=94=ED=8A=B8=EB=A6=AC=20=EB=B8=94=EB=A1=9D?= =?UTF-8?q?=EA=B9=8C=EC=A7=80=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B4=20?= =?UTF-8?q?=ED=96=88=EB=8A=94=EB=8D=B0=20=ED=99=94=EB=A9=B4=EC=97=90=20?= =?UTF-8?q?=EC=96=B4=EB=96=BB=EA=B2=8C=20=EB=B3=B4=EC=97=AC=20=EC=A4=84=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EC=9D=84=EC=A7=80=20=EC=97=B0=EA=B5=AC=20?= =?UTF-8?q?=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 3d643bb3ae..6f1c31a0aa 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -79,6 +79,10 @@ Entry.Robotry_Parodule.setLanguage = function () { //Parodule_Update: '파로듈 업데이트', }, Blocks: { + light: '빛', + sound: '소리', + button: '버튼', + isSensor: 'NON', } }, en: { @@ -109,6 +113,10 @@ Entry.Robotry_Parodule.setLanguage = function () { //Parodule_Update: '파로듈 업데이트', }, Blocks: { + light: '빛', + sound: '소리', + button: '버튼', + isSensor: 'NON', }, }, }; @@ -199,6 +207,7 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { const port = script.getNumberValue('PORT'); const sensor_data = Entry.hw.portData.SENSOR; + const module_data = Entry.hw.portData.MODULE; let value = false; if (sensor_data[port] === 48) { value = false; From 543bfbbcd13b40f087c77a31c9fc4420f4a419c5 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 9 Aug 2023 21:26:29 +0900 Subject: [PATCH 16/37] Update block_robotry_parodule.js --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 6f1c31a0aa..92f6402efa 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -207,7 +207,7 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { const port = script.getNumberValue('PORT'); const sensor_data = Entry.hw.portData.SENSOR; - const module_data = Entry.hw.portData.MODULE; + const module_data = Entry.hw.portData.MODULE; // 연결된 모듈 데이터 가져오기 let value = false; if (sensor_data[port] === 48) { value = false; From fd7363b9a44492216e192dd23e6bb12100122c52 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Fri, 11 Aug 2023 22:01:36 +0900 Subject: [PATCH 17/37] =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/hw/robotry_parodule.png | Bin 175516 -> 24920 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/hw/robotry_parodule.png b/images/hw/robotry_parodule.png index 78ab6f6c1fe068444f49278c4baf6709a189abbc..5837c68a3ac180dd3382301a1baaa0d4d0bb5eee 100644 GIT binary patch literal 24920 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 From 209a4bcfb2a330772a8e66a5e283757cbfa00c66 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Fri, 11 Aug 2023 22:01:46 +0900 Subject: [PATCH 18/37] =?UTF-8?q?monitorTemplate=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 150 +++++++++++++++--- 1 file changed, 127 insertions(+), 23 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 92f6402efa..4fc872d00e 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -9,11 +9,6 @@ Entry.Robotry_Parodule = { ko: '파로듈', en: 'Parodule', }, - monitorTemplate: { - imgPath: 'hw/robotry_parodule.png', - width: 700, - height: 700, - }, setZero() { if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue = { @@ -46,7 +41,6 @@ Entry.Robotry_Parodule = { STRING: 2, }, BlockState: {}, - }; Entry.Robotry_Parodule.setLanguage = function () { @@ -55,6 +49,7 @@ Entry.Robotry_Parodule.setLanguage = function () { template: { Parodule_Input_title: '센서 블럭\0', Parodule_Sensor_Data: '%1 센서', + Parodule_Sensor_Kind: '%1 이름이 뭐에요?', Parodule_Output_title: '제어 블럭\0', Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', @@ -79,6 +74,10 @@ Entry.Robotry_Parodule.setLanguage = function () { //Parodule_Update: '파로듈 업데이트', }, Blocks: { + sensor1: ' 세모 ', + sensor2: ' 네모 ', + sensor3: ' 십자 ', + sensor4: ' 원 ', light: '빛', sound: '소리', button: '버튼', @@ -89,6 +88,7 @@ Entry.Robotry_Parodule.setLanguage = function () { template: { Parodule_Input_title: '센서 블럭\0', Parodule_Sensor_Data: '%1 센서', + Parodule_Sensor_Kind: '%1 이름이 뭐에요?', Parodule_Output_title: '제어 블럭\0', Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', @@ -113,6 +113,10 @@ Entry.Robotry_Parodule.setLanguage = function () { //Parodule_Update: '파로듈 업데이트', }, Blocks: { + sensor1: '세모', + sensor2: '네모', + sensor3: '십자', + sensor4: '원', light: '빛', sound: '소리', button: '버튼', @@ -122,23 +126,61 @@ Entry.Robotry_Parodule.setLanguage = function () { }; }; -// 블록의 배치 순서 -Entry.Robotry_Parodule.blockMenuBlocks = [ - 'Parodule_Input_title', - 'Parodule_Sensor_Data', - 'Parodule_Output_title', - 'Parodule_LED', - 'Parodule_Motor', - 'Parodule_Buzzer', +Entry.Robotry_Parodule.monitorTemplate = function () { + + return { + + imgPath: 'hw/robotry_parodule.png', + width: 500, + height: 500, + listPorts: { + }, + ports: { + MODULE1: { + name: Lang.Blocks.sensor1, + type: 'input', + pos: { x: [140], y: [100] }, + }, + MODULE2: { + name: Lang.Blocks.sensor2, + type: 'input', + pos: { x: [140], y: [500 - 100] }, + }, + MODULE3: { + name: Lang.Blocks.sensor3, + type: 'input', + pos: { x: [500 - 140], y: [500 - 100] }, + }, + MODULE4: { + name: Lang.Blocks.sensor4, + type: 'input', + pos: { x: [500 - 140], y: [100] }, + }, + }, + mode: 'both', + + } +}, + + // 블록의 배치 순서 + Entry.Robotry_Parodule.blockMenuBlocks = [ + 'Parodule_Input_title', + 'Parodule_Sensor_Data', + 'Parodule_Sensor_Kind', + + 'Parodule_Output_title', + 'Parodule_LED', + 'Parodule_Motor', + 'Parodule_Buzzer', - 'Parodule_Custom_title', - 'Parodule_Custom_Set', - 'Parodule_Custom_LED', - 'Parodule_Custom_Motor', - 'Parodule_Custom_Buzzer', + 'Parodule_Custom_title', + 'Parodule_Custom_Set', + 'Parodule_Custom_LED', + 'Parodule_Custom_Motor', + 'Parodule_Custom_Buzzer', - //'Parodule_Update', -]; + //'Parodule_Update', + ]; /* * 로보트리의 아두이노 제어 블록 리스트 @@ -206,8 +248,8 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT'); - const sensor_data = Entry.hw.portData.SENSOR; - const module_data = Entry.hw.portData.MODULE; // 연결된 모듈 데이터 가져오기 + const sensor_data = Entry.hw.portData.SENSOR + const module_data = Entry.hw.portData.MODULE; let value = false; if (sensor_data[port] === 48) { value = false; @@ -222,6 +264,68 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], }, }, + + Parodule_Sensor_Kind: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + fontColor: '#fff', + skeleton: 'basic_string_field', + statements: [], + params: [ + { + type: 'Dropdown', + options: [ + ['세모', 0], + ['원', 3], + ['네모', 1], + ['십자', 2], + ], + value: [1], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [ + null, + ], + type: 'Parodule_Sensor_Kind', + }, + paramsKeyMap: { + PORT: 0, + }, + class: 'Get', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const NONE = 208; + const LED = 209; + const MOTOR = 210; + const BUZZER = 211; + const port = script.getNumberValue('PORT'); + const module_data = Entry.hw.portData.MODULE; + let value = ""; + if (module_data[port] === LED) { + value = "LED"; + } + else if (module_data[port] === MOTOR) { + value = "모터"; + } + else if (module_data[port] === BUZZER) { + value = "부저"; + } + else { + value = "몰라"; + } + return value; + }, + syntax: { + js: [], + py: [], + }, + }, + Parodule_Output_title: { skeleton: 'basic_text', skeletonOptions: { From b11c5f8d8b764231b44d8e6c3b9ff6cd8958abcc Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 24 Aug 2023 22:33:34 +0900 Subject: [PATCH 19/37] Update block_robotry_parodule.js --- .../blocks/hardware/block_robotry_parodule.js | 118 +++++++++--------- 1 file changed, 62 insertions(+), 56 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 4fc872d00e..083ab37154 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -49,17 +49,18 @@ Entry.Robotry_Parodule.setLanguage = function () { template: { Parodule_Input_title: '센서 블럭\0', Parodule_Sensor_Data: '%1 센서', - Parodule_Sensor_Kind: '%1 이름이 뭐에요?', - Parodule_Output_title: '제어 블럭\0', - Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', - Parodule_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Sensor_Kind: '%1 모듈 종류', Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', - Parodule_Custom_LED: '%1 (으)로 픽셀 설정 %2', - Parodule_Custom_Motor: '%1 의 파워로 %2 %3', - Parodule_Custom_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', + Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', + Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + + Parodule_title: '제어 블럭\0', + Parodule_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', + Parodule_LED: '%1 (으)로 픽셀 설정 %2', + Parodule_Motor: '%1 의 파워로 %2 %3', + Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', Parodule_Update: '파로듈 업데이트 %1', }, @@ -88,17 +89,18 @@ Entry.Robotry_Parodule.setLanguage = function () { template: { Parodule_Input_title: '센서 블럭\0', Parodule_Sensor_Data: '%1 센서', - Parodule_Sensor_Kind: '%1 이름이 뭐에요?', - Parodule_Output_title: '제어 블럭\0', - Parodule_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - Parodule_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', - Parodule_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Sensor_Kind: '%1 모듈 종류', Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', - Parodule_Custom_LED: '%1 (으)로 픽셀 설정 %2', - Parodule_Custom_Motor: '%1 의 파워로 %2 %3', - Parodule_Custom_Buzzer: '%2 옥타브 %3 (으)로 재생 %4', + Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', + Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + + Parodule_title: '제어 블럭\0', + Parodule_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', + Parodule_LED: '%1 (으)로 픽셀 설정 %2', + Parodule_Motor: '%1 의 파워로 %2 %3', + Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', Parodule_Update: '파로듈 업데이트 %1', }, @@ -168,13 +170,13 @@ Entry.Robotry_Parodule.monitorTemplate = function () { 'Parodule_Sensor_Data', 'Parodule_Sensor_Kind', - 'Parodule_Output_title', + 'Parodule_title', + 'Parodule_Set', 'Parodule_LED', 'Parodule_Motor', 'Parodule_Buzzer', 'Parodule_Custom_title', - 'Parodule_Custom_Set', 'Parodule_Custom_LED', 'Parodule_Custom_Motor', 'Parodule_Custom_Buzzer', @@ -299,6 +301,7 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'Get', isNotFor: ['Robotry_Parodule'], func(sprite, script) { + const UNKNOWN = 207; const NONE = 208; const LED = 209; const MOTOR = 210; @@ -315,8 +318,11 @@ Entry.Robotry_Parodule.getBlocks = function () { else if (module_data[port] === BUZZER) { value = "부저"; } - else { - value = "몰라"; + else if (module_data[port] === NONE) { + value = "없음"; + } + else if (module_data[port] === UNKNOWN) { + value = "모름"; } return value; }, @@ -326,11 +332,11 @@ Entry.Robotry_Parodule.getBlocks = function () { }, }, - Parodule_Output_title: { + Parodule_Custom_title: { skeleton: 'basic_text', skeletonOptions: { box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Output_title), + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), }, }, color: EntryStatic.colorSet.common.TRANSPARENT, @@ -338,21 +344,21 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Text', - text: Lang.template.Parodule_Output_title, + text: Lang.template.Parodule_Custom_title, color: EntryStatic.colorSet.common.TEXT, align: 'left', }, ], def: { - type: 'Parodule_Output_title', + type: 'Parodule_Custom_title', }, class: 'TITLE', isNotFor: ['Robotry_Parodule'], events: {}, }, - /* Paroduel LED Start */ - Parodule_LED: { + /* Paroduel Custom LED Start */ + Parodule_Custom_LED: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -405,7 +411,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_LED', + type: 'Parodule_Custom_LED', }, paramsKeyMap: { PORT: 0, @@ -431,10 +437,10 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule LED End */ + /* Parodule Custom LED End */ - /* Paroduel Motor Start */ - Parodule_Motor: { + /* Paroduel Custom Motor Start */ + Parodule_Custom_Motor: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -488,7 +494,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Motor', + type: 'Parodule_Custom_Motor', }, paramsKeyMap: { PORT: 0, @@ -522,10 +528,10 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Motor End */ + /* Parodule Custom Motor End */ - /* Paroduel Buzzer Start */ - Parodule_Buzzer: { + /* Paroduel Custom Buzzer Start */ + Parodule_Custom_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -588,7 +594,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Buzzer', + type: 'Parodule_Custom_Buzzer', }, paramsKeyMap: { PORT: 0, @@ -621,14 +627,14 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Buzzer End */ + /* Parodule Custom Buzzer End */ - Parodule_Custom_title: { + Parodule_title: { skeleton: 'basic_text', skeletonOptions: { box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_title), }, }, color: EntryStatic.colorSet.common.TRANSPARENT, @@ -636,21 +642,21 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Text', - text: Lang.template.Parodule_Custom_title, + text: Lang.template.Parodule_title, color: EntryStatic.colorSet.common.TEXT, align: 'left', }, ], def: { - type: 'Parodule_Custom_title', + type: 'Parodule_title', }, class: 'TITLE', isNotFor: ['Robotry_Parodule'], events: {}, }, - /* Paroduel Custom Set Start */ - Parodule_Custom_Set: { + /* Paroduel Set Start */ + Parodule_Set: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -717,7 +723,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_Set', + type: 'Parodule_Set', }, paramsKeyMap: { PORT1: 0, @@ -739,11 +745,11 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Paroduel Custom Set Start */ + /* Paroduel Set Start */ - /* Paroduel Custom LED Start */ - Parodule_Custom_LED: { + /* Paroduel LED Start */ + Parodule_LED: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -783,7 +789,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_LED', + type: 'Parodule_LED', }, paramsKeyMap: { VALUE: 0 @@ -812,10 +818,10 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Custom LED End */ + /* Parodule LED End */ - /* Paroduel Custom Motor Start */ - Parodule_Custom_Motor: { + /* Paroduel Motor Start */ + Parodule_Motor: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -857,7 +863,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_Motor', + type: 'Parodule_Motor', }, paramsKeyMap: { VALUE: 0, @@ -925,10 +931,10 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Custom Motor End */ + /* Parodule Motor End */ /* Paroduel Buzzer Start */ - Parodule_Custom_Buzzer: { + Parodule_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -978,7 +984,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_Buzzer', + type: 'Parodule_Buzzer', }, paramsKeyMap: { OCTAVE: 0, From d4bd8a6b65207c629b7875a747e03273635af4d7 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Tue, 29 Aug 2023 23:04:25 +0900 Subject: [PATCH 20/37] =?UTF-8?q?=EB=84=98=EB=B2=84=EB=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 083ab37154..7a685a45cd 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -230,7 +230,7 @@ Entry.Robotry_Parodule.getBlocks = function () { ['네모', 1], ['십자', 2], ], - value: [1], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -282,7 +282,7 @@ Entry.Robotry_Parodule.getBlocks = function () { ['네모', 1], ['십자', 2], ], - value: [1], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -367,12 +367,12 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 1], - ['원', 4], - ['네모', 2], - ['십자', 3], + ['세모', 0], + ['원', 3], + ['네모', 1], + ['십자', 2], ], - value: [1], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -449,12 +449,12 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 1], - ['원', 4], - ['네모', 2], - ['십자', 3], + ['세모', 0], + ['원', 3], + ['네모', 1], + ['십자', 2], ], - value: [1], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -540,12 +540,12 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 1], - ['원', 4], - ['네모', 2], - ['십자', 3], + ['세모', 0], + ['원', 3], + ['네모', 1], + ['십자', 2], ], - value: [1], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -844,12 +844,12 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['전진', 1], - ['후진', 2], - ['좌회전', 3], - ['우회전', 4], + ['전진', 0], + ['후진', 1], + ['좌회전', 2], + ['우회전', 3], ], - value: [1], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, From 094ebb3638b861ba9df2a29293be3885c5a09f50 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 30 Aug 2023 18:20:42 +0900 Subject: [PATCH 21/37] =?UTF-8?q?=EC=84=BC=EC=84=9C=20=EB=84=98=EB=B2=84?= =?UTF-8?q?=EB=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 7a685a45cd..3b56730aa1 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -251,7 +251,6 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { const port = script.getNumberValue('PORT'); const sensor_data = Entry.hw.portData.SENSOR - const module_data = Entry.hw.portData.MODULE; let value = false; if (sensor_data[port] === 48) { value = false; @@ -321,7 +320,7 @@ Entry.Robotry_Parodule.getBlocks = function () { else if (module_data[port] === NONE) { value = "없음"; } - else if (module_data[port] === UNKNOWN) { + else { value = "모름"; } return value; @@ -802,9 +801,8 @@ Entry.Robotry_Parodule.getBlocks = function () { Entry.hw.sendQueue.SET = {}; } for (var i = 0; i < 4; i++) { - console.log(Entry.Robotry_Parodule.getTerminal(i)); if (Entry.Robotry_Parodule.getTerminal(i) === 'LED') { - Entry.hw.sendQueue.SET[i + 1] = { + Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: value, time: new Date().getTime(), @@ -904,17 +902,16 @@ Entry.Robotry_Parodule.getBlocks = function () { } for (var i = 0; i < 4; i++) { - console.log(Entry.Robotry_Parodule.getTerminal(i)); if (Entry.Robotry_Parodule.getTerminal(i) === 'MOTOR') { if (i === 0 || i === 1) { - Entry.hw.sendQueue.SET[i + 1] = { + Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: motor1 + value, time: new Date().getTime(), } } else if (i === 2 || i === 3) { - Entry.hw.sendQueue.SET[i + 1] = { + Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: motor2 + value, time: new Date().getTime(), @@ -1002,9 +999,8 @@ Entry.Robotry_Parodule.getBlocks = function () { Entry.hw.sendQueue.SET = {}; } for (var i = 0; i < 4; i++) { - console.log(Entry.Robotry_Parodule.getTerminal(i)); if (Entry.Robotry_Parodule.getTerminal(i) === 'BUZZER') { - Entry.hw.sendQueue.SET[i + 1] = { + Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: octave + tone, time: new Date().getTime(), From 1d72e270926a10bd11ab38dc1ef54fbd281e6dad Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 30 Aug 2023 22:30:23 +0900 Subject: [PATCH 22/37] =?UTF-8?q?UNKNOWN=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 3b56730aa1..12ca177e45 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -320,7 +320,7 @@ Entry.Robotry_Parodule.getBlocks = function () { else if (module_data[port] === NONE) { value = "없음"; } - else { + else if (module_data[port] == UNKNOWN) { value = "모름"; } return value; From 8052a419f2fb40afbd4c70127d577235d495f289 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 31 Aug 2023 17:40:59 +0900 Subject: [PATCH 23/37] =?UTF-8?q?=EA=B0=92=EC=9D=84=20=EB=AA=85=EC=8B=9C?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20sate=20=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 12ca177e45..1757d2ac14 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -872,23 +872,25 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { const value = script.getNumberValue('VALUE'); var state = script.getNumberValue('STATE'); + var normal = 0; + var shift = 4; // 회전 반향 반전 var motor1 = 0; var motor2 = 0; - if (state === 1) { + if (state === 0) { motor1 = 0; motor2 = 0; } + else if (state === 1) { + motor1 = shift; + motor2 = shift; + } else if (state === 2) { - motor1 = 4; - motor2 = 4; + motor1 = normal; + motor2 = shift; } else if (state === 3) { - motor1 = 0; - motor2 = 4; - } - else if (state === 4) { - motor1 = 4; - motor2 = 0; + motor1 = shift; + motor2 = normal; } else { } @@ -1016,6 +1018,8 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Buzzer End */ + + /* Parodule Upadate Start */ Parodule_Update: { color: EntryStatic.colorSet.block.default.HARDWARE, From be3f717d58c09f0a4439f3e47753a792a978bf59 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 31 Aug 2023 19:44:36 +0900 Subject: [PATCH 24/37] =?UTF-8?q?=EB=B8=94=EB=A1=9D=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD=20=EC=BB=A4=EC=8A=A4?= =?UTF-8?q?=ED=85=80=20=EB=B8=94=EB=A1=9D=EC=BD=94=EB=93=9C=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=EB=A5=BC=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=ED=98=95=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 720 +++++++++++------- 1 file changed, 452 insertions(+), 268 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 1757d2ac14..3da83e39f5 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -51,17 +51,18 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Sensor_Data: '%1 센서', Parodule_Sensor_Kind: '%1 모듈 종류', - Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', - Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', - Parodule_title: '제어 블럭\0', Parodule_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', Parodule_LED: '%1 (으)로 픽셀 설정 %2', Parodule_Motor: '%1 의 파워로 %2 %3', Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', + Parodule_Custom_title: '커스텀 제어 블럭\0', + Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Custom_LED_OFF: '%1 에 연결된 픽셀을 끄기 %2', + Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', + Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Update: '파로듈 업데이트 %1', }, Helper: { // 블록 선택시 나타나는 한글 설명 @@ -91,17 +92,18 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Sensor_Data: '%1 센서', Parodule_Sensor_Kind: '%1 모듈 종류', - Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', - Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', - Parodule_title: '제어 블럭\0', Parodule_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', Parodule_LED: '%1 (으)로 픽셀 설정 %2', Parodule_Motor: '%1 의 파워로 %2 %3', Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', + Parodule_Custom_title: '커스텀 제어 블럭\0', + Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Custom_LED_OFF: '%1 에 연결된 픽셀을 끄기 %2', + Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', + Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Update: '파로듈 업데이트 %1', }, Helper: { @@ -178,6 +180,7 @@ Entry.Robotry_Parodule.monitorTemplate = function () { 'Parodule_Custom_title', 'Parodule_Custom_LED', + 'Parodule_Custom_LED_OFF', 'Parodule_Custom_Motor', 'Parodule_Custom_Buzzer', @@ -331,11 +334,11 @@ Entry.Robotry_Parodule.getBlocks = function () { }, }, - Parodule_Custom_title: { + Parodule_title: { skeleton: 'basic_text', skeletonOptions: { box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_title), }, }, color: EntryStatic.colorSet.common.TRANSPARENT, @@ -343,21 +346,21 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Text', - text: Lang.template.Parodule_Custom_title, + text: Lang.template.Parodule_title, color: EntryStatic.colorSet.common.TEXT, align: 'left', }, ], def: { - type: 'Parodule_Custom_title', + type: 'Parodule_title', }, class: 'TITLE', isNotFor: ['Robotry_Parodule'], events: {}, }, - /* Paroduel Custom LED Start */ - Parodule_Custom_LED: { + /* Paroduel Set Start */ + Parodule_Set: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -366,16 +369,95 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 0], - ['원', 3], - ['네모', 1], - ['십자', 2], + ['없음', 'NONE'], + ['LED', 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], ], - value: [0], + value: 'LED', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['없음', 'NONE'], + ['LED', 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'MOTOR', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['없음', 'NONE'], + ['LED', 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'MOTOR', + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + { + type: 'Dropdown', + options: [ + ['없음', 'NONE'], + ['LED', 'LED'], + ['모터', 'MOTOR'], + ['부저', 'BUZZER'], + ], + value: 'BUZZER', fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [], + type: 'Parodule_Set', + }, + paramsKeyMap: { + PORT1: 0, + PORT2: 1, + PORT3: 2, + PORT4: 3, + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + var port1 = script.getField('PORT1', script); // 1번 모터 + var port2 = script.getField('PORT2', script); // 1번 모터 + var port3 = script.getField('PORT3', script); // 1번 모터 + var port4 = script.getField('PORT4', script); // 1번 모터 + Entry.Robotry_Parodule.setTerminal(port1, port2, port3, port4); + }, + syntax: { + js: [], + py: [], + } + }, + /* Paroduel Set Start */ + + /* Paroduel LED Start */ + Parodule_LED: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ { type: 'Dropdown', options: [ @@ -410,24 +492,26 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_LED', + type: 'Parodule_LED', }, paramsKeyMap: { - PORT: 0, - VALUE: 1 + VALUE: 0 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); const value = script.getNumberValue('VALUE'); if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: value, - time: new Date().getTime(), + for (var i = 0; i < 4; i++) { + if (Entry.Robotry_Parodule.getTerminal(i) === 'LED') { + Entry.hw.sendQueue.SET[i] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: value, + time: new Date().getTime(), + } + } } return script.callReturn(); }, @@ -436,29 +520,15 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Custom LED End */ + /* Parodule LED End */ - /* Paroduel Custom Motor Start */ - Parodule_Custom_Motor: { + /* Paroduel Motor Start */ + Parodule_Motor: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ - { - type: 'Dropdown', - options: [ - ['세모', 0], - ['원', 3], - ['네모', 1], - ['십자', 2], - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - { type: 'Dropdown', options: [ @@ -476,8 +546,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['정회전', 0], - ['역회전', 4], + ['전진', 0], + ['후진', 1], + ['좌회전', 2], + ['우회전', 3], ], value: [0], fontSize: 12, @@ -493,32 +565,67 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_Motor', + type: 'Parodule_Motor', }, paramsKeyMap: { - PORT: 0, - VALUE: 1, - STATE: 2, - + VALUE: 0, + STATE: 1, }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); - var state = script.getNumberValue('STATE'); const value = script.getNumberValue('VALUE'); - - if (value === 200) { - state = 0; + var state = script.getNumberValue('STATE'); + var normal = 0; + var shift = 4; // 회전 반향 반전 + var motor1 = 0; + var motor2 = 0; + if (state === 0) { + motor1 = 0; + motor2 = 0; + } + else if (state === 1) { + motor1 = shift; + motor2 = shift; + } + else if (state === 2) { + motor1 = normal; + motor2 = shift; + } + else if (state === 3) { + motor1 = shift; + motor2 = normal; } + else { } if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: state + value, - time: new Date().getTime(), + + if (value === 200) { + motor1 = 0; + motor2 = 0; + } + + for (var i = 0; i < 4; i++) { + if (Entry.Robotry_Parodule.getTerminal(i) === 'MOTOR') { + if (i === 0 || i === 1) { + Entry.hw.sendQueue.SET[i] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: motor1 + value, + time: new Date().getTime(), + } + } + else if (i === 2 || i === 3) { + Entry.hw.sendQueue.SET[i] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: motor2 + value, + time: new Date().getTime(), + } + } + else { } + + } } return script.callReturn(); }, @@ -527,28 +634,15 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Custom Motor End */ + /* Parodule Motor End */ - /* Paroduel Custom Buzzer Start */ - Parodule_Custom_Buzzer: { + /* Paroduel Buzzer Start */ + Parodule_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ - { - type: 'Dropdown', - options: [ - ['세모', 0], - ['원', 3], - ['네모', 1], - ['십자', 2], - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, { type: 'Dropdown', options: [ @@ -593,32 +687,32 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_Custom_Buzzer', + type: 'Parodule_Buzzer', }, paramsKeyMap: { - PORT: 0, - OCTAVE: 1, - TONE: 2 + OCTAVE: 0, + TONE: 1 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); var octave = script.getNumberValue('OCTAVE'); const tone = script.getNumberValue('TONE'); - if (tone === 200) { octave = 0; } - if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: octave + tone, - time: new Date().getTime(), - } + for (var i = 0; i < 4; i++) { + if (Entry.Robotry_Parodule.getTerminal(i) === 'BUZZER') { + Entry.hw.sendQueue.SET[i] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: octave + tone, + time: new Date().getTime(), + } + } + } return script.callReturn(); }, syntax: { @@ -626,14 +720,14 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Custom Buzzer End */ + /* Parodule Buzzer End */ - Parodule_title: { + Parodule_Custom_title: { skeleton: 'basic_text', skeletonOptions: { box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_title), + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), }, }, color: EntryStatic.colorSet.common.TRANSPARENT, @@ -641,143 +735,185 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Text', - text: Lang.template.Parodule_title, + text: Lang.template.Parodule_Custom_title, color: EntryStatic.colorSet.common.TEXT, align: 'left', }, ], def: { - type: 'Parodule_title', + type: 'Parodule_Custom_title', }, class: 'TITLE', isNotFor: ['Robotry_Parodule'], events: {}, }, - /* Paroduel Set Start */ - Parodule_Set: { + /* Parodule_Custom_Port_List Start */ + Parodule_Custom_Port_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic', + skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ { type: 'Dropdown', options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], + ['세모', 0],// 0 + ['원', 1],// 3 + ['네모', 2],// 1 + ['십자', 3],// 2 ], - value: 'LED', - fontSize: 12, + value: [0], + fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + PORT: 0, + }, + func(sprite, script) { + const port = script.getNumberValue('PORT') % 4; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + return correction_port; + }, + syntax: { + js: [], + py: [], + }, + }, + /* Parodule_Custom_Port_List End */ + + /* Parodule_Custom_LED_List Start */ + Parodule_Custom_LED_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ { type: 'Dropdown', options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], + ['빨강색', 0],//19 + ['다홍색', 1],//20 + ['주황색', 2],//21 + ['귤색', 3],//22 + ['노랑색', 4],//23 + ['연두색', 5],//24 + ['녹색', 6],//25 + ['청록색', 7],//26 + ['파랑색', 8],//27 + ['감청색', 9],//28 + ['남색', 10],//29 + ['남보라색', 11],//30 + ['보라색', 12],//31 + ['자주색', 13],//32 ], - value: 'MOTOR', - fontSize: 12, + value: [0], + fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + COLOR: 0, + }, + func(sprite, script) { + const color = script.getNumberValue('COLOR') % 15 + 19 + return color; + }, + syntax: { + js: [], + py: [], + }, + }, + /* Parodule_Custom_LED_List End */ + + /* Paroduel Custom LED Start */ + Parodule_Custom_LED: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ { - type: 'Dropdown', - options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], - ], - value: 'MOTOR', - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { - type: 'Dropdown', - options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], - ], - value: 'BUZZER', - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { type: 'Indicator', - img: 'block_icon/hardware_icon.svg', + img: 'block_icon/hardware_led.svg', size: 12, } ], events: {}, def: { - params: [], - type: 'Parodule_Set', + params: [ + { + type: 'Parodule_Custom_Port_List', + }, + { + type: 'Parodule_Custom_LED_List', + } + ], + type: 'Parodule_Custom_LED', }, paramsKeyMap: { - PORT1: 0, - PORT2: 1, - PORT3: 2, - PORT4: 3, + PORT: 0, + COLOR: 1 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - var port1 = script.getField('PORT1', script); // 1번 모터 - var port2 = script.getField('PORT2', script); // 1번 모터 - var port3 = script.getField('PORT3', script); // 1번 모터 - var port4 = script.getField('PORT4', script); // 1번 모터 - Entry.Robotry_Parodule.setTerminal(port1, port2, port3, port4); + const port = script.getNumberValue('PORT'); + const color = script.getNumberValue('COLOR'); + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: color, + time: new Date().getTime(), + } + return script.callReturn(); }, syntax: { js: [], py: [], } }, - /* Paroduel Set Start */ - + /* Parodule Custom LED End */ - /* Paroduel LED Start */ - Parodule_LED: { + /* Paroduel Custom LED Off Start */ + Parodule_Custom_LED_OFF: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ { - type: 'Dropdown', - options: [ - ['무색', 200], - ['아우라', 18], - ['빨강색', 19], - ['다홍색', 20], - ['주황색', 21], - ['귤색', 22], - ['노랑색', 23], - ['연두색', 24], - ['녹색', 25], - ['청록색', 26], - ['파랑색', 27], - ['감청색', 28], - ['남색', 29], - ['남보라색', 30], - ['보라색', 31], - ['자주색', 32], - ], - value: [19], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { type: 'Indicator', @@ -787,27 +923,28 @@ Entry.Robotry_Parodule.getBlocks = function () { ], events: {}, def: { - params: [], - type: 'Parodule_LED', + params: [ + { + type: 'Parodule_Custom_Port_List', + } + ], + type: 'Parodule_Custom_LED_OFF', }, paramsKeyMap: { - VALUE: 0 + PORT: 0, }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const value = script.getNumberValue('VALUE'); + const port = script.getNumberValue('PORT'); + const value = 200; // 끄기 if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'LED') { - Entry.hw.sendQueue.SET[i] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: value, - time: new Date().getTime(), - } - } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: value, + time: new Date().getTime(), } return script.callReturn(); }, @@ -816,42 +953,107 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule LED End */ + /* Parodule Custom LED Off End */ - /* Paroduel Motor Start */ - Parodule_Motor: { + Parodule_Custom_Motor_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic', + skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ { type: 'Dropdown', options: [ - ['100%', 39], - ['75%', 38], - ['50%', 37], - ['25%', 36], - ['0%', 200], + ['100%', 0], // 39 + ['75%', 1], // 38 + ['50%', 2], // 37 + ['25%', 3],// 36 + ['0%', 4], // 200 ], - value: [39], - fontSize: 12, + value: [0], + fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + POWER: 0, + }, + func(sprite, script) { + const power = script.getNumberValue('POWER'); + let correction_power = power % 5 === 4 ? 200 : 39 - power % 5; + return correction_power; + }, + syntax: { + js: [], + py: [], + }, + }, + + Parodule_Custom_Motor_Sign: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ { type: 'Dropdown', options: [ - ['전진', 0], - ['후진', 1], - ['좌회전', 2], - ['우회전', 3], + ['정회전', 0], // 0 + ['역회전', 1], // 4 ], value: [0], - fontSize: 12, + fontSize: 11, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + SIGN: 0, + }, + func(sprite, script) { + const sign = script.getNumberValue('SIGN') % 2; + let correction_sign = sign ? 4 : 0; + return correction_sign; + }, + syntax: { + js: [], + py: [], + }, + }, + + /* Paroduel Custom Motor Start */ + Parodule_Custom_Motor: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, { type: 'Indicator', img: 'block_icon/hardware_dc.svg', @@ -860,68 +1062,43 @@ Entry.Robotry_Parodule.getBlocks = function () { ], events: {}, def: { - params: [], - type: 'Parodule_Motor', + params: [ + { + type: 'Parodule_Custom_Port_List', + }, + { + type: 'Parodule_Custom_Motor_List', + }, + { + type: 'Parodule_Custom_Motor_Sign', + } + ], + type: 'Parodule_Custom_Motor', }, paramsKeyMap: { - VALUE: 0, - STATE: 1, + PORT: 0, + POWER: 1, + SIGNED: 2, + }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const value = script.getNumberValue('VALUE'); - var state = script.getNumberValue('STATE'); - var normal = 0; - var shift = 4; // 회전 반향 반전 - var motor1 = 0; - var motor2 = 0; - if (state === 0) { - motor1 = 0; - motor2 = 0; - } - else if (state === 1) { - motor1 = shift; - motor2 = shift; - } - else if (state === 2) { - motor1 = normal; - motor2 = shift; - } - else if (state === 3) { - motor1 = shift; - motor2 = normal; + const port = script.getNumberValue('PORT'); + var power = script.getNumberValue('POWER'); + const sign = script.getNumberValue('SIGNED'); + + if (value === 200) { + state = 0; } - else { } if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - - if (value === 200) { - motor1 = 0; - motor2 = 0; - } - - for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'MOTOR') { - if (i === 0 || i === 1) { - Entry.hw.sendQueue.SET[i] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: motor1 + value, - time: new Date().getTime(), - } - } - else if (i === 2 || i === 3) { - Entry.hw.sendQueue.SET[i] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: motor2 + value, - time: new Date().getTime(), - } - } - else { } - - } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: power + sign, + time: new Date().getTime(), } return script.callReturn(); }, @@ -930,15 +1107,20 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Motor End */ + /* Parodule Custom Motor End */ - /* Paroduel Buzzer Start */ - Parodule_Buzzer: { + /* Paroduel Custom Buzzer Start */ + Parodule_Custom_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, { type: 'Dropdown', options: [ @@ -982,32 +1164,36 @@ Entry.Robotry_Parodule.getBlocks = function () { ], events: {}, def: { - params: [], - type: 'Parodule_Buzzer', + params: [ + { + type: 'Parodule_Custom_Port_List', + }, + ], + type: 'Parodule_Custom_Buzzer', }, paramsKeyMap: { - OCTAVE: 0, - TONE: 1 + PORT: 0, + OCTAVE: 1, + TONE: 2 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { + const port = script.getNumberValue('PORT'); var octave = script.getNumberValue('OCTAVE'); const tone = script.getNumberValue('TONE'); + if (tone === 200) { octave = 0; } + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'BUZZER') { - Entry.hw.sendQueue.SET[i] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: octave + tone, - time: new Date().getTime(), - } - } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: octave + tone, + time: new Date().getTime(), } return script.callReturn(); }, @@ -1016,9 +1202,7 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Buzzer End */ - - + /* Parodule Custom Buzzer End */ /* Parodule Upadate Start */ Parodule_Update: { From ef3c50472fd2ef4e7ef22bea1e0a11110d244564 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Thu, 31 Aug 2023 22:22:24 +0900 Subject: [PATCH 25/37] =?UTF-8?q?=EC=96=B8=EC=96=B4=20=EC=98=81=EC=96=B4?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 505 ++++++++++-------- 1 file changed, 286 insertions(+), 219 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 3da83e39f5..1728ec3dac 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -53,78 +53,145 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_title: '제어 블럭\0', Parodule_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', - Parodule_LED: '%1 (으)로 픽셀 설정 %2', + Parodule_PIXEL: '%1 (으)로 픽셀 설정 %2', Parodule_Motor: '%1 의 파워로 %2 %3', Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - Parodule_Custom_LED_OFF: '%1 에 연결된 픽셀을 끄기 %2', + Parodule_Custom_PIXEL: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Custom_Module_OFF: '%1 에 연결된 모듈 중지 %2', Parodule_Update: '파로듈 업데이트 %1', }, Helper: { // 블록 선택시 나타나는 한글 설명 - Parodule_LED: '다양한 색상을 표현할수 있는 LED 블럭입니다', - Parodule_Motor: '모터를 제어할 수 있는 블록입니다', - Parodule_Buzzer: '부저를 이용해 음을 재생할 수 있는 블록입니다', - - Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', - Parodule_Custom_Motor: '모터 모듈을 움직입니다.', //Parodule_Update: '파로듈 업데이트', }, Blocks: { - sensor1: ' 세모 ', - sensor2: ' 네모 ', - sensor3: ' 십자 ', - sensor4: ' 원 ', - light: '빛', - sound: '소리', - button: '버튼', - isSensor: 'NON', - } + parodule_triangle: '세모', + parodule_square: '네모', + parodule_cross: '십자', + parodule_circle: '원', + parodule_light: '빛', + parodule_sound: '소리', + parodule_pixel: '픽셀', + parodule_motor: '모터', + parodule_buzzer: '부저', + parodule_none: '없음', + parodule_unknown: '모름', + + parodule_off: '없음', + parodule_aura: '아우라', + parodule_red: '빨강색', + parodule_vermilion: '주홍색', + parodule_orange: '주황색', + parodule_tangerine: '귤색', + parodule_yellow: '노랑색', + parodule_green_yellow: '연두색', + parodule_green: '녹색', + parodule_blue_green: '청록색', + parodule_blue: '파랑색', + parodule_prussian_blue: '감청색', + parodule_indigo: '남색', + parodule_blue_violet: '남보라색', + parodule_purple: '보라색', + parodule_reddish_purple: '자주색', + + parodule_forward: '정회전', + parodule_backward: '역회전', + parodule_left: '좌회전', + parodule_right: '우회전', + + parodule_silent: '무음', + parodule_do: '도', + parodule_do_sharp: '도#(레♭)', + parodule_re: '레', + parodule_re_sharp: '레#(미♭)', + parodule_mi: '미', + parodule_fa: '파', + parodule_fa_sharp: '파#(솔♭)', + parodule_sol: '솔', + parodule_sol_sharp: '솔#(라♭)', + parodule_la: '라', + parodule_la_sharp: '라#(시♭)', + parodule_si: '시', + }, }, en: { template: { - Parodule_Input_title: '센서 블럭\0', - Parodule_Sensor_Data: '%1 센서', - Parodule_Sensor_Kind: '%1 모듈 종류', + Parodule_Input_title: 'Sensor Block\0', + Parodule_Sensor_Data: 'Sensor values ​of %1', + Parodule_Sensor_Kind: 'kind of %1 ?', - Parodule_title: '제어 블럭\0', - Parodule_Set: '세모 : %1 원 : %4 네모 : %2 십자 : %3 으로 설정 %5', - Parodule_LED: '%1 (으)로 픽셀 설정 %2', - Parodule_Motor: '%1 의 파워로 %2 %3', - Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', + Parodule_title: 'Controll Block\0', + Parodule_Set: 'Set to triangle : %1 circle : %4 square : %2 cross : %3 %5', + Parodule_PIXEL: 'Set pixel to %1 %2', + Parodule_Motor: '%2 with power and move %1 %3', + Parodule_Buzzer: 'Play %1 octave %2 %3', - Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_LED: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - Parodule_Custom_LED_OFF: '%1 에 연결된 픽셀을 끄기 %2', - Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', - Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', + Parodule_Custom_title: 'Custom Control Block\0', + Parodule_Custom_PIXEL: 'Set pixels of %1 to %2 %3', + Parodule_Custom_Motor: 'Set the motor of %1 to %2 power and move %3 %4', + Parodule_Custom_Buzzer: 'Play the buzzer of %1 in %2 octave %3 %4', + Parodule_Custom_Module_OFF: 'Stop module of %1 %2', Parodule_Update: '파로듈 업데이트 %1', }, Helper: { - Parodule_LED: '다양한 색상을 표현할수 있는 LED 블럭입니다', - Parodule_Motor: '모터를 제어할 수 있는 블록입니다', - Parodule_Buzzer: '부저를 이용해 음을 재생할 수 있는 블록입니다', - - Parodule_Custom_Set: '메인모듈에 연결된 모듈들을 정의합니다.', - Parodule_Custom_Motor: '모터 모듈을 움직입니다.', //Parodule_Update: '파로듈 업데이트', }, Blocks: { - sensor1: '세모', - sensor2: '네모', - sensor3: '십자', - sensor4: '원', - light: '빛', - sound: '소리', - button: '버튼', - isSensor: 'NON', + parodule_triangle: 'triangle', + parodule_square: 'square', + parodule_cross: 'cross', + parodule_circle: 'circle', + parodule_light: 'light', + parodule_sound: 'sound', + parodule_pixel: 'pixel', + parodule_motor: 'motor', + parodule_buzzer: 'buzzer', + parodule_none: 'none', + parodule_unknown: 'unknown', + + parodule_off: 'off', + parodule_aura: 'aura', + parodule_red: 'red', + parodule_vermilion: 'vermilion', + parodule_orange: 'orange', + parodule_tangerine: 'tangerine', + parodule_yellow: 'yellow', + parodule_green_yellow: 'green yellow', + parodule_green: 'green', + parodule_blue_green: 'blue green', + parodule_blue: 'blue', + parodule_prussian_blue: 'prussian blue', + parodule_indigo: 'indigo', + parodule_blue_violet: 'blue violet', + parodule_purple: 'purple', + parodule_reddish_purple: 'reddish purple', + + parodule_forward: 'forward', + parodule_backward: 'backward', + parodule_left: 'left', + parodule_right: 'right', + + parodule_silent: 'Silent', + parodule_do: 'C', + parodule_do_sharp: 'C#(D♭)', + parodule_re: 'D', + parodule_re_sharp: 'D#(E♭)', + parodule_mi: 'E', + parodule_fa: 'F', + parodule_fa_sharp: 'F#(G♭)', + parodule_sol: 'G', + parodule_sol_sharp: 'G#(A♭)', + parodule_la: 'A', + parodule_la_sharp: 'A#(B♭)', + parodule_si: 'B', }, }, }; @@ -141,22 +208,22 @@ Entry.Robotry_Parodule.monitorTemplate = function () { }, ports: { MODULE1: { - name: Lang.Blocks.sensor1, + name: Lang.Blocks.parodule_triangle, type: 'input', pos: { x: [140], y: [100] }, }, MODULE2: { - name: Lang.Blocks.sensor2, + name: Lang.Blocks.parodule_square, type: 'input', pos: { x: [140], y: [500 - 100] }, }, MODULE3: { - name: Lang.Blocks.sensor3, + name: Lang.Blocks.parodule_cross, type: 'input', pos: { x: [500 - 140], y: [500 - 100] }, }, MODULE4: { - name: Lang.Blocks.sensor4, + name: Lang.Blocks.parodule_circle, type: 'input', pos: { x: [500 - 140], y: [100] }, }, @@ -174,15 +241,15 @@ Entry.Robotry_Parodule.monitorTemplate = function () { 'Parodule_title', 'Parodule_Set', - 'Parodule_LED', + 'Parodule_PIXEL', 'Parodule_Motor', 'Parodule_Buzzer', 'Parodule_Custom_title', - 'Parodule_Custom_LED', - 'Parodule_Custom_LED_OFF', + 'Parodule_Custom_PIXEL', 'Parodule_Custom_Motor', 'Parodule_Custom_Buzzer', + 'Parodule_Custom_Module_OFF', //'Parodule_Update', ]; @@ -228,10 +295,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 0], - ['원', 3], - ['네모', 1], - ['십자', 2], + [[Lang.Blocks.parodule_triangle], 0], + [[Lang.Blocks.parodule_circle], 3], + [[Lang.Blocks.parodule_square], 1], + [[Lang.Blocks.parodule_cross], 2], ], value: [0], fontSize: 12, @@ -279,10 +346,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 0], - ['원', 3], - ['네모', 1], - ['십자', 2], + [[Lang.Blocks.parodule_triangle], 0], + [[Lang.Blocks.parodule_circle], 3], + [[Lang.Blocks.parodule_square], 1], + [[Lang.Blocks.parodule_cross], 2], ], value: [0], fontSize: 12, @@ -305,26 +372,26 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { const UNKNOWN = 207; const NONE = 208; - const LED = 209; + const PIXEL = 209; const MOTOR = 210; const BUZZER = 211; const port = script.getNumberValue('PORT'); const module_data = Entry.hw.portData.MODULE; let value = ""; - if (module_data[port] === LED) { - value = "LED"; + if (module_data[port] === PIXEL) { + value = [Lang.Blocks.parodule_pixel]; } else if (module_data[port] === MOTOR) { - value = "모터"; + value = [Lang.Blocks.parodule_motor]; } else if (module_data[port] === BUZZER) { - value = "부저"; + value = [Lang.Blocks.parodule_buzzer]; } else if (module_data[port] === NONE) { - value = "없음"; + value = [Lang.Blocks.parodule_none]; } else if (module_data[port] == UNKNOWN) { - value = "모름"; + value = [Lang.Blocks.parodule_unknown]; } return value; }, @@ -369,12 +436,12 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], + [[Lang.Blocks.parodule_none], 'NONE'], + [[Lang.Blocks.parodule_pixel], 'PIXEL'], + [[Lang.Blocks.parodule_motor], 'MOTOR'], + [[Lang.Blocks.parodule_buzzer], 'BUZZER'], ], - value: 'LED', + value: 'PIXEL', fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -382,10 +449,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], + [[Lang.Blocks.parodule_none], 'NONE'], + [[Lang.Blocks.parodule_pixel], 'PIXEL'], + [[Lang.Blocks.parodule_motor], 'MOTOR'], + [[Lang.Blocks.parodule_buzzer], 'BUZZER'], ], value: 'MOTOR', fontSize: 12, @@ -395,10 +462,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], + [[Lang.Blocks.parodule_none], 'NONE'], + [[Lang.Blocks.parodule_pixel], 'PIXEL'], + [[Lang.Blocks.parodule_motor], 'MOTOR'], + [[Lang.Blocks.parodule_buzzer], 'BUZZER'], ], value: 'MOTOR', fontSize: 12, @@ -408,10 +475,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['없음', 'NONE'], - ['LED', 'LED'], - ['모터', 'MOTOR'], - ['부저', 'BUZZER'], + [[Lang.Blocks.parodule_none], 'NONE'], + [[Lang.Blocks.parodule_pixel], 'PIXEL'], + [[Lang.Blocks.parodule_motor], 'MOTOR'], + [[Lang.Blocks.parodule_buzzer], 'BUZZER'], ], value: 'BUZZER', fontSize: 12, @@ -451,8 +518,8 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Paroduel Set Start */ - /* Paroduel LED Start */ - Parodule_LED: { + /* Paroduel PIXEL Start */ + Parodule_PIXEL: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -461,22 +528,22 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['무색', 200], - ['아우라', 18], - ['빨강색', 19], - ['다홍색', 20], - ['주황색', 21], - ['귤색', 22], - ['노랑색', 23], - ['연두색', 24], - ['녹색', 25], - ['청록색', 26], - ['파랑색', 27], - ['감청색', 28], - ['남색', 29], - ['남보라색', 30], - ['보라색', 31], - ['자주색', 32], + [[Lang.Blocks.parodule_off], 200], + [[Lang.Blocks.parodule_aura], 18], + [[Lang.Blocks.parodule_red], 19], + [[Lang.Blocks.parodule_vermilion], 20], + [[Lang.Blocks.parodule_orange], 21], + [[Lang.Blocks.parodule_tangerine], 22], + [[Lang.Blocks.parodule_yellow], 23], + [[Lang.Blocks.parodule_green_yellow], 24], + [[Lang.Blocks.parodule_green], 25], + [[Lang.Blocks.parodule_blue_green], 26], + [[Lang.Blocks.parodule_blue], 27], + [[Lang.Blocks.parodule_prussian_blue], 28], + [[Lang.Blocks.parodule_indigo], 29], + [[Lang.Blocks.parodule_blue_violet], 30], + [[Lang.Blocks.parodule_purple], 31], + [[Lang.Blocks.parodule_reddish_purple], 32], ], value: [19], fontSize: 12, @@ -492,7 +559,7 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, def: { params: [], - type: 'Parodule_LED', + type: 'Parodule_PIXEL', }, paramsKeyMap: { VALUE: 0 @@ -505,7 +572,7 @@ Entry.Robotry_Parodule.getBlocks = function () { Entry.hw.sendQueue.SET = {}; } for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'LED') { + if (Entry.Robotry_Parodule.getTerminal(i) === 'PIXEL') { Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: value, @@ -520,7 +587,7 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule LED End */ + /* Parodule PIXEL End */ /* Paroduel Motor Start */ Parodule_Motor: { @@ -546,10 +613,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['전진', 0], - ['후진', 1], - ['좌회전', 2], - ['우회전', 3], + [[Lang.Blocks.parodule_forward], 0], + [[Lang.Blocks.parodule_backward], 1], + [[Lang.Blocks.parodule_left], 2], + [[Lang.Blocks.parodule_right], 3], ], value: [0], fontSize: 12, @@ -659,19 +726,19 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['무음', 200], - ['도', 47], - ['도#', 48], - ['레', 49], - ['레#', 50], - ['미', 51], - ['파', 52], - ['파#', 53], - ['솔', 54], - ['솔#', 55], - ['라', 56], - ['라#', 57], - ['시', 58], + [[Lang.Blocks.parodule_silent], 200], + [[Lang.Blocks.parodule_do], 47], + [[Lang.Blocks.parodule_do_sharp], 48], + [[Lang.Blocks.parodule_re], 49], + [[Lang.Blocks.parodule_re_sharp], 50], + [[Lang.Blocks.parodule_mi], 51], + [[Lang.Blocks.parodule_fa], 52], + [[Lang.Blocks.parodule_fa_sharp], 53], + [[Lang.Blocks.parodule_sol], 54], + [[Lang.Blocks.parodule_sol_sharp], 55], + [[Lang.Blocks.parodule_la], 56], + [[Lang.Blocks.parodule_la_sharp], 57], + [[Lang.Blocks.parodule_si], 58], ], value: [47], fontSize: 12, @@ -759,13 +826,13 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['세모', 0],// 0 - ['원', 1],// 3 - ['네모', 2],// 1 - ['십자', 3],// 2 + [[Lang.Blocks.parodule_triangle], 0], // 0 + [[Lang.Blocks.parodule_circle], 1], // 3 + [[Lang.Blocks.parodule_square], 2], // 1 + [[Lang.Blocks.parodule_cross], 3], // 2 ], value: [0], - fontSize: 11, + fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, @@ -789,8 +856,8 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule_Custom_Port_List End */ - /* Parodule_Custom_LED_List Start */ - Parodule_Custom_LED_List: { + /* Parodule_Custom_PIXEL_List Start */ + Parodule_Custom_PIXEL_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -800,23 +867,23 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['빨강색', 0],//19 - ['다홍색', 1],//20 - ['주황색', 2],//21 - ['귤색', 3],//22 - ['노랑색', 4],//23 - ['연두색', 5],//24 - ['녹색', 6],//25 - ['청록색', 7],//26 - ['파랑색', 8],//27 - ['감청색', 9],//28 - ['남색', 10],//29 - ['남보라색', 11],//30 - ['보라색', 12],//31 - ['자주색', 13],//32 + [[Lang.Blocks.parodule_red], 0],//19 + [[Lang.Blocks.parodule_vermilion], 1],//20 + [[Lang.Blocks.parodule_orange], 2],//21 + [[Lang.Blocks.parodule_tangerine], 3],//22 + [[Lang.Blocks.parodule_yellow], 4],//23 + [[Lang.Blocks.parodule_green_yellow], 5],//24 + [[Lang.Blocks.parodule_green], 6],//25 + [[Lang.Blocks.parodule_blue_green], 7],//26 + [[Lang.Blocks.parodule_blue], 8],//27 + [[Lang.Blocks.parodule_prussian_blue], 9],//28 + [[Lang.Blocks.parodule_indigo], 10],//29 + [[Lang.Blocks.parodule_blue_violet], 11],//30 + [[Lang.Blocks.parodule_purple], 12],//31 + [[Lang.Blocks.parodule_reddish_purple], 13],//32 ], value: [0], - fontSize: 11, + fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, @@ -837,10 +904,10 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], }, }, - /* Parodule_Custom_LED_List End */ + /* Parodule_Custom_PIXEL_List End */ - /* Paroduel Custom LED Start */ - Parodule_Custom_LED: { + /* Paroduel Custom PIXEL Start */ + Parodule_Custom_PIXEL: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -869,10 +936,10 @@ Entry.Robotry_Parodule.getBlocks = function () { type: 'Parodule_Custom_Port_List', }, { - type: 'Parodule_Custom_LED_List', + type: 'Parodule_Custom_PIXEL_List', } ], - type: 'Parodule_Custom_LED', + type: 'Parodule_Custom_PIXEL', }, paramsKeyMap: { PORT: 0, @@ -901,59 +968,7 @@ Entry.Robotry_Parodule.getBlocks = function () { py: [], } }, - /* Parodule Custom LED End */ - - /* Paroduel Custom LED Off Start */ - Parodule_Custom_LED_OFF: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic', - statements: [], - params: [ - { - type: 'Block', - accept: 'string', - defaultType: 'number', - }, - { - type: 'Indicator', - img: 'block_icon/hardware_led.svg', - size: 12, - } - ], - events: {}, - def: { - params: [ - { - type: 'Parodule_Custom_Port_List', - } - ], - type: 'Parodule_Custom_LED_OFF', - }, - paramsKeyMap: { - PORT: 0, - }, - class: 'SET', - isNotFor: ['Robotry_Parodule'], - func(sprite, script) { - const port = script.getNumberValue('PORT'); - const value = 200; // 끄기 - if (!Entry.hw.sendQueue.SET) { - Entry.hw.sendQueue.SET = {}; - } - Entry.hw.sendQueue.SET[port] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: value, - time: new Date().getTime(), - } - return script.callReturn(); - }, - syntax: { - js: [], - py: [], - } - }, - /* Parodule Custom LED Off End */ + /* Parodule Custom PIXEL End */ Parodule_Custom_Motor_List: { color: EntryStatic.colorSet.block.default.HARDWARE, @@ -972,7 +987,7 @@ Entry.Robotry_Parodule.getBlocks = function () { ['0%', 4], // 200 ], value: [0], - fontSize: 11, + fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, @@ -1005,11 +1020,11 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['정회전', 0], // 0 - ['역회전', 1], // 4 + [[Lang.Blocks.parodule_forward], 0], // 0 + [[Lang.Blocks.parodule_backward], 1], // 4 ], value: [0], - fontSize: 11, + fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, @@ -1137,19 +1152,19 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['무음', 200], - ['도', 47], - ['도#', 48], - ['레', 49], - ['레#', 50], - ['미', 51], - ['파', 52], - ['파#', 53], - ['솔', 54], - ['솔#', 55], - ['라', 56], - ['라#', 57], - ['시', 58], + [[Lang.Blocks.parodule_silent], 200], + [[Lang.Blocks.parodule_do], 47], + [[Lang.Blocks.parodule_do_sharp], 48], + [[Lang.Blocks.parodule_re], 49], + [[Lang.Blocks.parodule_re_sharp], 50], + [[Lang.Blocks.parodule_mi], 51], + [[Lang.Blocks.parodule_fa], 52], + [[Lang.Blocks.parodule_fa_sharp], 53], + [[Lang.Blocks.parodule_sol], 54], + [[Lang.Blocks.parodule_sol_sharp], 55], + [[Lang.Blocks.parodule_la], 56], + [[Lang.Blocks.parodule_la_sharp], 57], + [[Lang.Blocks.parodule_si], 58], ], value: [47], fontSize: 12, @@ -1204,6 +1219,58 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom Buzzer End */ + /* Paroduel Custom Module Off Start */ + Parodule_Custom_Module_OFF: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Indicator', + img: 'block_icon/hardware_led.svg', + size: 12, + } + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_Port_List', + } + ], + type: 'Parodule_Custom_Module_OFF', + }, + paramsKeyMap: { + PORT: 0, + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + const value = 200; // 끄기 + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: value, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [], + } + }, + /* Parodule Custom Module Off End */ + /* Parodule Upadate Start */ Parodule_Update: { color: EntryStatic.colorSet.block.default.HARDWARE, From 85f92f29e6ba00b79609c213578e3538f139ce18 Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Mon, 4 Sep 2023 18:25:15 +0900 Subject: [PATCH 26/37] =?UTF-8?q?=EC=84=BC=EC=84=9C=20=EB=B8=94=EB=A1=9D?= =?UTF-8?q?=20=EB=B9=84=ED=99=9C=EC=84=B1,=20=EC=84=BC=EC=84=9C=EB=AA=A8?= =?UTF-8?q?=EB=93=88=EC=9D=80=20=EC=B6=94=ED=9B=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=EC=98=88=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 1728ec3dac..45d18559f0 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -236,7 +236,7 @@ Entry.Robotry_Parodule.monitorTemplate = function () { // 블록의 배치 순서 Entry.Robotry_Parodule.blockMenuBlocks = [ 'Parodule_Input_title', - 'Parodule_Sensor_Data', + //'Parodule_Sensor_Data', // 센서 모듈은 아직 출시 예정 없음 'Parodule_Sensor_Kind', 'Parodule_title', From c71684551e74fe605d83f7677e60acdae784e9ab Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 6 Sep 2023 16:09:24 +0900 Subject: [PATCH 27/37] =?UTF-8?q?=EB=AA=A8=ED=84=B0=20=EB=B8=94=EB=9F=AD?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 45d18559f0..95c1eb02b8 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -1100,11 +1100,11 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT'); - var power = script.getNumberValue('POWER'); - const sign = script.getNumberValue('SIGNED'); + const power = script.getNumberValue('POWER'); + var sign = script.getNumberValue('SIGNED'); - if (value === 200) { - state = 0; + if (power === 200) { + sign = 0; } if (!Entry.hw.sendQueue.SET) { From b9fdaee7c1b409f253bf300d0c74c1486719595b Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 6 Sep 2023 18:02:58 +0900 Subject: [PATCH 28/37] =?UTF-8?q?=ED=8C=8C=EC=9D=B4=EC=8D=AC=20=EB=AC=B8?= =?UTF-8?q?=EB=B2=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 381 +++++++++++++++--- 1 file changed, 320 insertions(+), 61 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 95c1eb02b8..9925ea884e 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -845,13 +845,30 @@ Entry.Robotry_Parodule.getBlocks = function () { PORT: 0, }, func(sprite, script) { - const port = script.getNumberValue('PORT') % 4; - let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; - return correction_port; + const port = script.getNumberValue('PORT'); + return port; }, syntax: { js: [], - py: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [[Lang.Blocks.parodule_triangle], 0], // 0 + [[Lang.Blocks.parodule_circle], 1], // 3 + [[Lang.Blocks.parodule_square], 2], // 1 + [[Lang.Blocks.parodule_cross], 3], // 2 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Port_List', + }], }, }, /* Parodule_Custom_Port_List End */ @@ -896,12 +913,40 @@ Entry.Robotry_Parodule.getBlocks = function () { COLOR: 0, }, func(sprite, script) { - const color = script.getNumberValue('COLOR') % 15 + 19 + const color = script.getNumberValue('COLOR'); return color; }, syntax: { js: [], - py: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [[Lang.Blocks.parodule_red], 0],//19 + [[Lang.Blocks.parodule_vermilion], 1],//20 + [[Lang.Blocks.parodule_orange], 2],//21 + [[Lang.Blocks.parodule_tangerine], 3],//22 + [[Lang.Blocks.parodule_yellow], 4],//23 + [[Lang.Blocks.parodule_green_yellow], 5],//24 + [[Lang.Blocks.parodule_green], 6],//25 + [[Lang.Blocks.parodule_blue_green], 7],//26 + [[Lang.Blocks.parodule_blue], 8],//27 + [[Lang.Blocks.parodule_prussian_blue], 9],//28 + [[Lang.Blocks.parodule_indigo], 10],//29 + [[Lang.Blocks.parodule_blue_violet], 11],//30 + [[Lang.Blocks.parodule_purple], 12],//31 + [[Lang.Blocks.parodule_reddish_purple], 13],//32 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_PIXEL_List', + }], }, }, /* Parodule_Custom_PIXEL_List End */ @@ -934,9 +979,11 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Parodule_Custom_Port_List', + params: ['0'], }, { type: 'Parodule_Custom_PIXEL_List', + params: ['0'], } ], type: 'Parodule_Custom_PIXEL', @@ -948,15 +995,17 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); - const color = script.getNumberValue('COLOR'); + const port = script.getNumberValue('PORT') % 4; + const color = script.getNumberValue('COLOR') % 14 + 19; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { + Entry.hw.sendQueue.SET[correction_port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: color, time: new Date().getTime(), @@ -965,7 +1014,19 @@ Entry.Robotry_Parodule.getBlocks = function () { }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.set_Pixel(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + },], } }, /* Parodule Custom PIXEL End */ @@ -1001,12 +1062,30 @@ Entry.Robotry_Parodule.getBlocks = function () { }, func(sprite, script) { const power = script.getNumberValue('POWER'); - let correction_power = power % 5 === 4 ? 200 : 39 - power % 5; - return correction_power; + return power; }, syntax: { js: [], - py: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + ['100%', 0], // 39 + ['75%', 1], // 38 + ['50%', 2], // 37 + ['25%', 3],// 36 + ['0%', 4], // 200 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Motor_List', + }], }, }, @@ -1037,13 +1116,28 @@ Entry.Robotry_Parodule.getBlocks = function () { SIGN: 0, }, func(sprite, script) { - const sign = script.getNumberValue('SIGN') % 2; - let correction_sign = sign ? 4 : 0; - return correction_sign; + const sign = script.getNumberValue('SIGN'); + return sign; }, syntax: { js: [], - py: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [[Lang.Blocks.parodule_forward], 0], // 0 + [[Lang.Blocks.parodule_backward], 1], // 4 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Motor_Sign', + }], }, }, @@ -1080,12 +1174,15 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Parodule_Custom_Port_List', + params: ['0'], }, { type: 'Parodule_Custom_Motor_List', + params: ['0'], }, { type: 'Parodule_Custom_Motor_Sign', + params: ['0'], } ], type: 'Parodule_Custom_Motor', @@ -1099,78 +1196,202 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); + const port = script.getNumberValue('PORT') % 4; const power = script.getNumberValue('POWER'); - var sign = script.getNumberValue('SIGNED'); + const sign = script.getNumberValue('SIGNED') % 2; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let correction_power = power % 5 === 4 ? 200 : 39 - power % 5; + let correction_sign = sign ? 4 : 0; - if (power === 200) { - sign = 0; + if (correction_power === 200) { + correction_sign = 0; } if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { + Entry.hw.sendQueue.SET[correction_port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: power + sign, + data: correction_power + correction_sign, time: new Date().getTime(), } return script.callReturn(); }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.set_Motor(%1, %2, %3)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + }], } }, /* Parodule Custom Motor End */ - /* Paroduel Custom Buzzer Start */ - Parodule_Custom_Buzzer: { + Parodule_Custom_Octaves_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic', + skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ - { - type: 'Block', - accept: 'string', - defaultType: 'number', - }, { type: 'Dropdown', options: [ - ['3', 0], - ['4', 12], - ['5', 24], - ['6', 36], + ['3', 0], // 0 + ['4', 1], //12 + ['5', 2], //24 + ['6', 3], //36 ], value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + OCTAVE: 0, + }, + func(sprite, script) { + const octave = script.getNumberValue('OCTAVE'); + return octave; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + ['3', 0], // 0 + ['4', 1], //12 + ['5', 2], //24 + ['6', 3], //36 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Octaves_List', + }], + }, + }, + + Parodule_Custom_Tone_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ { type: 'Dropdown', options: [ - [[Lang.Blocks.parodule_silent], 200], - [[Lang.Blocks.parodule_do], 47], - [[Lang.Blocks.parodule_do_sharp], 48], - [[Lang.Blocks.parodule_re], 49], - [[Lang.Blocks.parodule_re_sharp], 50], - [[Lang.Blocks.parodule_mi], 51], - [[Lang.Blocks.parodule_fa], 52], - [[Lang.Blocks.parodule_fa_sharp], 53], - [[Lang.Blocks.parodule_sol], 54], - [[Lang.Blocks.parodule_sol_sharp], 55], - [[Lang.Blocks.parodule_la], 56], - [[Lang.Blocks.parodule_la_sharp], 57], - [[Lang.Blocks.parodule_si], 58], + [[Lang.Blocks.parodule_silent], 0], // 200 + [[Lang.Blocks.parodule_do], 1],// 47 + [[Lang.Blocks.parodule_do_sharp], 2], // 48 + [[Lang.Blocks.parodule_re], 3], // 49 + [[Lang.Blocks.parodule_re_sharp], 4], // 50 + [[Lang.Blocks.parodule_mi], 5], // 51 + [[Lang.Blocks.parodule_fa], 6], //52 + [[Lang.Blocks.parodule_fa_sharp], 7], //53 + [[Lang.Blocks.parodule_sol], 8], //54 + [[Lang.Blocks.parodule_sol_sharp], 9], //55 + [[Lang.Blocks.parodule_la], 10], //56 + [[Lang.Blocks.parodule_la_sharp], 11], //57 + [[Lang.Blocks.parodule_si], 12], //58 ], - value: [47], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + TONE: 0, + }, + func(sprite, script) { + const tone = script.getNumberValue('TONE'); + return tone; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [[Lang.Blocks.parodule_silent], 0], // 200 + [[Lang.Blocks.parodule_do], 1],// 47 + [[Lang.Blocks.parodule_do_sharp], 2], // 48 + [[Lang.Blocks.parodule_re], 3], // 49 + [[Lang.Blocks.parodule_re_sharp], 4], // 50 + [[Lang.Blocks.parodule_mi], 5], // 51 + [[Lang.Blocks.parodule_fa], 6], //52 + [[Lang.Blocks.parodule_fa_sharp], 7], //53 + [[Lang.Blocks.parodule_sol], 8], //54 + [[Lang.Blocks.parodule_sol_sharp], 9], //55 + [[Lang.Blocks.parodule_la], 10], //56 + [[Lang.Blocks.parodule_la_sharp], 11], //57 + [[Lang.Blocks.parodule_si], 12], //58 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Tone_List', + }], + }, + }, + + /* Paroduel Custom Buzzer Start */ + Parodule_Custom_Buzzer: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, { type: 'Indicator', img: 'block_icon/hardware_bzr2.svg', @@ -1182,6 +1403,15 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Parodule_Custom_Port_List', + params: ['0'], + }, + { + type: 'Parodule_Custom_Octaves_List', + params: ['0'], + }, + { + type: 'Parodule_Custom_Tone_List', + params: ['0'], }, ], type: 'Parodule_Custom_Buzzer', @@ -1194,27 +1424,46 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); - var octave = script.getNumberValue('OCTAVE'); - const tone = script.getNumberValue('TONE'); + const port = script.getNumberValue('PORT') % 4; + const octave = script.getNumberValue('OCTAVE') % 4; + const tone = script.getNumberValue('TONE') % 12; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let correction_octave = octave * 12; + let correction_tone = tone ? tone + 46 : 200; - if (tone === 200) { - octave = 0; + if (correction_tone === 200) { + correction_octave = 0; } if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { + Entry.hw.sendQueue.SET[correction_port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: octave + tone, + data: correction_octave + correction_tone, time: new Date().getTime(), } return script.callReturn(); }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.set_Buzzer(%1, %2, %3)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + }], } }, /* Parodule Custom Buzzer End */ @@ -1252,12 +1501,14 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); + const port = script.getNumberValue('PORT') % 4; const value = 200; // 끄기 + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - Entry.hw.sendQueue.SET[port] = { + Entry.hw.sendQueue.SET[correction_port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, data: value, time: new Date().getTime(), @@ -1266,7 +1517,15 @@ Entry.Robotry_Parodule.getBlocks = function () { }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.set_Stop(%1)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + ], + }], } }, /* Parodule Custom Module Off End */ From eeb6a111ced1ead0a1e979a3ed111e336b9b689f Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 6 Sep 2023 18:14:14 +0900 Subject: [PATCH 29/37] =?UTF-8?q?=EC=84=BC=EC=84=9C=20=EB=B8=94=EB=9F=AD?= =?UTF-8?q?=EC=97=90=EB=8F=84=20=ED=8C=8C=EC=9D=B4=EC=84=A0=20=EB=AC=B8?= =?UTF-8?q?=EB=B2=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 162 +++++++++--------- 1 file changed, 85 insertions(+), 77 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 9925ea884e..9a106881c9 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -260,6 +260,64 @@ Entry.Robotry_Parodule.monitorTemplate = function () { */ Entry.Robotry_Parodule.getBlocks = function () { return { + /* Parodule_Custom_Port_List Start */ + Parodule_Custom_Port_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ + { + type: 'Dropdown', + options: [ + [[Lang.Blocks.parodule_triangle], 0], // 0 + [[Lang.Blocks.parodule_circle], 1], // 3 + [[Lang.Blocks.parodule_square], 2], // 1 + [[Lang.Blocks.parodule_cross], 3], // 2 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + PORT: 0, + }, + func(sprite, script) { + const port = script.getNumberValue('PORT'); + return port; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [[Lang.Blocks.parodule_triangle], 0], // 0 + [[Lang.Blocks.parodule_circle], 1], // 3 + [[Lang.Blocks.parodule_square], 2], // 1 + [[Lang.Blocks.parodule_cross], 3], // 2 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Port_List', + }], + }, + }, + /* Parodule_Custom_Port_List End */ + Parodule_Input_title: { skeleton: 'basic_text', skeletonOptions: { @@ -344,23 +402,18 @@ Entry.Robotry_Parodule.getBlocks = function () { statements: [], params: [ { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_triangle], 0], - [[Lang.Blocks.parodule_circle], 3], - [[Lang.Blocks.parodule_square], 1], - [[Lang.Blocks.parodule_cross], 2], - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, ], events: {}, def: { params: [ - null, + { + type: 'Parodule_Custom_Port_List', + params: ['0'], + } ], type: 'Parodule_Sensor_Kind', }, @@ -375,29 +428,41 @@ Entry.Robotry_Parodule.getBlocks = function () { const PIXEL = 209; const MOTOR = 210; const BUZZER = 211; - const port = script.getNumberValue('PORT'); + const port = script.getNumberValue('PORT') % 4; const module_data = Entry.hw.portData.MODULE; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; let value = ""; - if (module_data[port] === PIXEL) { + + if (module_data[correction_port] === PIXEL) { value = [Lang.Blocks.parodule_pixel]; } - else if (module_data[port] === MOTOR) { + else if (module_data[correction_port] === MOTOR) { value = [Lang.Blocks.parodule_motor]; } - else if (module_data[port] === BUZZER) { + else if (module_data[correction_port] === BUZZER) { value = [Lang.Blocks.parodule_buzzer]; } - else if (module_data[port] === NONE) { + else if (module_data[correction_port] === NONE) { value = [Lang.Blocks.parodule_none]; } - else if (module_data[port] == UNKNOWN) { + else if (module_data[correction_port] == UNKNOWN) { value = [Lang.Blocks.parodule_unknown]; } return value; }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.get_Module(%1)', + blockType: 'param', + replaceBlockType: 'Parodule_Sensor_Kind', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + ], + }], }, }, @@ -815,64 +880,6 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, }, - /* Parodule_Custom_Port_List Start */ - Parodule_Custom_Port_List: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic_string_field', - statements: [], - template: '%1', - params: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_triangle], 0], // 0 - [[Lang.Blocks.parodule_circle], 1], // 3 - [[Lang.Blocks.parodule_square], 2], // 1 - [[Lang.Blocks.parodule_cross], 3], // 2 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - events: {}, - def: { - params: [null], - }, - paramsKeyMap: { - PORT: 0, - }, - func(sprite, script) { - const port = script.getNumberValue('PORT'); - return port; - }, - syntax: { - js: [], - py: [{ - syntax: '%1', - textParams: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_triangle], 0], // 0 - [[Lang.Blocks.parodule_circle], 1], // 3 - [[Lang.Blocks.parodule_square], 2], // 1 - [[Lang.Blocks.parodule_cross], 3], // 2 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - keyOption: 'Parodule_Custom_Port_List', - }], - }, - }, - /* Parodule_Custom_Port_List End */ - /* Parodule_Custom_PIXEL_List Start */ Parodule_Custom_PIXEL_List: { color: EntryStatic.colorSet.block.default.HARDWARE, @@ -1491,6 +1498,7 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Parodule_Custom_Port_List', + params: ['0'], } ], type: 'Parodule_Custom_Module_OFF', From d640093c4de11a9e1686e229f67bd535dc0543d2 Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 6 Sep 2023 18:20:33 +0900 Subject: [PATCH 30/37] =?UTF-8?q?=EB=8F=99=EC=9E=91=20=EC=A4=91=EC=A7=80?= =?UTF-8?q?=20=EB=B8=94=EB=9F=AD=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 9a106881c9..632076a60f 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -1489,7 +1489,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_led.svg', + img: 'block_icon/hardware_icon.svg', size: 12, } ], From ec561d729842453eaee682f65b5a27c4cc395a9e Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Wed, 6 Sep 2023 18:43:04 +0900 Subject: [PATCH 31/37] =?UTF-8?q?=EC=88=AB=EC=9E=90=EB=A1=9C=20=EB=90=9C?= =?UTF-8?q?=20=EB=93=9C=EB=A1=AD=20=EB=B0=95=EC=8A=A4=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=EB=8F=84=20=EB=8F=99=EC=9D=BC?= =?UTF-8?q?=ED=95=9C=20=EC=88=AB=EC=9E=90=EB=A1=9C=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 632076a60f..b63d310965 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -1048,11 +1048,11 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['100%', 0], // 39 - ['75%', 1], // 38 - ['50%', 2], // 37 - ['25%', 3],// 36 - ['0%', 4], // 200 + ['100%', 100], // 39 + ['75%', 75], // 38 + ['50%', 50], // 37 + ['25%', 25],// 36 + ['0%', 0], // 200 ], value: [0], fontSize: 12, @@ -1079,13 +1079,13 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['100%', 0], // 39 - ['75%', 1], // 38 - ['50%', 2], // 37 - ['25%', 3],// 36 - ['0%', 4], // 200 + ['100%', 100], // 39 + ['75%', 75], // 38 + ['50%', 50], // 37 + ['25%', 25],// 36 + ['0%', 0], // 200 ], - value: [0], + value: [100], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -1185,7 +1185,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Parodule_Custom_Motor_List', - params: ['0'], + params: ['100'], }, { type: 'Parodule_Custom_Motor_Sign', @@ -1207,7 +1207,7 @@ Entry.Robotry_Parodule.getBlocks = function () { const power = script.getNumberValue('POWER'); const sign = script.getNumberValue('SIGNED') % 2; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; - let correction_power = power % 5 === 4 ? 200 : 39 - power % 5; + let correction_power = power === 100 ? 39 : power === 75 ? 38 : power === 50 ? 37 : power === 25 ? 36 : 200; let correction_sign = sign ? 4 : 0; if (correction_power === 200) { @@ -1257,10 +1257,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['3', 0], // 0 - ['4', 1], //12 - ['5', 2], //24 - ['6', 3], //36 + ['3', 3], // 0 + ['4', 4], //12 + ['5', 5], //24 + ['6', 6], //36 ], value: [0], fontSize: 12, @@ -1287,12 +1287,12 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - ['3', 0], // 0 - ['4', 1], //12 - ['5', 2], //24 - ['6', 3], //36 + ['3', 3], // 0 + ['4', 4], //12 + ['5', 5], //24 + ['6', 6], //36 ], - value: [0], + value: [3], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -1414,7 +1414,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Parodule_Custom_Octaves_List', - params: ['0'], + params: ['3'], }, { type: 'Parodule_Custom_Tone_List', @@ -1431,7 +1431,7 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT') % 4; + const port = (script.getNumberValue('PORT') - 3) % 4; const octave = script.getNumberValue('OCTAVE') % 4; const tone = script.getNumberValue('TONE') % 12; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; From c7f5d6053adda18fbd9b34b1d40e20ac58c885de Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Fri, 8 Sep 2023 10:56:55 +0900 Subject: [PATCH 32/37] =?UTF-8?q?0=EB=B2=88=20=EB=B6=80=EC=A0=80=EB=A7=8C?= =?UTF-8?q?=20=EB=8F=99=EC=9E=91=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index b63d310965..1bd4a12d26 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -1431,7 +1431,7 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = (script.getNumberValue('PORT') - 3) % 4; + const port = script.getNumberValue('PORT') % 4; const octave = script.getNumberValue('OCTAVE') % 4; const tone = script.getNumberValue('TONE') % 12; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; From d604ebd7a65da5fb82c220d8696a3f4644ad1880 Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Fri, 8 Sep 2023 12:18:38 +0900 Subject: [PATCH 33/37] =?UTF-8?q?=EB=B6=80=EC=A0=80=EC=98=A5=ED=83=80?= =?UTF-8?q?=EB=B8=8C=20=EC=97=B0=EC=82=B0=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 1bd4a12d26..b08d8c9133 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -1432,7 +1432,7 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT') % 4; - const octave = script.getNumberValue('OCTAVE') % 4; + const octave = (script.getNumberValue('OCTAVE') - 3) % 4; const tone = script.getNumberValue('TONE') % 12; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; let correction_octave = octave * 12; From 58503cd5e51aa85482a2c2d8ca9aa928d79d2a77 Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Fri, 8 Sep 2023 17:21:08 +0900 Subject: [PATCH 34/37] =?UTF-8?q?=EB=AA=A8=EB=93=A0=20=EB=B8=94=EB=9F=AD?= =?UTF-8?q?=EC=97=90=20=ED=8C=8C=EC=9D=B4=EC=84=A0=20=EB=AC=B8=EB=B2=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 1481 +++++++++-------- 1 file changed, 801 insertions(+), 680 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index b08d8c9133..145dec28d2 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -35,6 +35,12 @@ Entry.Robotry_Parodule = { this.Terminal = [port1, port2, port3, port4]; }, Terminal: ['', '', '', ''], + moduleType: { + NONE: 0, + PIXEL: 1, + MOTOR: 2, + BUZZER: 3, + }, controlTypes: { DIGITAL: 0, ANALOG: 1, @@ -260,7 +266,7 @@ Entry.Robotry_Parodule.monitorTemplate = function () { */ Entry.Robotry_Parodule.getBlocks = function () { return { - /* Parodule_Custom_Port_List Start */ + /* Parodule_Custom_List Start */ Parodule_Custom_Port_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, @@ -271,10 +277,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - [[Lang.Blocks.parodule_triangle], 0], // 0 - [[Lang.Blocks.parodule_circle], 1], // 3 - [[Lang.Blocks.parodule_square], 2], // 1 - [[Lang.Blocks.parodule_cross], 3], // 2 + [Lang.Blocks.parodule_triangle, 0], // 0 + [Lang.Blocks.parodule_circle, 1], // 3 + [Lang.Blocks.parodule_square, 2], // 1 + [Lang.Blocks.parodule_cross, 3], // 2 ], value: [0], fontSize: 12, @@ -301,10 +307,10 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Dropdown', options: [ - [[Lang.Blocks.parodule_triangle], 0], // 0 - [[Lang.Blocks.parodule_circle], 1], // 3 - [[Lang.Blocks.parodule_square], 2], // 1 - [[Lang.Blocks.parodule_cross], 3], // 2 + [Lang.Blocks.parodule_triangle, 0], // 0 + [Lang.Blocks.parodule_circle, 1], // 3 + [Lang.Blocks.parodule_square, 2], // 1 + [Lang.Blocks.parodule_cross, 3], // 2 ], value: [0], fontSize: 12, @@ -316,49 +322,23 @@ Entry.Robotry_Parodule.getBlocks = function () { }], }, }, - /* Parodule_Custom_Port_List End */ - - Parodule_Input_title: { - skeleton: 'basic_text', - skeletonOptions: { - box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Input_title), - }, - }, - color: EntryStatic.colorSet.common.TRANSPARENT, - fontColor: EntryStatic.colorSet.common.TEXT, - params: [ - { - type: 'Text', - text: Lang.template.Parodule_Input_title, - color: EntryStatic.colorSet.common.TEXT, - align: 'left', - }, - ], - def: { - type: 'Parodule_Input_title', - }, - class: 'TITLE', - isNotFor: ['Robotry_Parodule'], - events: {}, - }, - Parodule_Sensor_Data: { + Parodule_Module_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - fontColor: '#fff', skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ { type: 'Dropdown', options: [ - [[Lang.Blocks.parodule_triangle], 0], - [[Lang.Blocks.parodule_circle], 3], - [[Lang.Blocks.parodule_square], 1], - [[Lang.Blocks.parodule_cross], 2], + [Lang.Blocks.parodule_none, Entry.Robotry_Parodule.moduleType.NONE], + [Lang.Blocks.parodule_pixel, Entry.Robotry_Parodule.moduleType.PIXEL], + [Lang.Blocks.parodule_motor, Entry.Robotry_Parodule.moduleType.MOTOR], + [Lang.Blocks.parodule_buzzer, Entry.Robotry_Parodule.moduleType.BUZZER], ], - value: [0], + value: Entry.Robotry_Parodule.moduleType.NONE, fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, @@ -366,290 +346,739 @@ Entry.Robotry_Parodule.getBlocks = function () { ], events: {}, def: { - params: [ - null, - ], - type: 'Parodule_Sensor_Data', + params: [null], }, paramsKeyMap: { - PORT: 0, + MODULE: 0, }, - class: 'Get', - isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const port = script.getNumberValue('PORT'); - const sensor_data = Entry.hw.portData.SENSOR - let value = false; - if (sensor_data[port] === 48) { - value = false; - } - else if (sensor_data[port] === 49) { - value = true; - } - return value; + const module = script.getNumberValue('MODULE'); + return module; }, syntax: { js: [], - py: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_none, Entry.Robotry_Parodule.moduleType.NONE], + [Lang.Blocks.parodule_pixel, Entry.Robotry_Parodule.moduleType.PIXEL], + [Lang.Blocks.parodule_motor, Entry.Robotry_Parodule.moduleType.MOTOR], + [Lang.Blocks.parodule_buzzer, Entry.Robotry_Parodule.moduleType.BUZZER], + ], + value: Entry.Robotry_Parodule.moduleType.NONE, + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Module_List', + }], }, }, - Parodule_Sensor_Kind: { + Parodule_Custom_PIXEL_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - fontColor: '#fff', skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ { - type: 'Block', - accept: 'string', - defaultType: 'number', + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_off, 0],//200 + [Lang.Blocks.parodule_aura, 1],//18 + [Lang.Blocks.parodule_red, 2],//19 + [Lang.Blocks.parodule_vermilion, 3],//20 + [Lang.Blocks.parodule_orange, 4],//21 + [Lang.Blocks.parodule_tangerine, 5],//22 + [Lang.Blocks.parodule_yellow, 6],//23 + [Lang.Blocks.parodule_green_yellow, 7],//24 + [Lang.Blocks.parodule_green, 8],//25 + [Lang.Blocks.parodule_blue_green, 9],//26 + [Lang.Blocks.parodule_blue, 10],//27 + [Lang.Blocks.parodule_prussian_blue, 11],//28 + [Lang.Blocks.parodule_indigo, 12],//29 + [Lang.Blocks.parodule_blue_violet, 13],//30 + [Lang.Blocks.parodule_purple, 14],//31 + [Lang.Blocks.parodule_reddish_purple, 15],//32 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, ], events: {}, def: { - params: [ - { - type: 'Parodule_Custom_Port_List', - params: ['0'], - } - ], - type: 'Parodule_Sensor_Kind', + params: [null], }, paramsKeyMap: { - PORT: 0, + COLOR: 0, }, - class: 'Get', - isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const UNKNOWN = 207; - const NONE = 208; - const PIXEL = 209; - const MOTOR = 210; - const BUZZER = 211; - const port = script.getNumberValue('PORT') % 4; - const module_data = Entry.hw.portData.MODULE; - let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; - let value = ""; - - if (module_data[correction_port] === PIXEL) { - value = [Lang.Blocks.parodule_pixel]; - } - else if (module_data[correction_port] === MOTOR) { - value = [Lang.Blocks.parodule_motor]; - } - else if (module_data[correction_port] === BUZZER) { - value = [Lang.Blocks.parodule_buzzer]; - } - else if (module_data[correction_port] === NONE) { - value = [Lang.Blocks.parodule_none]; - } - else if (module_data[correction_port] == UNKNOWN) { - value = [Lang.Blocks.parodule_unknown]; - } - return value; + const color = script.getNumberValue('COLOR'); + return color; }, syntax: { js: [], py: [{ - syntax: 'Parodule.get_Module(%1)', - blockType: 'param', - replaceBlockType: 'Parodule_Sensor_Kind', + syntax: '%1', textParams: [ { - type: 'Block', - accept: 'string', + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_off, 0],//200 + [Lang.Blocks.parodule_aura, 1],//18 + [Lang.Blocks.parodule_red, 2],//19 + [Lang.Blocks.parodule_vermilion, 3],//20 + [Lang.Blocks.parodule_orange, 4],//21 + [Lang.Blocks.parodule_tangerine, 5],//22 + [Lang.Blocks.parodule_yellow, 6],//23 + [Lang.Blocks.parodule_green_yellow, 7],//24 + [Lang.Blocks.parodule_green, 8],//25 + [Lang.Blocks.parodule_blue_green, 9],//26 + [Lang.Blocks.parodule_blue, 10],//27 + [Lang.Blocks.parodule_prussian_blue, 11],//28 + [Lang.Blocks.parodule_indigo, 12],//29 + [Lang.Blocks.parodule_blue_violet, 13],//30 + [Lang.Blocks.parodule_purple, 14],//31 + [Lang.Blocks.parodule_reddish_purple, 15],//32 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, ], + keyOption: 'Parodule_Custom_PIXEL_List', }], }, }, - Parodule_title: { - skeleton: 'basic_text', - skeletonOptions: { - box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_title), - }, - }, - color: EntryStatic.colorSet.common.TRANSPARENT, - fontColor: EntryStatic.colorSet.common.TEXT, - params: [ - { - type: 'Text', - text: Lang.template.Parodule_title, - color: EntryStatic.colorSet.common.TEXT, - align: 'left', - }, - ], - def: { - type: 'Parodule_title', - }, - class: 'TITLE', - isNotFor: ['Robotry_Parodule'], - events: {}, - }, - - /* Paroduel Set Start */ - Parodule_Set: { + Parodule_Custom_Motor_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic', + skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ { type: 'Dropdown', options: [ - [[Lang.Blocks.parodule_none], 'NONE'], - [[Lang.Blocks.parodule_pixel], 'PIXEL'], - [[Lang.Blocks.parodule_motor], 'MOTOR'], - [[Lang.Blocks.parodule_buzzer], 'BUZZER'], - ], - value: 'PIXEL', - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_none], 'NONE'], - [[Lang.Blocks.parodule_pixel], 'PIXEL'], - [[Lang.Blocks.parodule_motor], 'MOTOR'], - [[Lang.Blocks.parodule_buzzer], 'BUZZER'], - ], - value: 'MOTOR', - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_none], 'NONE'], - [[Lang.Blocks.parodule_pixel], 'PIXEL'], - [[Lang.Blocks.parodule_motor], 'MOTOR'], - [[Lang.Blocks.parodule_buzzer], 'BUZZER'], - ], - value: 'MOTOR', - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_none], 'NONE'], - [[Lang.Blocks.parodule_pixel], 'PIXEL'], - [[Lang.Blocks.parodule_motor], 'MOTOR'], - [[Lang.Blocks.parodule_buzzer], 'BUZZER'], + ['100%', 100], // 39 + ['75%', 75], // 38 + ['50%', 50], // 37 + ['25%', 25],// 36 + ['0%', 0], // 200 ], - value: 'BUZZER', + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, - { - type: 'Indicator', - img: 'block_icon/hardware_icon.svg', - size: 12, - } ], events: {}, def: { - params: [], - type: 'Parodule_Set', + params: [null], }, paramsKeyMap: { - PORT1: 0, - PORT2: 1, - PORT3: 2, - PORT4: 3, + POWER: 0, }, - class: 'SET', - isNotFor: ['Robotry_Parodule'], func(sprite, script) { - var port1 = script.getField('PORT1', script); // 1번 모터 - var port2 = script.getField('PORT2', script); // 1번 모터 - var port3 = script.getField('PORT3', script); // 1번 모터 - var port4 = script.getField('PORT4', script); // 1번 모터 - Entry.Robotry_Parodule.setTerminal(port1, port2, port3, port4); + const power = script.getNumberValue('POWER'); + return power; }, syntax: { js: [], - py: [], - } + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + ['100%', 100], // 39 + ['75%', 75], // 38 + ['50%', 50], // 37 + ['25%', 25],// 36 + ['0%', 0], // 200 + ], + value: [100], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Motor_List', + }], + }, }, - /* Paroduel Set Start */ - /* Paroduel PIXEL Start */ - Parodule_PIXEL: { + Parodule_Motor_Sign: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic', + skeleton: 'basic_string_field', statements: [], + template: '%1', params: [ { type: 'Dropdown', options: [ - [[Lang.Blocks.parodule_off], 200], - [[Lang.Blocks.parodule_aura], 18], - [[Lang.Blocks.parodule_red], 19], - [[Lang.Blocks.parodule_vermilion], 20], - [[Lang.Blocks.parodule_orange], 21], - [[Lang.Blocks.parodule_tangerine], 22], - [[Lang.Blocks.parodule_yellow], 23], - [[Lang.Blocks.parodule_green_yellow], 24], - [[Lang.Blocks.parodule_green], 25], - [[Lang.Blocks.parodule_blue_green], 26], - [[Lang.Blocks.parodule_blue], 27], - [[Lang.Blocks.parodule_prussian_blue], 28], - [[Lang.Blocks.parodule_indigo], 29], - [[Lang.Blocks.parodule_blue_violet], 30], - [[Lang.Blocks.parodule_purple], 31], - [[Lang.Blocks.parodule_reddish_purple], 32], + [Lang.Blocks.parodule_forward, 0], + [Lang.Blocks.parodule_backward, 1], + [Lang.Blocks.parodule_left, 2], + [Lang.Blocks.parodule_right, 3], ], - value: [19], + value: [0], fontSize: 12, bgColor: EntryStatic.colorSet.block.darken.HARDWARE, arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, - { - type: 'Indicator', - img: 'block_icon/hardware_led.svg', - size: 12, - } ], events: {}, def: { - params: [], - type: 'Parodule_PIXEL', + params: [null], }, paramsKeyMap: { - VALUE: 0 + SIGN: 0, }, - class: 'SET', - isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const value = script.getNumberValue('VALUE'); - if (!Entry.hw.sendQueue.SET) { - Entry.hw.sendQueue.SET = {}; - } - for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'PIXEL') { - Entry.hw.sendQueue.SET[i] = { - type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: value, - time: new Date().getTime(), - } + const sign = script.getNumberValue('SIGN'); + return sign; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_forward, 0], + [Lang.Blocks.parodule_backward, 1], + [Lang.Blocks.parodule_left, 2], + [Lang.Blocks.parodule_right, 3], + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Motor_Sign', + }], + }, + }, + + Parodule_Custom_Motor_Sign: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_forward, 0], // 0 + [Lang.Blocks.parodule_backward, 1], // 4 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + SIGN: 0, + }, + func(sprite, script) { + const sign = script.getNumberValue('SIGN'); + return sign; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_forward, 0], // 0 + [Lang.Blocks.parodule_backward, 1], // 4 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Motor_Sign', + }], + }, + }, + + Parodule_Custom_Octaves_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ + { + type: 'Dropdown', + options: [ + ['3', 3], // 0 + ['4', 4], //12 + ['5', 5], //24 + ['6', 6], //36 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + OCTAVE: 0, + }, + func(sprite, script) { + const octave = script.getNumberValue('OCTAVE'); + return octave; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + ['3', 3], // 0 + ['4', 4], //12 + ['5', 5], //24 + ['6', 6], //36 + ], + value: [3], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Octaves_List', + }], + }, + }, + + Parodule_Custom_Tone_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_silent, 0], // 200 + [Lang.Blocks.parodule_do, 1],// 47 + [Lang.Blocks.parodule_do_sharp, 2], // 48 + [Lang.Blocks.parodule_re, 3], // 49 + [Lang.Blocks.parodule_re_sharp, 4], // 50 + [Lang.Blocks.parodule_mi, 5], // 51 + [Lang.Blocks.parodule_fa, 6], //52 + [Lang.Blocks.parodule_fa_sharp, 7], //53 + [Lang.Blocks.parodule_sol, 8], //54 + [Lang.Blocks.parodule_sol_sharp, 9], //55 + [Lang.Blocks.parodule_la, 10], //56 + [Lang.Blocks.parodule_la_sharp, 11], //57 + [Lang.Blocks.parodule_si, 12], //58 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + TONE: 0, + }, + func(sprite, script) { + const tone = script.getNumberValue('TONE'); + return tone; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_silent, 0], // 200 + [Lang.Blocks.parodule_do, 1],// 47 + [Lang.Blocks.parodule_do_sharp, 2], // 48 + [Lang.Blocks.parodule_re, 3], // 49 + [Lang.Blocks.parodule_re_sharp, 4], // 50 + [Lang.Blocks.parodule_mi, 5], // 51 + [Lang.Blocks.parodule_fa, 6], //52 + [Lang.Blocks.parodule_fa_sharp, 7], //53 + [Lang.Blocks.parodule_sol, 8], //54 + [Lang.Blocks.parodule_sol_sharp, 9], //55 + [Lang.Blocks.parodule_la, 10], //56 + [Lang.Blocks.parodule_la_sharp, 11], //57 + [Lang.Blocks.parodule_si, 12], //58 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Custom_Tone_List', + }], + }, + }, + /* Parodule_Custom_List End */ + + Parodule_Input_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Input_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_Input_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_Input_title', + }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, + }, + + Parodule_Sensor_Data: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + fontColor: '#fff', + skeleton: 'basic_string_field', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_Port_List', + params: [0], + } + ], + type: 'Parodule_Sensor_Data', + }, + paramsKeyMap: { + PORT: 0, + }, + class: 'Get', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT'); + const sensor_data = Entry.hw.portData.SENSOR + let value = false; + if (sensor_data[port] === 48) { + value = false; + } + else if (sensor_data[port] === 49) { + value = true; + } + return value; + }, + syntax: { + js: [], + py: [], + }, + }, + + Parodule_Sensor_Kind: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + fontColor: '#fff', + skeleton: 'basic_string_field', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_Port_List', + params: [0], + } + ], + type: 'Parodule_Sensor_Kind', + }, + paramsKeyMap: { + PORT: 0, + }, + class: 'Get', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const UNKNOWN = 207; + const NONE = 208; + const PIXEL = 209; + const MOTOR = 210; + const BUZZER = 211; + const port = script.getNumberValue('PORT') % 4; + const module_data = Entry.hw.portData.MODULE; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let value = ""; + + if (module_data[correction_port] === PIXEL) { + value = [Lang.Blocks.parodule_pixel]; + } + else if (module_data[correction_port] === MOTOR) { + value = [Lang.Blocks.parodule_motor]; + } + else if (module_data[correction_port] === BUZZER) { + value = [Lang.Blocks.parodule_buzzer]; + } + else if (module_data[correction_port] === NONE) { + value = [Lang.Blocks.parodule_none]; + } + else if (module_data[correction_port] == UNKNOWN) { + value = [Lang.Blocks.parodule_unknown]; + } + return value; + }, + syntax: { + js: [], + py: [{ + syntax: 'Parodule.get_Module(%1)', + blockType: 'param', + replaceBlockType: 'Parodule_Sensor_Kind', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + ], + }], + }, + }, + + Parodule_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_title', + }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, + }, + + /* Paroduel Set Start */ + Parodule_Set: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Indicator', + img: 'block_icon/hardware_icon.svg', + size: 12, + } + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Module_List', + params: [Entry.Robotry_Parodule.moduleType.PIXEL], + }, + { + type: 'Parodule_Module_List', + params: [Entry.Robotry_Parodule.moduleType.MOTOR], + }, + { + type: 'Parodule_Module_List', + params: [Entry.Robotry_Parodule.moduleType.MOTOR], + }, + { + type: 'Parodule_Module_List', + params: [Entry.Robotry_Parodule.moduleType.BUZZER], + }, + ], + type: 'Parodule_Set', + }, + paramsKeyMap: { + PORT1: 0, + PORT2: 1, + PORT3: 2, + PORT4: 3, + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port1 = script.getNumberValue('PORT1'); // 1번 모터 + const port2 = script.getNumberValue('PORT2'); // 1번 모터 + const port3 = script.getNumberValue('PORT3'); // 1번 모터 + const port4 = script.getNumberValue('PORT4'); // 1번 모터 + //let port4 = script.getField('PORT4', script); // 1번 모터 + Entry.Robotry_Parodule.setTerminal(port1, port2, port3, port4); + }, + syntax: { + js: [], + py: [{ + syntax: 'Parodule.set_Port(%1, %2, %3, %4)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + }], + } + }, + /* Paroduel Set Start */ + + /* Paroduel PIXEL Start */ + Parodule_PIXEL: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Indicator', + img: 'block_icon/hardware_led.svg', + size: 12, + } + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_PIXEL_List', + params: [2], + }, + ], + type: 'Parodule_PIXEL', + }, + paramsKeyMap: { + COLOR: 0 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const color = script.getNumberValue('COLOR'); + let correction_color = !color ? 200 : color + 17; + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + for (let i = 0; i < 4; i++) { + if (Entry.Robotry_Parodule.getTerminal(i) === Entry.Robotry_Parodule.moduleType.PIXEL) { + Entry.hw.sendQueue.SET[i] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: correction_color, + time: new Date().getTime(), + } } } return script.callReturn(); }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.set_Pixel(%1)', + textParams: [ + { + type: 'Block', + accept: 'string', + } + ], + }], } }, /* Parodule PIXEL End */ @@ -662,31 +1091,14 @@ Entry.Robotry_Parodule.getBlocks = function () { statements: [], params: [ { - type: 'Dropdown', - options: [ - ['100%', 39], - ['75%', 38], - ['50%', 37], - ['25%', 36], - ['0%', 200], - ], - value: [39], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_forward], 0], - [[Lang.Blocks.parodule_backward], 1], - [[Lang.Blocks.parodule_left], 2], - [[Lang.Blocks.parodule_right], 3], - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { type: 'Indicator', @@ -696,37 +1108,48 @@ Entry.Robotry_Parodule.getBlocks = function () { ], events: {}, def: { - params: [], + params: [ + { + type: 'Parodule_Custom_Motor_List', + params: [100], + }, + { + type: 'Parodule_Motor_Sign', + params: [0], + } + ], type: 'Parodule_Motor', }, paramsKeyMap: { - VALUE: 0, - STATE: 1, + POWER: 0, + SIGNED: 1, }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const value = script.getNumberValue('VALUE'); - var state = script.getNumberValue('STATE'); - var normal = 0; - var shift = 4; // 회전 반향 반전 - var motor1 = 0; - var motor2 = 0; - if (state === 0) { - motor1 = 0; - motor2 = 0; + const power = script.getNumberValue('POWER'); + const sign = script.getNumberValue('SIGNED') % 4; + let correction_power = power === 100 ? 39 : power === 75 ? 38 : power === 50 ? 37 : power === 25 ? 36 : 200; + let normal = 0; + let shift = 4; // 회전 반향 반전 + let motorR = 0; + let motorL = 0; + + if (sign === 0) { + motorR = normal; + motorL = shift; } - else if (state === 1) { - motor1 = shift; - motor2 = shift; + else if (sign === 1) { + motorR = shift; + motorL = normal; } - else if (state === 2) { - motor1 = normal; - motor2 = shift; + else if (sign === 2) { + motorR = normal; + motorL = normal; } - else if (state === 3) { - motor1 = shift; - motor2 = normal; + else if (sign === 3) { + motorR = shift; + motorL = shift; } else { } @@ -734,24 +1157,24 @@ Entry.Robotry_Parodule.getBlocks = function () { Entry.hw.sendQueue.SET = {}; } - if (value === 200) { - motor1 = 0; - motor2 = 0; + if (correction_power === 200) { + motorR = 0; + motorL = 0; } - for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'MOTOR') { + for (let i = 0; i < 4; i++) { + if (Entry.Robotry_Parodule.getTerminal(i) === Entry.Robotry_Parodule.moduleType.MOTOR) { if (i === 0 || i === 1) { Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: motor1 + value, + data: motorR + correction_power, time: new Date().getTime(), } } else if (i === 2 || i === 3) { Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: motor2 + value, + data: motorL + correction_power, time: new Date().getTime(), } } @@ -763,7 +1186,19 @@ Entry.Robotry_Parodule.getBlocks = function () { }, syntax: { js: [], - py: [], + py: [{ + syntax: 'Parodule.set_Motor(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + } + ], + }], } }, /* Parodule Motor End */ @@ -776,39 +1211,14 @@ Entry.Robotry_Parodule.getBlocks = function () { statements: [], params: [ { - type: 'Dropdown', - options: [ - ['3', 0], - ['4', 12], - ['5', 24], - ['6', 36], - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_silent], 200], - [[Lang.Blocks.parodule_do], 47], - [[Lang.Blocks.parodule_do_sharp], 48], - [[Lang.Blocks.parodule_re], 49], - [[Lang.Blocks.parodule_re_sharp], 50], - [[Lang.Blocks.parodule_mi], 51], - [[Lang.Blocks.parodule_fa], 52], - [[Lang.Blocks.parodule_fa_sharp], 53], - [[Lang.Blocks.parodule_sol], 54], - [[Lang.Blocks.parodule_sol_sharp], 55], - [[Lang.Blocks.parodule_la], 56], - [[Lang.Blocks.parodule_la_sharp], 57], - [[Lang.Blocks.parodule_si], 58], - ], - value: [47], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', + defaultType: 'number', }, { type: 'Indicator', @@ -818,7 +1228,16 @@ Entry.Robotry_Parodule.getBlocks = function () { ], events: {}, def: { - params: [], + params: [ + { + type: 'Parodule_Custom_Octaves_List', + params: ['3'], + }, + { + type: 'Parodule_Custom_Tone_List', + params: ['0'], + }, + ], type: 'Parodule_Buzzer', }, paramsKeyMap: { @@ -828,135 +1247,74 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - var octave = script.getNumberValue('OCTAVE'); - const tone = script.getNumberValue('TONE'); - if (tone === 200) { - octave = 0; + const octave = (script.getNumberValue('OCTAVE') - 3) % 4; + const tone = script.getNumberValue('TONE') % 12; + let correction_octave = octave * 12; + let correction_tone = tone ? tone + 46 : 200; + + if (correction_tone === 200) { + correction_octave = 0; } if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - for (var i = 0; i < 4; i++) { - if (Entry.Robotry_Parodule.getTerminal(i) === 'BUZZER') { + for (let i = 0; i < 4; i++) { + if (Entry.Robotry_Parodule.getTerminal(i) === Entry.Robotry_Parodule.moduleType.BUZZER) { Entry.hw.sendQueue.SET[i] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: octave + tone, + data: correction_octave + correction_tone, time: new Date().getTime(), } } } - return script.callReturn(); - }, - syntax: { - js: [], - py: [], - } - }, - /* Parodule Buzzer End */ - - - Parodule_Custom_title: { - skeleton: 'basic_text', - skeletonOptions: { - box: { - offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), - }, - }, - color: EntryStatic.colorSet.common.TRANSPARENT, - fontColor: EntryStatic.colorSet.common.TEXT, - params: [ - { - type: 'Text', - text: Lang.template.Parodule_Custom_title, - color: EntryStatic.colorSet.common.TEXT, - align: 'left', - }, - ], - def: { - type: 'Parodule_Custom_title', - }, - class: 'TITLE', - isNotFor: ['Robotry_Parodule'], - events: {}, - }, - - /* Parodule_Custom_PIXEL_List Start */ - Parodule_Custom_PIXEL_List: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic_string_field', - statements: [], - template: '%1', - params: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_red], 0],//19 - [[Lang.Blocks.parodule_vermilion], 1],//20 - [[Lang.Blocks.parodule_orange], 2],//21 - [[Lang.Blocks.parodule_tangerine], 3],//22 - [[Lang.Blocks.parodule_yellow], 4],//23 - [[Lang.Blocks.parodule_green_yellow], 5],//24 - [[Lang.Blocks.parodule_green], 6],//25 - [[Lang.Blocks.parodule_blue_green], 7],//26 - [[Lang.Blocks.parodule_blue], 8],//27 - [[Lang.Blocks.parodule_prussian_blue], 9],//28 - [[Lang.Blocks.parodule_indigo], 10],//29 - [[Lang.Blocks.parodule_blue_violet], 11],//30 - [[Lang.Blocks.parodule_purple], 12],//31 - [[Lang.Blocks.parodule_reddish_purple], 13],//32 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - events: {}, - def: { - params: [null], - }, - paramsKeyMap: { - COLOR: 0, - }, - func(sprite, script) { - const color = script.getNumberValue('COLOR'); - return color; + return script.callReturn(); }, syntax: { js: [], py: [{ - syntax: '%1', + syntax: 'Parodule.set_Buzzer(%1, %2)', textParams: [ { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_red], 0],//19 - [[Lang.Blocks.parodule_vermilion], 1],//20 - [[Lang.Blocks.parodule_orange], 2],//21 - [[Lang.Blocks.parodule_tangerine], 3],//22 - [[Lang.Blocks.parodule_yellow], 4],//23 - [[Lang.Blocks.parodule_green_yellow], 5],//24 - [[Lang.Blocks.parodule_green], 6],//25 - [[Lang.Blocks.parodule_blue_green], 7],//26 - [[Lang.Blocks.parodule_blue], 8],//27 - [[Lang.Blocks.parodule_prussian_blue], 9],//28 - [[Lang.Blocks.parodule_indigo], 10],//29 - [[Lang.Blocks.parodule_blue_violet], 11],//30 - [[Lang.Blocks.parodule_purple], 12],//31 - [[Lang.Blocks.parodule_reddish_purple], 13],//32 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + type: 'Block', + accept: 'string', }, + { + type: 'Block', + accept: 'string', + } ], - keyOption: 'Parodule_Custom_PIXEL_List', }], + } + }, + /* Parodule Buzzer End */ + + + Parodule_Custom_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Custom_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_Custom_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_Custom_title', }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, }, - /* Parodule_Custom_PIXEL_List End */ + + /* Paroduel Custom PIXEL Start */ Parodule_Custom_PIXEL: { @@ -990,7 +1348,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Parodule_Custom_PIXEL_List', - params: ['0'], + params: ['2'], } ], type: 'Parodule_Custom_PIXEL', @@ -1003,8 +1361,9 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT') % 4; - const color = script.getNumberValue('COLOR') % 14 + 19; + const color = script.getNumberValue('COLOR') % 14; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let correction_color = !color ? 200 : color + 17; if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; @@ -1014,7 +1373,7 @@ Entry.Robotry_Parodule.getBlocks = function () { } Entry.hw.sendQueue.SET[correction_port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: color, + data: correction_color, time: new Date().getTime(), } return script.callReturn(); @@ -1022,7 +1381,7 @@ Entry.Robotry_Parodule.getBlocks = function () { syntax: { js: [], py: [{ - syntax: 'Parodule.set_Pixel(%1, %2)', + syntax: 'Parodule.set_Custom_Pixel(%1, %2)', textParams: [ { type: 'Block', @@ -1038,115 +1397,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom PIXEL End */ - Parodule_Custom_Motor_List: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic_string_field', - statements: [], - template: '%1', - params: [ - { - type: 'Dropdown', - options: [ - ['100%', 100], // 39 - ['75%', 75], // 38 - ['50%', 50], // 37 - ['25%', 25],// 36 - ['0%', 0], // 200 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - events: {}, - def: { - params: [null], - }, - paramsKeyMap: { - POWER: 0, - }, - func(sprite, script) { - const power = script.getNumberValue('POWER'); - return power; - }, - syntax: { - js: [], - py: [{ - syntax: '%1', - textParams: [ - { - type: 'Dropdown', - options: [ - ['100%', 100], // 39 - ['75%', 75], // 38 - ['50%', 50], // 37 - ['25%', 25],// 36 - ['0%', 0], // 200 - ], - value: [100], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - keyOption: 'Parodule_Custom_Motor_List', - }], - }, - }, - Parodule_Custom_Motor_Sign: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic_string_field', - statements: [], - template: '%1', - params: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_forward], 0], // 0 - [[Lang.Blocks.parodule_backward], 1], // 4 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - events: {}, - def: { - params: [null], - }, - paramsKeyMap: { - SIGN: 0, - }, - func(sprite, script) { - const sign = script.getNumberValue('SIGN'); - return sign; - }, - syntax: { - js: [], - py: [{ - syntax: '%1', - textParams: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_forward], 0], // 0 - [[Lang.Blocks.parodule_backward], 1], // 4 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - keyOption: 'Parodule_Custom_Motor_Sign', - }], - }, - }, /* Paroduel Custom Motor Start */ Parodule_Custom_Motor: { @@ -1181,15 +1432,15 @@ Entry.Robotry_Parodule.getBlocks = function () { params: [ { type: 'Parodule_Custom_Port_List', - params: ['0'], + params: [0], }, { type: 'Parodule_Custom_Motor_List', - params: ['100'], + params: [100], }, { type: 'Parodule_Custom_Motor_Sign', - params: ['0'], + params: [0], } ], type: 'Parodule_Custom_Motor', @@ -1227,7 +1478,7 @@ Entry.Robotry_Parodule.getBlocks = function () { syntax: { js: [], py: [{ - syntax: 'Parodule.set_Motor(%1, %2, %3)', + syntax: 'Parodule.set_Custom_Motor(%1, %2, %3)', textParams: [ { type: 'Block', @@ -1247,136 +1498,6 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom Motor End */ - Parodule_Custom_Octaves_List: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic_string_field', - statements: [], - template: '%1', - params: [ - { - type: 'Dropdown', - options: [ - ['3', 3], // 0 - ['4', 4], //12 - ['5', 5], //24 - ['6', 6], //36 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - events: {}, - def: { - params: [null], - }, - paramsKeyMap: { - OCTAVE: 0, - }, - func(sprite, script) { - const octave = script.getNumberValue('OCTAVE'); - return octave; - }, - syntax: { - js: [], - py: [{ - syntax: '%1', - textParams: [ - { - type: 'Dropdown', - options: [ - ['3', 3], // 0 - ['4', 4], //12 - ['5', 5], //24 - ['6', 6], //36 - ], - value: [3], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - keyOption: 'Parodule_Custom_Octaves_List', - }], - }, - }, - - Parodule_Custom_Tone_List: { - color: EntryStatic.colorSet.block.default.HARDWARE, - outerLine: EntryStatic.colorSet.block.darken.HARDWARE, - skeleton: 'basic_string_field', - statements: [], - template: '%1', - params: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_silent], 0], // 200 - [[Lang.Blocks.parodule_do], 1],// 47 - [[Lang.Blocks.parodule_do_sharp], 2], // 48 - [[Lang.Blocks.parodule_re], 3], // 49 - [[Lang.Blocks.parodule_re_sharp], 4], // 50 - [[Lang.Blocks.parodule_mi], 5], // 51 - [[Lang.Blocks.parodule_fa], 6], //52 - [[Lang.Blocks.parodule_fa_sharp], 7], //53 - [[Lang.Blocks.parodule_sol], 8], //54 - [[Lang.Blocks.parodule_sol_sharp], 9], //55 - [[Lang.Blocks.parodule_la], 10], //56 - [[Lang.Blocks.parodule_la_sharp], 11], //57 - [[Lang.Blocks.parodule_si], 12], //58 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - events: {}, - def: { - params: [null], - }, - paramsKeyMap: { - TONE: 0, - }, - func(sprite, script) { - const tone = script.getNumberValue('TONE'); - return tone; - }, - syntax: { - js: [], - py: [{ - syntax: '%1', - textParams: [ - { - type: 'Dropdown', - options: [ - [[Lang.Blocks.parodule_silent], 0], // 200 - [[Lang.Blocks.parodule_do], 1],// 47 - [[Lang.Blocks.parodule_do_sharp], 2], // 48 - [[Lang.Blocks.parodule_re], 3], // 49 - [[Lang.Blocks.parodule_re_sharp], 4], // 50 - [[Lang.Blocks.parodule_mi], 5], // 51 - [[Lang.Blocks.parodule_fa], 6], //52 - [[Lang.Blocks.parodule_fa_sharp], 7], //53 - [[Lang.Blocks.parodule_sol], 8], //54 - [[Lang.Blocks.parodule_sol_sharp], 9], //55 - [[Lang.Blocks.parodule_la], 10], //56 - [[Lang.Blocks.parodule_la_sharp], 11], //57 - [[Lang.Blocks.parodule_si], 12], //58 - ], - value: [0], - fontSize: 12, - bgColor: EntryStatic.colorSet.block.darken.HARDWARE, - arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, - }, - ], - keyOption: 'Parodule_Custom_Tone_List', - }], - }, - }, - /* Paroduel Custom Buzzer Start */ Parodule_Custom_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE, @@ -1455,7 +1576,7 @@ Entry.Robotry_Parodule.getBlocks = function () { syntax: { js: [], py: [{ - syntax: 'Parodule.set_Buzzer(%1, %2, %3)', + syntax: 'Parodule.set_Custom_Buzzer(%1, %2, %3)', textParams: [ { type: 'Block', From edfdc76e1d29c87b69ed92cc3245ebb14c26f6eb Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Mon, 11 Sep 2023 11:57:02 +0900 Subject: [PATCH 35/37] =?UTF-8?q?=EB=B6=80=EC=A0=80=20=EC=9D=8C=EA=B3=84?= =?UTF-8?q?=20=EB=88=84=EB=9D=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/playground/blocks/hardware/block_robotry_parodule.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 145dec28d2..4f6517f900 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -1248,7 +1248,7 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const octave = (script.getNumberValue('OCTAVE') - 3) % 4; - const tone = script.getNumberValue('TONE') % 12; + const tone = script.getNumberValue('TONE') % 13; let correction_octave = octave * 12; let correction_tone = tone ? tone + 46 : 200; @@ -1554,7 +1554,7 @@ Entry.Robotry_Parodule.getBlocks = function () { func(sprite, script) { const port = script.getNumberValue('PORT') % 4; const octave = (script.getNumberValue('OCTAVE') - 3) % 4; - const tone = script.getNumberValue('TONE') % 12; + const tone = script.getNumberValue('TONE') % 13; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; let correction_octave = octave * 12; let correction_tone = tone ? tone + 46 : 200; From 5f8cf83835c476870094948a22f43a75beaa61ab Mon Sep 17 00:00:00 2001 From: AnnajinK Date: Mon, 11 Sep 2023 16:27:06 +0900 Subject: [PATCH 36/37] =?UTF-8?q?=EB=AA=A8=EB=93=88=EC=9D=98=20=EB=82=B4?= =?UTF-8?q?=EC=9E=A5=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8A=94=20=EB=B8=94=EB=A1=9D?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 400 ++++++++++++++++-- 1 file changed, 353 insertions(+), 47 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index 4f6517f900..c3577855eb 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -64,12 +64,15 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Buzzer: '%1 옥타브 %2 (으)로 재생 %3', Parodule_Custom_title: '커스텀 제어 블럭\0', - Parodule_Custom_PIXEL: '%1 에 연결된 픽셀을 %2 으로 설정 %3', - + Parodule_Custom_Pixel: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', Parodule_Custom_Module_OFF: '%1 에 연결된 모듈 중지 %2', + Parodule_Func_title: '내장 동작\0', + Parodule_Func_Pixel: '%1 에 연결된 픽셀을 %2 으로 설정 %3', + Parodule_Func_Buzzer: '%1 에 연결된 부저를 %2 으로 설정 %3', + Parodule_Update: '파로듈 업데이트 %1', }, Helper: { // 블록 선택시 나타나는 한글 설명 @@ -90,7 +93,8 @@ Entry.Robotry_Parodule.setLanguage = function () { parodule_unknown: '모름', parodule_off: '없음', - parodule_aura: '아우라', + parodule_cycle: '순환', + parodule_aura: '알록달록', parodule_red: '빨강색', parodule_vermilion: '주홍색', parodule_orange: '주황색', @@ -112,6 +116,8 @@ Entry.Robotry_Parodule.setLanguage = function () { parodule_right: '우회전', parodule_silent: '무음', + parodule_horn: '빵빵', + parodule_weeoo: '삐용삐용', parodule_do: '도', parodule_do_sharp: '도#(레♭)', parodule_re: '레', @@ -139,11 +145,16 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Buzzer: 'Play %1 octave %2 %3', Parodule_Custom_title: 'Custom Control Block\0', - Parodule_Custom_PIXEL: 'Set pixels of %1 to %2 %3', + Parodule_Custom_Pixel: 'Set pixels of %1 to %2 %3', + Parodule_Custom_Motor: 'Set the motor of %1 to %2 power and move %3 %4', Parodule_Custom_Buzzer: 'Play the buzzer of %1 in %2 octave %3 %4', Parodule_Custom_Module_OFF: 'Stop module of %1 %2', + Parodule_Func_title: '내장 동작\0', + Parodule_Func_Pixel: 'Set pixels of %1 to %2 %3', + Parodule_Func_Buzzer: '%1 에 연결된 부저를 %2 으로 설정 %3', + Parodule_Update: '파로듈 업데이트 %1', }, Helper: { @@ -164,6 +175,7 @@ Entry.Robotry_Parodule.setLanguage = function () { parodule_unknown: 'unknown', parodule_off: 'off', + parodule_cycle: 'cycle', parodule_aura: 'aura', parodule_red: 'red', parodule_vermilion: 'vermilion', @@ -252,11 +264,15 @@ Entry.Robotry_Parodule.monitorTemplate = function () { 'Parodule_Buzzer', 'Parodule_Custom_title', - 'Parodule_Custom_PIXEL', + 'Parodule_Custom_Pixel', 'Parodule_Custom_Motor', 'Parodule_Custom_Buzzer', 'Parodule_Custom_Module_OFF', + 'Parodule_Func_title', + 'Parodule_Func_Pixel', + 'Parodule_Func_Buzzer', + //'Parodule_Update', ]; @@ -379,7 +395,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, }, - Parodule_Custom_PIXEL_List: { + Parodule_Custom_Pixel_List: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic_string_field', @@ -390,21 +406,20 @@ Entry.Robotry_Parodule.getBlocks = function () { type: 'Dropdown', options: [ [Lang.Blocks.parodule_off, 0],//200 - [Lang.Blocks.parodule_aura, 1],//18 - [Lang.Blocks.parodule_red, 2],//19 - [Lang.Blocks.parodule_vermilion, 3],//20 - [Lang.Blocks.parodule_orange, 4],//21 - [Lang.Blocks.parodule_tangerine, 5],//22 - [Lang.Blocks.parodule_yellow, 6],//23 - [Lang.Blocks.parodule_green_yellow, 7],//24 - [Lang.Blocks.parodule_green, 8],//25 - [Lang.Blocks.parodule_blue_green, 9],//26 - [Lang.Blocks.parodule_blue, 10],//27 - [Lang.Blocks.parodule_prussian_blue, 11],//28 - [Lang.Blocks.parodule_indigo, 12],//29 - [Lang.Blocks.parodule_blue_violet, 13],//30 - [Lang.Blocks.parodule_purple, 14],//31 - [Lang.Blocks.parodule_reddish_purple, 15],//32 + [Lang.Blocks.parodule_red, 1],//19 + [Lang.Blocks.parodule_vermilion, 2],//20 + [Lang.Blocks.parodule_orange, 3],//21 + [Lang.Blocks.parodule_tangerine, 4],//22 + [Lang.Blocks.parodule_yellow, 5],//23 + [Lang.Blocks.parodule_green_yellow, 6],//24 + [Lang.Blocks.parodule_green, 7],//25 + [Lang.Blocks.parodule_blue_green, 8],//26 + [Lang.Blocks.parodule_blue, 9],//27 + [Lang.Blocks.parodule_prussian_blue, 10],//28 + [Lang.Blocks.parodule_indigo, 11],//29 + [Lang.Blocks.parodule_blue_violet, 12],//30 + [Lang.Blocks.parodule_purple, 13],//31 + [Lang.Blocks.parodule_reddish_purple, 14],//32 ], value: [0], fontSize: 12, @@ -432,21 +447,20 @@ Entry.Robotry_Parodule.getBlocks = function () { type: 'Dropdown', options: [ [Lang.Blocks.parodule_off, 0],//200 - [Lang.Blocks.parodule_aura, 1],//18 - [Lang.Blocks.parodule_red, 2],//19 - [Lang.Blocks.parodule_vermilion, 3],//20 - [Lang.Blocks.parodule_orange, 4],//21 - [Lang.Blocks.parodule_tangerine, 5],//22 - [Lang.Blocks.parodule_yellow, 6],//23 - [Lang.Blocks.parodule_green_yellow, 7],//24 - [Lang.Blocks.parodule_green, 8],//25 - [Lang.Blocks.parodule_blue_green, 9],//26 - [Lang.Blocks.parodule_blue, 10],//27 - [Lang.Blocks.parodule_prussian_blue, 11],//28 - [Lang.Blocks.parodule_indigo, 12],//29 - [Lang.Blocks.parodule_blue_violet, 13],//30 - [Lang.Blocks.parodule_purple, 14],//31 - [Lang.Blocks.parodule_reddish_purple, 15],//32 + [Lang.Blocks.parodule_red, 1],//19 + [Lang.Blocks.parodule_vermilion, 2],//20 + [Lang.Blocks.parodule_orange, 3],//21 + [Lang.Blocks.parodule_tangerine, 4],//22 + [Lang.Blocks.parodule_yellow, 5],//23 + [Lang.Blocks.parodule_green_yellow, 6],//24 + [Lang.Blocks.parodule_green, 7],//25 + [Lang.Blocks.parodule_blue_green, 8],//26 + [Lang.Blocks.parodule_blue, 9],//27 + [Lang.Blocks.parodule_prussian_blue, 10],//28 + [Lang.Blocks.parodule_indigo, 11],//29 + [Lang.Blocks.parodule_blue_violet, 12],//30 + [Lang.Blocks.parodule_purple, 13],//31 + [Lang.Blocks.parodule_reddish_purple, 14],//32 ], value: [0], fontSize: 12, @@ -454,7 +468,61 @@ Entry.Robotry_Parodule.getBlocks = function () { arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, }, ], - keyOption: 'Parodule_Custom_PIXEL_List', + keyOption: 'Parodule_Custom_Pixel_List', + }], + }, + }, + + Parodule_Func_Pixel_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_off, 0],//200 + [Lang.Blocks.parodule_cycle, 1],//17 + [Lang.Blocks.parodule_aura, 2],//18 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + COLOR: 0, + }, + func(sprite, script) { + const color = script.getNumberValue('COLOR'); + return color; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_off, 0],//200 + [Lang.Blocks.parodule_aura, 1],//17 + [Lang.Blocks.parodule_aura, 2],//18 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Func_Pixel_List', }], }, }, @@ -754,6 +822,60 @@ Entry.Robotry_Parodule.getBlocks = function () { }], }, }, + + Parodule_Func_Tone_List: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic_string_field', + statements: [], + template: '%1', + params: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_silent, 0], // 200 + [Lang.Blocks.parodule_horn, 1],// 45 + [Lang.Blocks.parodule_weeoo, 2], // 46 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + events: {}, + def: { + params: [null], + }, + paramsKeyMap: { + TONE: 0, + }, + func(sprite, script) { + const tone = script.getNumberValue('TONE'); + return tone; + }, + syntax: { + js: [], + py: [{ + syntax: '%1', + textParams: [ + { + type: 'Dropdown', + options: [ + [Lang.Blocks.parodule_silent, 0], // 200 + [Lang.Blocks.parodule_horn, 1],// 45 + [Lang.Blocks.parodule_weeoo, 2], // 46 + ], + value: [0], + fontSize: 12, + bgColor: EntryStatic.colorSet.block.darken.HARDWARE, + arrowColor: EntryStatic.colorSet.arrow.default.HARDWARE, + }, + ], + keyOption: 'Parodule_Func_Tone_List', + }], + }, + }, /* Parodule_Custom_List End */ Parodule_Input_title: { @@ -1040,7 +1162,7 @@ Entry.Robotry_Parodule.getBlocks = function () { def: { params: [ { - type: 'Parodule_Custom_PIXEL_List', + type: 'Parodule_Custom_Pixel_List', params: [2], }, ], @@ -1052,8 +1174,8 @@ Entry.Robotry_Parodule.getBlocks = function () { class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { - const color = script.getNumberValue('COLOR'); - let correction_color = !color ? 200 : color + 17; + const color = script.getNumberValue('COLOR') % 15; + let correction_color = !color ? 200 : color + 18; if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } @@ -1317,7 +1439,7 @@ Entry.Robotry_Parodule.getBlocks = function () { /* Paroduel Custom PIXEL Start */ - Parodule_Custom_PIXEL: { + Parodule_Custom_Pixel: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -1347,11 +1469,11 @@ Entry.Robotry_Parodule.getBlocks = function () { params: ['0'], }, { - type: 'Parodule_Custom_PIXEL_List', + type: 'Parodule_Custom_Pixel_List', params: ['2'], } ], - type: 'Parodule_Custom_PIXEL', + type: 'Parodule_Custom_Pixel', }, paramsKeyMap: { PORT: 0, @@ -1361,9 +1483,9 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT') % 4; - const color = script.getNumberValue('COLOR') % 14; + const color = script.getNumberValue('COLOR') % 15; let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; - let correction_color = !color ? 200 : color + 17; + let correction_color = !color ? 200 : color + 18; if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; @@ -1397,8 +1519,6 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom PIXEL End */ - - /* Paroduel Custom Motor Start */ Parodule_Custom_Motor: { color: EntryStatic.colorSet.block.default.HARDWARE, @@ -1596,6 +1716,89 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom Buzzer End */ + + /* Paroduel Func Pixel Start */ + Parodule_Func_Pixel: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Indicator', + img: 'block_icon/hardware_led.svg', + size: 12, + } + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_Port_List', + params: ['0'], + }, + { + type: 'Parodule_Func_Pixel_List', + params: ['1'], + } + ], + type: 'Parodule_Func_Pixel', + }, + paramsKeyMap: { + PORT: 0, + COLOR: 1 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT') % 4; + const color = script.getNumberValue('COLOR') % 3; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let correction_color = !color ? 200 : color + 16; + + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + + Entry.hw.sendQueue.SET[correction_port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: correction_color, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [{ + syntax: 'Parodule.set_Func_Pixel(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + },], + } + }, + /* Paroduel Func Pixel End */ + /* Paroduel Custom Module Off Start */ Parodule_Custom_Module_OFF: { color: EntryStatic.colorSet.block.default.HARDWARE, @@ -1659,6 +1862,109 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom Module Off End */ + Parodule_Func_title: { + skeleton: 'basic_text', + skeletonOptions: { + box: { + offsetX: Entry.Robotry_Parodule.getOffsetX(Lang.template.Parodule_Func_title), + }, + }, + color: EntryStatic.colorSet.common.TRANSPARENT, + fontColor: EntryStatic.colorSet.common.TEXT, + params: [ + { + type: 'Text', + text: Lang.template.Parodule_Func_title, + color: EntryStatic.colorSet.common.TEXT, + align: 'left', + }, + ], + def: { + type: 'Parodule_Func_title', + }, + class: 'TITLE', + isNotFor: ['Robotry_Parodule'], + events: {}, + }, + + /* Paroduel Func Buzzer Start */ + Parodule_Func_Buzzer: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Indicator', + img: 'block_icon/hardware_bzr2.svg', + size: 12, + } + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_Port_List', + params: ['0'], + }, + { + type: 'Parodule_Func_Tone_List', + params: ['1'], + }, + ], + type: 'Parodule_Func_Buzzer', + }, + paramsKeyMap: { + PORT: 0, + TONE: 1 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT') % 4; + const tone = script.getNumberValue('TONE') % 3; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let correction_tone = !tone ? 200 : tone + 44; + + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + Entry.hw.sendQueue.SET[correction_port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: correction_tone, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [{ + syntax: 'Parodule.set_Func_Buzzer(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + }], + } + }, + /* Parodule Func Buzzer End */ + /* Parodule Upadate Start */ Parodule_Update: { color: EntryStatic.colorSet.block.default.HARDWARE, From 2215c69fe7ce32d5980842fbdc37a5fdd0278f5f Mon Sep 17 00:00:00 2001 From: AnnaJinK Date: Tue, 12 Sep 2023 15:47:55 +0900 Subject: [PATCH 37/37] =?UTF-8?q?=EB=AA=A8=EB=93=88=EC=97=90=20=EB=8F=99?= =?UTF-8?q?=EC=9E=91=EC=9D=84=20=EB=81=84=EC=A7=80=20=EC=95=8A=EA=B3=A0=20?= =?UTF-8?q?=EC=9C=A0=EC=A7=80=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9D=20=EC=B6=94=EA=B0=80=20(=EC=9D=B4=20?= =?UTF-8?q?=EB=B8=94=EB=A1=9D=EC=9D=84=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20=EB=B6=80=EC=A0=80=EC=9D=98=20=EC=9D=8C=EC=9D=B4=20?= =?UTF-8?q?=EB=81=8A=EA=B8=B0=EC=A7=80=20=EC=95=8A=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blocks/hardware/block_robotry_parodule.js | 141 +++++++++++++----- 1 file changed, 103 insertions(+), 38 deletions(-) diff --git a/src/playground/blocks/hardware/block_robotry_parodule.js b/src/playground/blocks/hardware/block_robotry_parodule.js index c3577855eb..5cd88a401d 100644 --- a/src/playground/blocks/hardware/block_robotry_parodule.js +++ b/src/playground/blocks/hardware/block_robotry_parodule.js @@ -67,7 +67,8 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Custom_Pixel: '%1 에 연결된 픽셀을 %2 으로 설정 %3', Parodule_Custom_Motor: '%1 에 연결된 모터를 %2 의 파워로 %3 %4', Parodule_Custom_Buzzer: '%1 에 연결된 부저를 %2 옥타브 %3 (으)로 재생 %4', - Parodule_Custom_Module_OFF: '%1 에 연결된 모듈 중지 %2', + Parodule_Module_Off: '%1 에 연결된 모듈 동작 종료 %2', + Parodule_Module_Standby: '%1 에 연결된 모듈 동작 유지 %2', Parodule_Func_title: '내장 동작\0', Parodule_Func_Pixel: '%1 에 연결된 픽셀을 %2 으로 설정 %3', @@ -149,7 +150,8 @@ Entry.Robotry_Parodule.setLanguage = function () { Parodule_Custom_Motor: 'Set the motor of %1 to %2 power and move %3 %4', Parodule_Custom_Buzzer: 'Play the buzzer of %1 in %2 octave %3 %4', - Parodule_Custom_Module_OFF: 'Stop module of %1 %2', + Parodule_Module_Off: 'Set Off module of %1 %2', + Parodule_Module_Standby: 'Set Stand-by module of %1 %2', Parodule_Func_title: '내장 동작\0', Parodule_Func_Pixel: 'Set pixels of %1 to %2 %3', @@ -267,7 +269,8 @@ Entry.Robotry_Parodule.monitorTemplate = function () { 'Parodule_Custom_Pixel', 'Parodule_Custom_Motor', 'Parodule_Custom_Buzzer', - 'Parodule_Custom_Module_OFF', + 'Parodule_Module_Off', + 'Parodule_Module_Standby', 'Parodule_Func_title', 'Parodule_Func_Pixel', @@ -1716,19 +1719,13 @@ Entry.Robotry_Parodule.getBlocks = function () { }, /* Parodule Custom Buzzer End */ - - /* Paroduel Func Pixel Start */ - Parodule_Func_Pixel: { + /* Paroduel Module Off Start */ + Parodule_Module_Off: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', statements: [], params: [ - { - type: 'Block', - accept: 'string', - defaultType: 'number', - }, { type: 'Block', accept: 'string', @@ -1736,7 +1733,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }, { type: 'Indicator', - img: 'block_icon/hardware_led.svg', + img: 'block_icon/hardware_icon.svg', size: 12, } ], @@ -1746,36 +1743,26 @@ Entry.Robotry_Parodule.getBlocks = function () { { type: 'Parodule_Custom_Port_List', params: ['0'], - }, - { - type: 'Parodule_Func_Pixel_List', - params: ['1'], } ], - type: 'Parodule_Func_Pixel', + type: 'Parodule_Module_Off', }, paramsKeyMap: { PORT: 0, - COLOR: 1 }, class: 'SET', isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT') % 4; - const color = script.getNumberValue('COLOR') % 3; + const value = 200; // 끄기 let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; - let correction_color = !color ? 200 : color + 16; if (!Entry.hw.sendQueue.SET) { Entry.hw.sendQueue.SET = {}; } - if (!Entry.hw.sendQueue.SET) { - Entry.hw.sendQueue.SET = {}; - } - Entry.hw.sendQueue.SET[correction_port] = { type: Entry.Robotry_Parodule.controlTypes.DIGITAL, - data: correction_color, + data: value, time: new Date().getTime(), } return script.callReturn(); @@ -1783,24 +1770,20 @@ Entry.Robotry_Parodule.getBlocks = function () { syntax: { js: [], py: [{ - syntax: 'Parodule.set_Func_Pixel(%1, %2)', + syntax: 'Parodule.set_Off(%1)', textParams: [ { type: 'Block', accept: 'string', }, - { - type: 'Block', - accept: 'string', - }, ], - },], + }], } }, - /* Paroduel Func Pixel End */ + /* Parodule Custom Module Off End */ - /* Paroduel Custom Module Off Start */ - Parodule_Custom_Module_OFF: { + /* Paroduel Module Standby Start */ + Parodule_Module_Standby: { color: EntryStatic.colorSet.block.default.HARDWARE, outerLine: EntryStatic.colorSet.block.darken.HARDWARE, skeleton: 'basic', @@ -1825,7 +1808,7 @@ Entry.Robotry_Parodule.getBlocks = function () { params: ['0'], } ], - type: 'Parodule_Custom_Module_OFF', + type: 'Parodule_Module_Standby', }, paramsKeyMap: { PORT: 0, @@ -1834,7 +1817,7 @@ Entry.Robotry_Parodule.getBlocks = function () { isNotFor: ['Robotry_Parodule'], func(sprite, script) { const port = script.getNumberValue('PORT') % 4; - const value = 200; // 끄기 + const value = 238; // 대기 동작유지 let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; if (!Entry.hw.sendQueue.SET) { @@ -1850,7 +1833,7 @@ Entry.Robotry_Parodule.getBlocks = function () { syntax: { js: [], py: [{ - syntax: 'Parodule.set_Stop(%1)', + syntax: 'Parodule.set_Standby(%1)', textParams: [ { type: 'Block', @@ -1860,7 +1843,7 @@ Entry.Robotry_Parodule.getBlocks = function () { }], } }, - /* Parodule Custom Module Off End */ + /* Parodule Module Standby End */ Parodule_Func_title: { skeleton: 'basic_text', @@ -1887,6 +1870,88 @@ Entry.Robotry_Parodule.getBlocks = function () { events: {}, }, + /* Paroduel Func Pixel Start */ + Parodule_Func_Pixel: { + color: EntryStatic.colorSet.block.default.HARDWARE, + outerLine: EntryStatic.colorSet.block.darken.HARDWARE, + skeleton: 'basic', + statements: [], + params: [ + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Block', + accept: 'string', + defaultType: 'number', + }, + { + type: 'Indicator', + img: 'block_icon/hardware_led.svg', + size: 12, + } + ], + events: {}, + def: { + params: [ + { + type: 'Parodule_Custom_Port_List', + params: ['0'], + }, + { + type: 'Parodule_Func_Pixel_List', + params: ['1'], + } + ], + type: 'Parodule_Func_Pixel', + }, + paramsKeyMap: { + PORT: 0, + COLOR: 1 + }, + class: 'SET', + isNotFor: ['Robotry_Parodule'], + func(sprite, script) { + const port = script.getNumberValue('PORT') % 4; + const color = script.getNumberValue('COLOR') % 3; + let correction_port = port === 1 ? 3 : port === 2 ? 1 : port === 3 ? 2 : 0; + let correction_color = !color ? 200 : color + 16; + + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + if (!Entry.hw.sendQueue.SET) { + Entry.hw.sendQueue.SET = {}; + } + + Entry.hw.sendQueue.SET[correction_port] = { + type: Entry.Robotry_Parodule.controlTypes.DIGITAL, + data: correction_color, + time: new Date().getTime(), + } + return script.callReturn(); + }, + syntax: { + js: [], + py: [{ + syntax: 'Parodule.set_Func_Pixel(%1, %2)', + textParams: [ + { + type: 'Block', + accept: 'string', + }, + { + type: 'Block', + accept: 'string', + }, + ], + },], + } + }, + /* Paroduel Func Pixel End */ + /* Paroduel Func Buzzer Start */ Parodule_Func_Buzzer: { color: EntryStatic.colorSet.block.default.HARDWARE,