diff --git a/static/extensions/Potater234/operatorsplus.js b/static/extensions/Potater234/operatorsplus.js new file mode 100644 index 00000000..bc2700d1 --- /dev/null +++ b/static/extensions/Potater234/operatorsplus.js @@ -0,0 +1,117 @@ +// Name: Operators+ +// ID: OperatorsPlus +// Description: Operators expansion. +// By: Potater234 +// License: MIT +(async function(Scratch) { + const blocks = []; + let operatorsplus_result, operatorsplus_patience, operatorsplus_decimals; + const wait = m => new Promise(r => setTimeout(r, m)); + const mathRandomInt = (a, b) => { const [min, max] = a > b ? [b, a] : [a, b]; return Math.floor(Math.random() * (max - min + 1)) + min; }; + const textReplace = (h, n, r) => h.replace(new RegExp(n.replace(/([-()\[\]{}+?*.$^|,:#= -179 && v < 181) || (t === 'FPS' && v >= 1 && v <= 250) || false; } + get operatorsplus_Block_isDropdownBoplean() { return this.isDropdownBoplean; } + + patienceBoolean() { return operatorsplus_patience > 0; } + get operatorsplus_Block_patienceBoolean() { return this.patienceBoolean; } + + async waitBoolean({ 1: t }) { await wait(operatorsplus_patience); return t === 'random' ? Math.random() < 0.5 : t === 'true'; } + get operatorsplus_Block_waitBoolean() { return this.waitBoolean; } + } + + const ext = new Extension(); + + blocks.push({ opcode: 'operatorsplus_Block_goldenRatio', blockType: Scratch.BlockType.REPORTER, text: 'φ' }); + blocks.push({ opcode: 'operatorsplus_Block_waitChange', blockType: Scratch.BlockType.COMMAND, text: 'change patience by [1] secs', arguments: { '1': { type: Scratch.ArgumentType.NUMBER, defaultValue: 1 } } }); + blocks.push({ opcode: 'operatorsplus_Block_waitSet', blockType: Scratch.BlockType.COMMAND, text: 'set patience to [1] secs', arguments: { '1': { type: Scratch.ArgumentType.NUMBER, defaultValue: 1 } } }); + blocks.push({ opcode: 'operatorsplus_Block_atan2', blockType: Scratch.BlockType.REPORTER, text: 'atan2 x: [x] y: [y]', arguments: { x: { type: Scratch.ArgumentType.NUMBER, defaultValue: 1 }, y: { type: Scratch.ArgumentType.NUMBER, defaultValue: -1 } } }); + blocks.push({ opcode: 'operatorsplus_Block_countIn', blockType: Scratch.BlockType.REPORTER, text: 'count [1] in [2]', arguments: { '1': { type: Scratch.ArgumentType.STRING, defaultValue: 'o' }, '2': { type: Scratch.ArgumentType.STRING, defaultValue: 'foo' } } }); + blocks.push({ opcode: 'operatorsplus_Block_fenceDirection', blockType: Scratch.BlockType.REPORTER, text: 'fence direction [dir]', arguments: { dir: { type: Scratch.ArgumentType.NUMBER, defaultValue: 181 } } }); + blocks.push({ opcode: 'operatorsplus_Block_patienceReporter', blockType: Scratch.BlockType.REPORTER, text: 'patience' }); + blocks.push({ opcode: 'operatorsplus_Block_percentOf2', blockType: Scratch.BlockType.REPORTER, text: '% of [1] in [2]', arguments: { '1': { type: Scratch.ArgumentType.NUMBER, defaultValue: 1 }, '2': { type: Scratch.ArgumentType.NUMBER, defaultValue: 2 } } }); + blocks.push({ opcode: 'operatorsplus_Block_randomDropdownReporter', blockType: Scratch.BlockType.REPORTER, text: 'random [1]', arguments: { '1': { type: Scratch.ArgumentType.STRING, menu: 'operatorsplus_menu_0' } } }); + blocks.push({ opcode: 'operatorsplus_Block_replaceWith', blockType: Scratch.BlockType.REPORTER, text: 'replace [1] with [2] in [3]', arguments: { '1': { type: Scratch.ArgumentType.STRING, defaultValue: 'foo' }, '2': { type: Scratch.ArgumentType.STRING, defaultValue: 'bar' }, '3': { type: Scratch.ArgumentType.STRING, defaultValue: 'foobar' } } }); + blocks.push({ opcode: 'operatorsplus_Block_reverseReporter', blockType: Scratch.BlockType.REPORTER, text: 'reverse [1]', arguments: { '1': { type: Scratch.ArgumentType.STRING, defaultValue: 'Hello, World!' } } }); + blocks.push({ opcode: 'operatorsplus_Block_roundNearest', blockType: Scratch.BlockType.REPORTER, text: '[1] [2] to nearest [3]', arguments: { '1': { type: Scratch.ArgumentType.STRING, menu: 'operatorsplus_menu_1' }, '2': { type: Scratch.ArgumentType.NUMBER, defaultValue: 1.5 }, '3': { type: Scratch.ArgumentType.NUMBER, defaultValue: 3 } } }); + blocks.push({ opcode: 'operatorsplus_Block_waitReporter', blockType: Scratch.BlockType.REPORTER, text: 'wait and return [1]', arguments: { '1': { type: Scratch.ArgumentType.STRING, defaultValue: 'Hmm...' } }, disableMonitor: true }); + blocks.push({ opcode: 'operatorsplus_Block_isDropdownBoplean', blockType: Scratch.BlockType.BOOLEAN, text: 'is [1] [2] ?', arguments: { '1': { type: Scratch.ArgumentType.NUMBER, defaultValue: 1 }, '2': { type: Scratch.ArgumentType.STRING, menu: 'operatorsplus_menu_2' } } }); + blocks.push({ opcode: 'operatorsplus_Block_patienceBoolean', blockType: Scratch.BlockType.BOOLEAN, text: 'is patient?' }); + blocks.push({ opcode: 'operatorsplus_Block_waitBoolean', blockType: Scratch.BlockType.BOOLEAN, text: 'wait and return [1]', arguments: { '1': { type: Scratch.ArgumentType.STRING, menu: 'operatorsplus_menu_3' } }, disableMonitor: true }); + + Scratch.extensions.register(ext); +})(Scratch) diff --git a/static/images/Potater234/operatorsplus.svg b/static/images/Potater234/operatorsplus.svg new file mode 100644 index 00000000..1901e517 --- /dev/null +++ b/static/images/Potater234/operatorsplus.svg @@ -0,0 +1 @@ +101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010Operators Plusφ