sb-edit-custom 0.20.147 → 0.20.149
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/cli/index.js +0 -0
- package/lib/models/game.js +14 -3
- package/lib/models/sprite.js +32 -13
- package/package.json +1 -1
package/lib/cli/index.js
CHANGED
|
File without changes
|
package/lib/models/game.js
CHANGED
|
@@ -14,8 +14,19 @@ function generateAssetRegistryJS(game) {
|
|
|
14
14
|
const spriteScale = sprite.scale ?? 1;
|
|
15
15
|
const costumeEntries = Object.values(sprite.costumes)
|
|
16
16
|
.map(costume => {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
// Use the costume's own rotation center for both stages and
|
|
18
|
+
// sprites. The Stage center used to be hard-coded to (480, 360),
|
|
19
|
+
// which broke any backdrop whose stored center was not those exact
|
|
20
|
+
// physical-pixel values: a logical-size 480x360 backdrop would be
|
|
21
|
+
// anchored at (480, 360) and only fill the upper-left quadrant.
|
|
22
|
+
// Falling back to (240, 180) for a missing stage center keeps
|
|
23
|
+
// legacy default backdrops centered.
|
|
24
|
+
const centerX = sprite.isStage
|
|
25
|
+
? (costume.centerX ?? 240)
|
|
26
|
+
: (costume.centerX ?? 0);
|
|
27
|
+
const centerY = sprite.isStage
|
|
28
|
+
? (costume.centerY ?? 180)
|
|
29
|
+
: (costume.centerY ?? 0);
|
|
19
30
|
const fileKey = `${costume.name}.${costume.ext}`;
|
|
20
31
|
// Pass resolution explicitly when the costume model declares one,
|
|
21
32
|
// otherwise omit so Leopard falls back to its bitmap default (2).
|
|
@@ -208,4 +219,4 @@ function generateConstantsFile(game) {
|
|
|
208
219
|
// export default project;
|
|
209
220
|
// `;
|
|
210
221
|
// }
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvZ2FtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQWdCL0MsMERBd0VDO0FBRUQsMENBcUZDO0FBRUQsc0RBS0M7QUFwTEQsNkRBR21DO0FBQ25DLHVEQUFnRDtBQVVoRCxTQUFnQix1QkFBdUIsQ0FBQyxJQUFlO0lBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUEsMkNBQTRCLEVBQUMsNkJBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUU3RSxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRS9ELE1BQU0sZUFBZSxHQUFHLFVBQVU7U0FDL0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ1osTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDckMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ2xELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNiLDREQUE0RDtZQUM1RCxpRUFBaUU7WUFDakUsbUVBQW1FO1lBQ25FLGtFQUFrRTtZQUNsRSxnRUFBZ0U7WUFDaEUsOERBQThEO1lBQzlELHFDQUFxQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTztnQkFDNUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU87Z0JBQzVCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFD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
|
package/lib/models/sprite.js
CHANGED
|
@@ -36,18 +36,37 @@ function generateSpriteDefJS(sprite) {
|
|
|
36
36
|
super(...args);
|
|
37
37
|
this.costumes = [
|
|
38
38
|
${Object.values(sprite.costumes)
|
|
39
|
-
.map(costume =>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
39
|
+
.map(costume => {
|
|
40
|
+
// Use the costume's own rotation center. Previously the
|
|
41
|
+
// Stage's center was hard-coded to (480, 360) which broke
|
|
42
|
+
// edited backdrops: a logical-size 480x360 backdrop would
|
|
43
|
+
// be anchored at (480,360) and only fill the upper-left
|
|
44
|
+
// quadrant of the stage. Falling back to (240,180) for a
|
|
45
|
+
// missing stage center keeps default backdrops centered.
|
|
46
|
+
const centerX = sprite.isStage
|
|
47
|
+
? (costume.centerX ?? 240)
|
|
48
|
+
: (costume.centerX ?? 0);
|
|
49
|
+
const centerY = sprite.isStage
|
|
50
|
+
? (costume.centerY ?? 180)
|
|
51
|
+
: (costume.centerY ?? 0);
|
|
52
|
+
// Pass bitmapResolution through so Leopard renders bitmap
|
|
53
|
+
// costumes at the right size (defaults to 2 if absent).
|
|
54
|
+
const resolution = typeof costume.bitmapResolution === "number" &&
|
|
55
|
+
(costume.bitmapResolution === 1 ||
|
|
56
|
+
costume.bitmapResolution === 2)
|
|
57
|
+
? costume.bitmapResolution
|
|
58
|
+
: 2;
|
|
59
|
+
return `new Costume({name: ${JSON.stringify(costume.name)}, url: ${JSON.stringify(toLeopard_js_1.defaultOptions.getAssetURL({
|
|
60
|
+
type: "costume",
|
|
61
|
+
target: sprite.name,
|
|
62
|
+
name: costume.name,
|
|
63
|
+
md5: costume.md5,
|
|
64
|
+
ext: costume.ext,
|
|
65
|
+
}))}, center: {
|
|
66
|
+
x: ${centerX} * CostumeScale * spriteScale,
|
|
67
|
+
y: ${centerY} * CostumeScale * spriteScale,
|
|
68
|
+
}, scale: 1 * CostumeScale * spriteScale, resolution: ${resolution}})`;
|
|
69
|
+
})
|
|
51
70
|
.join(",\n")}
|
|
52
71
|
];
|
|
53
72
|
|
|
@@ -82,4 +101,4 @@ function generateSpriteDefJS(sprite) {
|
|
|
82
101
|
`,
|
|
83
102
|
];
|
|
84
103
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy9zcHJpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVEQUF1RDs7QUEyQ3ZELGtEQWFDO0FBRUQsa0RBOEZDO0FBdEpELDZEQUdtQztBQXNDbkMsU0FBZ0IsbUJBQW1CLENBQUMsTUFBbUI7SUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBQSwyQ0FBNEIsRUFBQyw2QkFBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRTdFLE9BQU87UUFDTCxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksS0FBSztRQUNsQztZQUNRLE1BQU0sQ0FBQyxJQUFJOzs7OztHQUtwQjtLQUNBLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsTUFBbUI7SUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBQSwyQ0FBNEIsRUFBQyw2QkFBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRTdFLE9BQU87UUFDTCxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksU0FBUztRQUN0QztpQkFFSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsUUFDMUM7OzZEQUV1RCxNQUFNLENBQUMsSUFBSTs7Ozs0QkFJNUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDOzs2QkFFaEIsTUFBTSxDQUFDLElBQUksWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVE7Ozs7O2dCQUszRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDN0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2Isd0RBQXdEO1lBQ3hELDBEQUEwRDtZQUMxRCwwREFBMEQ7WUFDMUQsd0RBQXdEO1lBQ3hELHlEQUF5RDtZQUN6RCx5REFBeUQ7WUFDekQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU87Z0JBQzVCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDO2dCQUMxQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQzFCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPO2dCQUM1QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztnQkFDMUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUMxQiwwREFBMEQ7WUFDMUQsd0RBQXdEO1lBQ3hELE1BQU0sVUFBVSxHQUNkLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixLQUFLLFFBQVE7Z0JBQzVDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixLQUFLLENBQUM7b0JBQzdCLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO2dCQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ1AsT0FBTyxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FDL0UsNkJBQWMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDbkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ2hCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRzthQUNqQixDQUFDLENBQ0g7bUJBQ0EsT0FBTzttQkFDUCxPQUFPO29FQUMwQyxVQUFVLElBQUksQ0FBQTtRQUNsRSxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDOzs7O2dCQUlaLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUMzQixHQUFHLENBQ0YsS0FBSyxDQUFDLEVBQUUsQ0FDTixhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQ3hELDZCQUFjLENBQUMsV0FBVyxDQUFDO1lBQ3pCLElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ25CLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7U0FDZixDQUFDLENBQ0gsR0FBRyxDQUNQO2FBQ0EsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs0QkFJQSxNQUFNLENBQUMsSUFBSTs7Ozs7Ozs7Ozs7Ozs7O0tBZWxDO0tBQ0YsQ0FBQTtBQUNILENBQUMifQ==
|