diff --git a/src/extensions/microbitMore/index.js b/src/extensions/microbitMore/index.js index c23d7312fb4..0f2451be060 100644 --- a/src/extensions/microbitMore/index.js +++ b/src/extensions/microbitMore/index.js @@ -1693,8 +1693,15 @@ class MbitMoreBlocks { description: 'label for shaken gesture in gesture picker for microbit more extension' }), value: MbitMoreGestureName.SHAKE + }, + { + text: formatMessage({ + id: 'mbitMore.gesturesMenu.moved', + default: 'moved', + description: 'label for moved gesture in gesture picker for microbit more extension' + }), + value: 'MOVED' } - ]; } @@ -2291,6 +2298,21 @@ class MbitMoreBlocks { } } }, + { + opcode: 'display', + text: formatMessage({ + id: 'mbitMore.display', + default: 'display [TEXT]', + description: 'display text on the micro:bit display' + }), + blockType: BlockType.COMMAND, + arguments: { + TEXT: { + type: ArgumentType.STRING, + defaultValue: 'Hello!' + } + } + }, { opcode: 'displayText', text: formatMessage({ @@ -2850,6 +2872,12 @@ class MbitMoreBlocks { }, this.runtime.currentStepTime); } const gestureName = args.GESTURE; + if (gestureName === 'MOVED') { + return Object.entries(this._peripheral.gestureEvents).some(([name, timestamp]) => { + if (!this.prevGestureEvents[name]) return true; + return timestamp !== this.prevGestureEvents[name]; + }); + } const lastTimestamp = this._peripheral.getGestureEventTimestamp(gestureName); if (lastTimestamp === null) return false; @@ -2896,7 +2924,29 @@ class MbitMoreBlocks { } /** - * Display text on the 5x5 LED matrix. + * Display text on the 5x5 LED matrix with fixed delay. + * @param {object} args - the block's arguments. + * @param {string} args.TEXT - the text to display. + * @param {object} util - utility object provided by the runtime. + * @return {?Promise} - a Promise that resolves after a tick or undefined if yield. + */ + display (args, util) { + const text = Cast.toString(args.TEXT); + const delay = 120; + const resultPromise = this._peripheral.displayText(text, delay, util); + if (resultPromise) { + return resultPromise.then(() => { + // wait for display done. + // 5x5 LED matrix can display 1 character in a time. + // It takes (delay * (textLength + 5)) ms to display all characters. + const textLength = Math.min(18, text.length); + return new Promise(resolve => setTimeout(resolve, delay * (textLength + 5))); + }); + } + } + + /** + * Display text on the 5x5 LED matrix with delay. * Displayable character is ascii and non-ascii is replaced to '?'. * @param {object} args - the block's arguments. * @param {string} args.TEXT - The contents to display. diff --git a/src/extensions/microbitMore/translations.json b/src/extensions/microbitMore/translations.json index 112cc04e9f4..c8cf67e1b3b 100644 --- a/src/extensions/microbitMore/translations.json +++ b/src/extensions/microbitMore/translations.json @@ -98,7 +98,7 @@ "mbitMore.buttonEventMenu.click": "クリックされた", "mbitMore.buttonEventMenu.longClick": "ロングクリックされた", "mbitMore.buttonEventMenu.doubleClick": "ダブルクリックされた", - "mbitMore.isButtonPressed": "ボタン [NAME] が押されている", + "mbitMore.isButtonPressed": "ボタン [NAME] が押された", "mbitMore.whenTouchEvent": "ピン [NAME] が [EVENT] とき", "mbitMore.isPinTouched": "ピン [NAME] がタッチされている", "mbitMore.touchIDMenu.logo": "ロゴ", @@ -120,7 +120,9 @@ "mbitMore.gesturesMenu.g6": "6Gかかった", "mbitMore.gesturesMenu.g8": "8Gかかった", "mbitMore.gesturesMenu.shake": "ゆさぶられた", - "mbitMore.displayMatrix": "パターン [MATRIX] を表示する", + "mbitMore.gesturesMenu.moved": "動いた", + "mbitMore.displayMatrix": "[MATRIX] を表示する", + "mbitMore.display": "[TEXT] を表示する", "mbitMore.displayText": "文字 [TEXT] を [DELAY] ミリ秒間隔で流す", "mbitMore.clearDisplay": "画面を消す", "mbitMore.isPinHigh": "ピン [PIN] がハイである", @@ -186,7 +188,7 @@ "mbitMore.buttonEventMenu.click": "クリックされた", "mbitMore.buttonEventMenu.longClick": "ロングクリックされた", "mbitMore.buttonEventMenu.doubleClick": "ダブルクリックされた", - "mbitMore.isButtonPressed": "[NAME] ボタンがおされている", + "mbitMore.isButtonPressed": "[NAME] ボタンがおされた", "mbitMore.whenTouchEvent": "ピン [NAME] が [EVENT] とき", "mbitMore.isPinTouched": "ピン [NAME] がタッチされている", "mbitMore.touchIDMenu.logo": "ロゴ", @@ -208,7 +210,9 @@ "mbitMore.gesturesMenu.g6": "6Gかかった", "mbitMore.gesturesMenu.g8": "8Gかかった", "mbitMore.gesturesMenu.shake": "ゆさぶられた", - "mbitMore.displayMatrix": "パターン [MATRIX] をひょうじする", + "mbitMore.gesturesMenu.moved": "うごいた", + "mbitMore.displayMatrix": "[MATRIX] をひょうじする", + "mbitMore.display": "[TEXT] をひょうじする", "mbitMore.displayText": "もじ [TEXT] を [DELAY] ミリびょうかんかくでながす", "mbitMore.clearDisplay": "がめんをけす", "mbitMore.isPinHigh": "ピン [PIN] がハイである",