From 8cb2ad5d9bef697c18f4b0bfbb69450cbf2fb364 Mon Sep 17 00:00:00 2001 From: Eric Rosenbaum <eric.rosenbaum@gmail.com> Date: Tue, 11 Feb 2020 16:24:44 -0500 Subject: [PATCH] Expect library item data that conforms to sb3 spec --- src/components/library/library.jsx | 4 ++-- src/containers/backdrop-library.jsx | 8 ++++---- src/containers/costume-library.jsx | 10 ++++------ src/containers/costume-tab.jsx | 22 ++++++++++------------ src/containers/sound-library.jsx | 4 ++-- src/containers/sound-tab.jsx | 4 ++-- src/containers/sprite-library.jsx | 2 +- src/containers/stage-selector.jsx | 8 ++++---- src/containers/target-pane.jsx | 2 +- src/lib/randomize-sprite-position.js | 13 ++----------- 10 files changed, 32 insertions(+), 45 deletions(-) diff --git a/src/components/library/library.jsx b/src/components/library/library.jsx index 1272cb4a1..3cbc9805d 100644 --- a/src/components/library/library.jsx +++ b/src/components/library/library.jsx @@ -217,9 +217,9 @@ class LibraryComponent extends React.Component { extensionId={dataItem.extensionId} featured={dataItem.featured} hidden={dataItem.hidden} - iconMd5={dataItem.md5} + iconMd5={dataItem.type === 'sprite' ? dataItem.costumes[0].md5ext : dataItem.md5ext} iconRawURL={dataItem.rawURL} - icons={dataItem.json && dataItem.json.costumes} + icons={dataItem.costumes} id={index} insetIconURL={dataItem.insetIconURL} internetConnectionRequired={dataItem.internetConnectionRequired} diff --git a/src/containers/backdrop-library.jsx b/src/containers/backdrop-library.jsx index 9d6b559c5..31aaec926 100644 --- a/src/containers/backdrop-library.jsx +++ b/src/containers/backdrop-library.jsx @@ -27,13 +27,13 @@ class BackdropLibrary extends React.Component { handleItemSelect (item) { const vmBackdrop = { name: item.name, - rotationCenterX: item.info[0] && item.info[0] / 2, - rotationCenterY: item.info[1] && item.info[1] / 2, - bitmapResolution: item.info.length > 2 ? item.info[2] : 1, + rotationCenterX: item.rotationCenterX, + rotationCenterY: item.rotationCenterY, + bitmapResolution: item.bitmapResolution, skinId: null }; // Do not switch to stage, just add the backdrop - this.props.vm.addBackdrop(item.md5, vmBackdrop); + this.props.vm.addBackdrop(item.md5ext, vmBackdrop); } render () { return ( diff --git a/src/containers/costume-library.jsx b/src/containers/costume-library.jsx index 1e3dac3d7..2686c8408 100644 --- a/src/containers/costume-library.jsx +++ b/src/containers/costume-library.jsx @@ -25,18 +25,16 @@ class CostumeLibrary extends React.PureComponent { ]); } handleItemSelected (item) { - const split = item.md5.split('.'); - const type = split.length > 1 ? split[1] : null; - const rotationCenterX = type === 'svg' ? item.info[0] : item.info[0] / 2; - const rotationCenterY = type === 'svg' ? item.info[1] : item.info[1] / 2; + const rotationCenterX = item.dataFormat === 'svg' ? item.rotationCenterX : item.rotationCenterX / 2; + const rotationCenterY = item.dataFormat === 'svg' ? item.rotationCenterY : item.rotationCenterY / 2; const vmCostume = { name: item.name, rotationCenterX, rotationCenterY, - bitmapResolution: item.info.length > 2 ? item.info[2] : 1, + bitmapResolution: item.bitmapResolution, skinId: null }; - this.props.vm.addCostumeFromLibrary(item.md5, vmCostume); + this.props.vm.addCostumeFromLibrary(item.md5ext, vmCostume); } render () { return ( diff --git a/src/containers/costume-tab.jsx b/src/containers/costume-tab.jsx index c201efb8f..5f99f8f23 100644 --- a/src/containers/costume-tab.jsx +++ b/src/containers/costume-tab.jsx @@ -179,16 +179,14 @@ class CostumeTab extends React.Component { } handleSurpriseCostume () { const item = costumeLibraryContent[Math.floor(Math.random() * costumeLibraryContent.length)]; - const split = item.md5.split('.'); - const type = split.length > 1 ? split[1] : null; - const rotationCenterX = type === 'svg' ? item.info[0] : item.info[0] / 2; - const rotationCenterY = type === 'svg' ? item.info[1] : item.info[1] / 2; + const rotationCenterX = item.dataFormat === 'svg' ? item.rotationCenterX : item.rotationCenterX / 2; + const rotationCenterY = item.dataFormat === 'svg' ? item.rotationCenterY : item.rotationCenterY / 2; const vmCostume = { name: item.name, - md5: item.md5, - rotationCenterX, - rotationCenterY, - bitmapResolution: item.info.length > 2 ? item.info[2] : 1, + md5: item.md5ext, + rotationCenterX: rotationCenterX, + rotationCenterY: rotationCenterY, + bitmapResolution: item.bitmapResolution, skinId: null }; this.handleNewCostume(vmCostume, true /* fromCostumeLibrary */); @@ -197,10 +195,10 @@ class CostumeTab extends React.Component { const item = backdropLibraryContent[Math.floor(Math.random() * backdropLibraryContent.length)]; const vmCostume = { name: item.name, - md5: item.md5, - rotationCenterX: item.info[0] && item.info[0] / 2, - rotationCenterY: item.info[1] && item.info[1] / 2, - bitmapResolution: item.info.length > 2 ? item.info[2] : 1, + md5: item.md5ext, + rotationCenterX: item.rotationCenterX, + rotationCenterY: item.rotationCenterY, + bitmapResolution: item.bitmapResolution, skinId: null }; this.handleNewCostume(vmCostume); diff --git a/src/containers/sound-library.jsx b/src/containers/sound-library.jsx index cdb5c7c6a..973bee104 100644 --- a/src/containers/sound-library.jsx +++ b/src/containers/sound-library.jsx @@ -149,11 +149,11 @@ class SoundLibrary extends React.PureComponent { // @todo need to use this hack to avoid library using md5 for image const soundLibraryThumbnailData = soundLibraryContent.map(sound => { const { - md5, + md5ext, ...otherData } = sound; return { - _md5: md5, + _md5: md5ext, rawURL: this.props.isRtl ? soundIconRtl : soundIcon, ...otherData }; diff --git a/src/containers/sound-tab.jsx b/src/containers/sound-tab.jsx index 8d42e8e91..75ac67236 100644 --- a/src/containers/sound-tab.jsx +++ b/src/containers/sound-tab.jsx @@ -113,8 +113,8 @@ class SoundTab extends React.Component { handleSurpriseSound () { const soundItem = soundLibraryContent[Math.floor(Math.random() * soundLibraryContent.length)]; const vmSound = { - format: soundItem.format, - md5: soundItem.md5, + format: soundItem.dataFormat, + md5: soundItem.md5ext, rate: soundItem.rate, sampleCount: soundItem.sampleCount, name: soundItem.name diff --git a/src/containers/sprite-library.jsx b/src/containers/sprite-library.jsx index 013ce4f77..9fe0604c9 100644 --- a/src/containers/sprite-library.jsx +++ b/src/containers/sprite-library.jsx @@ -28,7 +28,7 @@ class SpriteLibrary extends React.PureComponent { handleItemSelect (item) { // Randomize position of library sprite randomizeSpritePosition(item); - this.props.vm.addSprite(JSON.stringify(item.json)).then(() => { + this.props.vm.addSprite(JSON.stringify(item)).then(() => { this.props.onActivateBlocksTab(); }); } diff --git a/src/containers/stage-selector.jsx b/src/containers/stage-selector.jsx index 94d1d6c00..66b1cb5e5 100644 --- a/src/containers/stage-selector.jsx +++ b/src/containers/stage-selector.jsx @@ -69,10 +69,10 @@ class StageSelector extends React.Component { addBackdropFromLibraryItem (item, shouldActivateTab = true) { const vmBackdrop = { name: item.name, - md5: item.md5, - rotationCenterX: item.info[0] && item.info[0] / 2, - rotationCenterY: item.info[1] && item.info[1] / 2, - bitmapResolution: item.info.length > 2 ? item.info[2] : 1, + md5: item.md5ext, + rotationCenterX: item.rotationCenterX, + rotationCenterY: item.rotationCenterY, + bitmapResolution: item.bitmapResolution, skinId: null }; this.handleNewBackdrop(vmBackdrop, shouldActivateTab); diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx index b5af39b16..55ddaffaf 100644 --- a/src/containers/target-pane.jsx +++ b/src/containers/target-pane.jsx @@ -111,7 +111,7 @@ class TargetPane extends React.Component { ); const item = surpriseSprites[Math.floor(Math.random() * surpriseSprites.length)]; randomizeSpritePosition(item); - this.props.vm.addSprite(JSON.stringify(item.json)) + this.props.vm.addSprite(JSON.stringify(item)) .then(this.handleActivateBlocksTab); } handlePaintSpriteClick () { diff --git a/src/lib/randomize-sprite-position.js b/src/lib/randomize-sprite-position.js index dbb92b9ad..9d29980c6 100644 --- a/src/lib/randomize-sprite-position.js +++ b/src/lib/randomize-sprite-position.js @@ -1,16 +1,7 @@ const randomizeSpritePosition = spriteObject => { // https://github.com/LLK/scratch-flash/blob/689f3c79a7e8b2e98f5be80056d877f303a8d8ba/src/Scratch.as#L1385 - const randomX = Math.floor((200 * Math.random()) - 100); - const randomY = Math.floor((100 * Math.random()) - 50); - if (spriteObject.hasOwnProperty('json')) { - // Library sprite object - spriteObject.json.x = randomX; - spriteObject.json.y = randomY; - } else if (spriteObject.hasOwnProperty('x') && spriteObject.hasOwnProperty('y')) { - // Scratch 3 sprite object - spriteObject.x = randomX; - spriteObject.y = randomY; - } + spriteObject.x = Math.floor((200 * Math.random()) - 100); + spriteObject.y = Math.floor((100 * Math.random()) - 50); }; export default randomizeSpritePosition; -- GitLab