sb-edit-custom 0.20.33 → 0.20.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/models/game.js +5 -5
- package/lib/models/sprite.js +61 -4
- package/package.json +1 -1
package/lib/models/game.js
CHANGED
|
@@ -62,11 +62,11 @@ var toLeopard_1 = require("../io/leopard/toLeopard");
|
|
|
62
62
|
// }
|
|
63
63
|
function generateIndexJS(game) {
|
|
64
64
|
var toLeopardJS = (0, toLeopard_1.getPathsToRelativeOrAbsolute)(toLeopard_1.defaultOptions.leopardJSURL);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return "import
|
|
65
|
+
return "\n import { Sprite, Trigger, Watcher, Costume, Color, Sound, Project } from ".concat(JSON.stringify(toLeopardJS({ from: "index" })), ";\n\n export const CostumeScale = ").concat(game.costumeScale, "; // Adjust this value to scale costumes\n\n // Wrap initialization in an async function to avoid temporal dead zone issues\n async function initProject() {\n try {\n // Use dynamic imports for sprite classes to avoid temporal dead zone\n const [\n ").concat(__spreadArray([game.stage], Object.values(game.sprites), true).map(function (target) { return "{ default: ".concat(target.name, " }"); })
|
|
66
|
+
.join(',\n '), "\n ] = await Promise.all([\n ").concat(__spreadArray([game.stage], Object.values(game.sprites), true).map(function (target) {
|
|
67
|
+
return "import(".concat(JSON.stringify(toLeopard_1.defaultOptions.getTargetURL({ name: target.name, from: "index" })), ")");
|
|
68
68
|
})
|
|
69
|
-
.join(
|
|
69
|
+
.join(',\n '), "\n ]);\n\n const stage = new Stage(").concat(JSON.stringify({ costumeNumber: game.stage.costumeNumber + 1, width: game.stage.width, height: game.stage.height }), ");\n\n const sprites = {\n ").concat(Object.values(game.sprites)
|
|
70
70
|
.map(function (sprite) {
|
|
71
71
|
return "".concat(sprite.name, ": new ").concat(sprite.name, "({").concat(Object.entries({
|
|
72
72
|
x: sprite.x,
|
|
@@ -91,4 +91,4 @@ function generateIndexJS(game) {
|
|
|
91
91
|
.join(",\n"), "\n };\n\n const project = new Project(stage, sprites, {\n frameRate: 30 // Set to 60 to make your project run faster\n });\n\n project.attach('#project');\n\n document.querySelector('#greenFlag')?.addEventListener('click', () => {\n project.greenFlag();\n });\n\n // Autoplay\n project.greenFlag();\n\n // Export for external access\n window.project = project;\n return project;\n } catch (error) {\n console.error('Error initializing Scratch project:', error);\n throw error;\n }\n }\n\n // Initialize when DOM is ready\n let project;\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', async () => {\n project = await initProject();\n });\n } else {\n initProject().then(p => { project = p; });\n }\n\n export default project;\n ");
|
|
92
92
|
}
|
|
93
93
|
exports.generateIndexJS = generateIndexJS;
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvZ2FtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOzs7Ozs7Ozs7Ozs7QUFFL0MscURBQXVGO0FBVXZGLDZEQUE2RDtBQUM3RCxtRkFBbUY7QUFFbkYsYUFBYTtBQUNiLGtJQUFrSTtBQUVsSSwrRkFBK0Y7QUFFL0YscURBQXFEO0FBQ3JELGNBQWM7QUFDZCxvQkFBb0I7QUFDcEIsK0hBQStIO0FBQy9ILFVBQVU7QUFDVixxQkFBcUI7QUFFckIsdUpBQXVKO0FBRXZKLHdCQUF3QjtBQUN4QixzQ0FBc0M7QUFDdEMsY0FBYztBQUNkLG9CQUFvQjtBQUNwQixvRUFBb0U7QUFDcEUsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwyQ0FBMkM7QUFDM0MsdURBQXVEO0FBQ3ZELHNDQUFzQztBQUN0Qyx5Q0FBeUM7QUFDekMsb0NBQW9DO0FBQ3BDLHVDQUF1QztBQUN2QyxvQkFBb0I7QUFDcEIsdURBQXVEO0FBQ3ZELGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFDdkMsNENBQTRDO0FBQzVDLGVBQWU7QUFDZixvRUFBb0U7QUFDcEUsNkJBQTZCO0FBQzdCLFVBQVU7QUFDVixzQkFBc0I7QUFDdEIsU0FBUztBQUVULG9EQUFvRDtBQUNwRCxtRUFBbUU7QUFDbkUsVUFBVTtBQUVWLGtDQUFrQztBQUVsQyw2RUFBNkU7QUFDN0UsNkJBQTZCO0FBQzdCLFVBQVU7QUFFVixrQkFBa0I7QUFDbEIsMkJBQTJCO0FBRTNCLDhCQUE4QjtBQUM5QixPQUFPO0FBQ1AsSUFBSTtBQUlKLFNBQWdCLGVBQWUsQ0FBQyxJQUFlO0lBQzdDLElBQU0sV0FBVyxHQUFHLElBQUEsd0NBQTRCLEVBQUMsMEJBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5RSxPQUFPLHlGQUNzRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLGtEQUUzRixJQUFJLENBQUMsWUFBWSx3U0FPdkMsZUFBQyxJQUFJLENBQUMsS0FBSyxHQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUNoRCxHQUFHLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxxQkFBYyxNQUFNLENBQUMsSUFBSSxPQUFJLEVBQTdCLENBQTZCLENBQUM7U0FDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQywwREFFaEIsZUFBQyxJQUFJLENBQUMsS0FBSyxHQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUNoRCxHQUFHLENBQUMsVUFBQSxNQUFNO1FBQ1QsT0FBQSxpQkFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBRztJQUE5RixDQUE4RixDQUMvRjtTQUNBLElBQUksQ0FBQyxlQUFlLENBQUMsOERBR00sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLHdEQUd6SSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDaEMsR0FBRyxDQUNGLFVBQUEsTUFBTTtRQUNKLE9BQUEsVUFBRyxNQUFNLENBQUMsSUFBSSxtQkFBUyxNQUFNLENBQUMsSUFBSSxlQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEQsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLGFBQWEsRUFBRSwrQkFBd0I7Z0JBQ3JDLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsSUFBSSxFQUFFLGFBQWE7YUFDcEIsQ0FBQyxNQUFNLENBQUMsYUFBYyxDQUFDLENBQ3BCO1lBQ0osYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQztZQUN2QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDO2FBQ0MsR0FBRyxDQUFDLFVBQUMsRUFBWTtnQkFBWCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQUE7WUFBTSxPQUFBLFVBQUcsR0FBRyxjQUFJLEtBQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBRTtRQUE3QixDQUE2QixDQUFDO2FBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBSTtJQWhCaEIsQ0FnQmdCLENBQ25CO1NBQ0EsSUFBSSxDQUFDLEtBQUssQ0FBQywwNkJBb0NmLENBQUM7QUFDSixDQUFDO0FBckZELDBDQXFGQyJ9
|
package/lib/models/sprite.js
CHANGED
|
@@ -11,7 +11,7 @@ function generateSpriteDefJS(sprite) {
|
|
|
11
11
|
var _a;
|
|
12
12
|
var toLeopardJS = (0, toLeopard_1.getPathsToRelativeOrAbsolute)(toLeopard_1.defaultOptions.leopardJSURL);
|
|
13
13
|
console.log("Generating def.js for sprite:", sprite.name);
|
|
14
|
-
return ["".concat(sprite.name, "/").concat(sprite.name, ".def.js"), "\n import { ".concat(sprite.isStage ? "Stage as StageBase" : "Sprite", ", Trigger, Watcher, Costume, Color, Project, Sound } from '").concat(toLeopardJS({ from: "target" }), "';\n\n
|
|
14
|
+
return ["".concat(sprite.name, "/").concat(sprite.name, ".def.js"), "\n import { ".concat(sprite.isStage ? "Stage as StageBase" : "Sprite", ", Trigger, Watcher, Costume, Color, Project, Sound } from '").concat(toLeopardJS({ from: "target" }), "';\n\n // Remove static imports and access them via global or passed parameters\n // The index.js will handle the dynamic loading and pass required values\n\n export default class ").concat(sprite.name, " extends ").concat(sprite.isStage ? "StageBase" : "Sprite", " {\n\n constructor(spriteOptions = {}) {\n super(spriteOptions);\n\n // Access values from the constructor options instead of imports\n const { initVars, behaviors, makeTriggers, CostumeScale = 1 } = spriteOptions._modules || {};\n const spriteScale = ").concat((_a = sprite.scale) !== null && _a !== void 0 ? _a : 1, ";\n\n this.costumes = [\n ").concat(Object.values(sprite.costumes)
|
|
15
15
|
.map(function (costume) {
|
|
16
16
|
var _a, _b;
|
|
17
17
|
return "new Costume({name: ".concat(JSON.stringify(costume.name), ", url: ").concat(JSON.stringify(toLeopard_1.defaultOptions.getAssetURL({
|
|
@@ -20,7 +20,7 @@ function generateSpriteDefJS(sprite) {
|
|
|
20
20
|
name: costume.name,
|
|
21
21
|
md5: costume.md5,
|
|
22
22
|
ext: costume.ext
|
|
23
|
-
})), ", center: {\n // x: costume.centerX,\n // y: costume.centerY\n x: ").concat(sprite.isStage ? 480 : (costume.wasSvg ? ((_a = costume.centerX) !== null && _a !== void 0 ? _a : 0) * 2 : costume.centerX), " * CostumeScale * spriteScale, // costume.centerX,\n y: ").concat(sprite.isStage ? 360 : (costume.wasSvg ? ((_b = costume.centerY) !== null && _b !== void 0 ? _b : 0) * 2 : costume.centerY), " * CostumeScale * spriteScale, // costume.centerY\n }, scale: 1 * CostumeScale * spriteScale})");
|
|
23
|
+
})), ", center: {\n // x: costume.centerX,\n // y: costume.centerY\n x: ").concat(sprite.isStage ? 480 : (costume.wasSvg ? ((_a = costume.centerX) !== null && _a !== void 0 ? _a : 0) * 2 : costume.centerX), " * (CostumeScale || 1) * spriteScale, // costume.centerX,\n y: ").concat(sprite.isStage ? 360 : (costume.wasSvg ? ((_b = costume.centerY) !== null && _b !== void 0 ? _b : 0) * 2 : costume.centerY), " * (CostumeScale || 1) * spriteScale, // costume.centerY\n }, scale: 1 * (CostumeScale || 1) * spriteScale})");
|
|
24
24
|
})
|
|
25
25
|
.join(",\n"), "\n ];\n\n this.sounds = [\n ").concat(Object.values(sprite.sounds).map(function (sound) {
|
|
26
26
|
return "new Sound(".concat(JSON.stringify(sound.name), ", ").concat(JSON.stringify(toLeopard_1.defaultOptions.getAssetURL({
|
|
@@ -31,8 +31,65 @@ function generateSpriteDefJS(sprite) {
|
|
|
31
31
|
ext: sound.ext
|
|
32
32
|
})), ")");
|
|
33
33
|
})
|
|
34
|
-
.join(",\n"), "\n ];\n\n initVars(this);\n
|
|
34
|
+
.join(",\n"), "\n ];\n\n // Only initialize if modules are provided\n if (initVars && makeTriggers) {\n initVars(this);\n this.triggers = makeTriggers(this, Trigger);\n }\n\n // Apply behaviors if provided\n if (behaviors) {\n Object.assign(this, behaviors);\n }\n }\n }\n ")
|
|
35
35
|
];
|
|
36
36
|
}
|
|
37
37
|
exports.generateSpriteDefJS = generateSpriteDefJS;
|
|
38
|
-
|
|
38
|
+
// export function generateSpriteDefJS(sprite: SpriteModel): [string, string] {
|
|
39
|
+
// const toLeopardJS = getPathsToRelativeOrAbsolute(defaultOptions.leopardJSURL);
|
|
40
|
+
// console.log("Generating def.js for sprite:", sprite.name);
|
|
41
|
+
// return [`${sprite.name}/${sprite.name}.def.js`,
|
|
42
|
+
// `
|
|
43
|
+
// import { ${sprite.isStage ? "Stage as StageBase" : "Sprite"
|
|
44
|
+
// }, Trigger, Watcher, Costume, Color, Project, Sound } from '${toLeopardJS({ from: "target" })}';
|
|
45
|
+
// import { initVars, behaviors, makeTriggers } from './${sprite.name}/${sprite.name}.js';
|
|
46
|
+
// import { CostumeScale } from './index.js';
|
|
47
|
+
// const spriteScale = ${sprite.scale ?? 1};
|
|
48
|
+
// export default class ${sprite.name} extends ${sprite.isStage ? "StageBase" : "Sprite"} {
|
|
49
|
+
// constructor(...args) {
|
|
50
|
+
// super(...args);
|
|
51
|
+
// this.costumes = [
|
|
52
|
+
// ${Object.values(sprite.costumes)
|
|
53
|
+
// .map(
|
|
54
|
+
// costume =>
|
|
55
|
+
// `new Costume({name: ${JSON.stringify(costume.name)}, url: ${JSON.stringify(
|
|
56
|
+
// defaultOptions.getAssetURL({
|
|
57
|
+
// type: "costume",
|
|
58
|
+
// target: sprite.name,
|
|
59
|
+
// name: costume.name,
|
|
60
|
+
// md5: costume.md5,
|
|
61
|
+
// ext: costume.ext
|
|
62
|
+
// })
|
|
63
|
+
// )}, center: {
|
|
64
|
+
// // x: costume.centerX,
|
|
65
|
+
// // y: costume.centerY
|
|
66
|
+
// x: ${sprite.isStage ? 480 : (costume.wasSvg ? (costume.centerX ?? 0) * 2 : costume.centerX)} * CostumeScale * spriteScale, // costume.centerX,
|
|
67
|
+
// y: ${sprite.isStage ? 360 : (costume.wasSvg ? (costume.centerY ?? 0) * 2 : costume.centerY)} * CostumeScale * spriteScale, // costume.centerY
|
|
68
|
+
// }, scale: 1 * CostumeScale * spriteScale})`
|
|
69
|
+
// )
|
|
70
|
+
// .join(",\n")}
|
|
71
|
+
// ];
|
|
72
|
+
// this.sounds = [
|
|
73
|
+
// ${Object.values(sprite.sounds).map(
|
|
74
|
+
// sound =>
|
|
75
|
+
// `new Sound(${JSON.stringify(sound.name)}, ${JSON.stringify(
|
|
76
|
+
// defaultOptions.getAssetURL({
|
|
77
|
+
// type: "sound",
|
|
78
|
+
// target: sprite.name,
|
|
79
|
+
// name: sound.name,
|
|
80
|
+
// md5: sound.md5,
|
|
81
|
+
// ext: sound.ext
|
|
82
|
+
// })
|
|
83
|
+
// )})`
|
|
84
|
+
// )
|
|
85
|
+
// .join(",\n")}
|
|
86
|
+
// ];
|
|
87
|
+
// initVars(this);
|
|
88
|
+
// this.triggers = makeTriggers(this, Trigger);
|
|
89
|
+
// }
|
|
90
|
+
// }
|
|
91
|
+
// Object.assign(${sprite.name}.prototype, behaviors);
|
|
92
|
+
// `
|
|
93
|
+
// ]
|
|
94
|
+
// }
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy9zcHJpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVEQUF1RDs7O0FBRXZELHFEQUF1RjtBQXVCdkYsU0FBZ0IsbUJBQW1CLENBQUMsTUFBbUI7SUFDckQsT0FBTyxDQUFDLFVBQUcsTUFBTSxDQUFDLElBQUksY0FBSSxNQUFNLENBQUMsSUFBSSxRQUFLLEVBQ3hDLDhXQWdCRCxDQUFDLENBQUE7QUFDSixDQUFDO0FBbkJELGtEQW1CQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLE1BQW1COztJQUNyRCxJQUFNLFdBQVcsR0FBRyxJQUFBLHdDQUE0QixFQUFDLDBCQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUQsT0FBTyxDQUFDLFVBQUcsTUFBTSxDQUFDLElBQUksY0FBSSxNQUFNLENBQUMsSUFBSSxZQUFTLEVBQzlDLDJCQUNlLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxRQUFRLHdFQUNELFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxnTkFLbEUsTUFBTSxDQUFDLElBQUksc0JBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLG9UQU8zRCxNQUFBLE1BQU0sQ0FBQyxLQUFLLG1DQUFJLENBQUMsNkRBR2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUN6QyxHQUFHLENBQ0YsVUFBQSxPQUFPOztZQUNMLE9BQUEsNkJBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBVSxJQUFJLENBQUMsU0FBUyxDQUN4RSwwQkFBYyxDQUFD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
|