Implement dependencies system

Update PatternSelector(v0.2.0) [GMSJ01]
Update metadata to use drawText [GMSJ01]
This commit is contained in:
sup39 2022-03-24 16:55:08 +09:00
parent 8943d44f4d
commit c8410d8b2c
5 changed files with 106 additions and 190 deletions

265
Codes.xml
View file

@ -2865,9 +2865,10 @@
<title lang="de-CH">Position/Winkel/Geschw. Display</title> <title lang="de-CH">Position/Winkel/Geschw. Display</title>
<title lang="fr-FR">Affichage de position/angle/vitesse</title> <title lang="fr-FR">Affichage de position/angle/vitesse</title>
<title lang="ja-JP">位置/角度/速度表示</title> <title lang="ja-JP">位置/角度/速度表示</title>
<author>Noki Doki</author> <author>Noki Doki, sup39(サポミク)</author>
<version>1.3</version> <version>1.4</version>
<date>Oct 28, 2019</date> <date>Mar 24, 2022</date>
<dependencies version="GMSJ01">drawText</dependencies>
<description lang="en-US"> <description lang="en-US">
Shows Mario's position, angle and speed at any given time. Shows Mario's position, angle and speed at any given time.
@ -2958,57 +2959,23 @@
60000000 00000000 60000000 00000000
</source> </source>
<source version="GMSJ01"> <source version="GMSJ01">
060F9B64 00000010 04206734 495F38CD
49700515 60000000 077FA000 000000B5
60000000 60000000 9421FFF0 7C0802A6
040ECE3C 4970D1C5 90010014 93E1000C
04206734 495F39E9 7C7F1B78 4A83B215
077FA000 000001E8 3D208041 8149A378
9421FFE0 7C0802A6 3D008180 38600010
90010024 93E1001C 3908A074 C0AA00A8
4A91239D 38E00200 38E0FFFF C08A00B0
38C00320 38A0FFD8 38C0FFFF A12A0096
3880000A 38610008 38A00014 C06A0018
4A8191F5 814D97F8 388000C8 C04A0014
3FE08180 3BFFA1EC C02A0010 4CC63242
39200000 39000002 4BFF61E1 80010014
3CE08180 38E7A164 7FE3FB78 83E1000C
80CA0048 38A10008 7C0803A6 38210010
38800000 7FE3FB78 4A83B1B8 5820506F
4A81F8AD 39200001
913F01B0 80010024
7C0803A6 83E1001C
38210020 4E800020
9421FFE8 7C0802A6
9001001C 93A1000C
93C10010 93E10014
7C7F1B78 81230000
83A90064 3D208180
8129A39C 2F890000
409E002C 7FE3FB78
7FA903A6 4E800421
8001001C 7C0803A6
83A1000C 83C10010
83E10014 38210018
4E800020 3D208040
6129A378 83C90000
3C608180 3863A1EC
4A81FC35 C0BE00A8
C09E00B0 A0DE0096
C07E0018 C05E0014
C03E0010 3CA08180
38A5A164 38800080
4CC63242 4A889FB1
4BFFFF94 9421FFF0
7C0802A6 90010014
93E1000C 7C7F1B78
4A83B0F9 38E00081
7FE6FB78 38A00000
38800000 3C608180
3863A1EC 4A81ED19
80010014 7C0803A6
83E1000C 38210010
4E800020 5820506F
7320252E 30660A59 7320252E 30660A59
20506F73 20252E30 20506F73 20252E30
660A5A20 506F7320 660A5A20 506F7320
@ -3016,19 +2983,7 @@
6C652025 68750A48 6C652025 68750A48
20537064 20252E32 20537064 20252E32
660A5620 53706420 660A5620 53706420
252E3266 20202020 252E3266 00000000
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202020 20202020
20202000 00000000
C20FA0F8 00000003
38600000 3D808180
906CA39C 807F0040
60000000 00000000
</source> </source>
<source version="GMSJ0A"> <source version="GMSJ0A">
06285FBC 00000010 06285FBC 00000010
@ -3183,9 +3138,10 @@
<title lang="de-CH">Geschwindigkeits-Display</title> <title lang="de-CH">Geschwindigkeits-Display</title>
<title lang="fr-FR">Affichage de vitesse</title> <title lang="fr-FR">Affichage de vitesse</title>
<title lang="ja-JP">速度表示</title> <title lang="ja-JP">速度表示</title>
<author>Noki Doki</author> <author>Noki Doki, sup39(サポミク)</author>
<version>1.4</version> <version>1.5</version>
<date>Nov 28, 2021</date> <date>Mar 24, 2022</date>
<dependencies version="GMSJ01">drawText</dependencies>
<description lang="en-US"> <description lang="en-US">
Shows Mario's speed at any given time. Shows Mario's speed at any given time.
@ -3264,65 +3220,24 @@
60000000 00000000 60000000 00000000
</source> </source>
<source version="GMSJ01"> <source version="GMSJ01">
060F9B64 00000010 04206734 495F38CD
49700515 60000000 077FA000 0000007C
60000000 60000000 9421FFF0 7C0802A6
040ECE3C 4970D1C5 90010014 93E1000C
04206734 495F39D9 7C7F1B78 4A83B215
077FA000 00000188 3D208041 8129A378
9421FFE0 7C0802A6 3D008180 38600010
90010024 93E1001C 3908A064 C04900A8
4A91239D 38E00200 38E0FFFF C02900B0
38C00320 38A0FFD8 38C0FFFF 38A00014
3880000A 38610008 388000F0 4CC63242
4A8191F5 814D97F8 4BFF61F1 80010014
3FE08180 3BFFA214 7FE3FB78 83E1000C
39200000 39000002 7C0803A6 38210010
3CE08180 38E7A154 4A83B1C8 48205370
80CA0048 38A10008
38800000 7FE3FB78
4A81F8AD 39200001
913F01B0 80010024
7C0803A6 83E1001C
38210020 4E800020
9421FFE8 7C0802A6
9001001C 93C10010
93E10014 7C7F1B78
81230000 83C90064
3D208180 8129A3C4
2C090000 40820028
7FE3FB78 7FC903A6
4E800421 8001001C
7C0803A6 83C10010
83E10014 38210018
4E800020 93A1000C
3D208040 6129A378
83A90000 3C608180
3863A214 4A81FC39
C05D00A8 C03D00B0
3CA08180 38A5A154
38800030 4CC63242
4A889FC5 83A1000C
4BFFFFA0 9421FFF0
7C0802A6 90010014
93E1000C 7C7F1B78
4A83B109 38E00081
7FE6FB78 38A00000
38800000 3C608180
3863A214 4A81ED29
80010014 7C0803A6
83E1000C 38210010
4E800020 48205370
6420252E 32660A56 6420252E 32660A56
20537064 20252E32 20537064 20252E32
66202020 20202020 66000000 00000000
20202020 20202020
20202020 20202020
20202000 00000000
C20FA0F8 00000003
38600000 3D808180
906CA3C4 807F0040
60000000 00000000
</source> </source>
<source version="GMSJ0A"> <source version="GMSJ0A">
06285FBC 00000010 06285FBC 00000010
@ -3844,9 +3759,10 @@
<presets>recommended</presets> <presets>recommended</presets>
<title lang="en-US">Pattern Selector</title> <title lang="en-US">Pattern Selector</title>
<title lang="ja-JP">パターン選択</title> <title lang="ja-JP">パターン選択</title>
<author>sup39[サポミク]</author> <author>sup39(サポミク)</author>
<version>0.1.3</version> <version>0.2.0</version>
<date>Feb 06, 2022</date> <date>Mar 04, 2022</date>
<dependencies>drawText</dependencies>
<description lang="en-US"> <description lang="en-US">
![Preview](/img/PatternSelector/preview.jpg) ![Preview](/img/PatternSelector/preview.jpg)
@ -3928,44 +3844,6 @@
%object[]{data="/img/PatternSelector/PV1-3.svg"} %object[]{data="/img/PatternSelector/PV1-3.svg"}
</description> </description>
<source version="GMSJ01"> <source version="GMSJ01">
<!-- drawText -->
077F0238 00000114
9421FED8 7C0802A6
BF810118 7C7F1B78
9001012C 7C9E2378
90C100B8 7CBD2B78
90E100BC 7D1C4378
912100C0 914100C4
40860024 D82100C8
D84100D0 D86100D8
D88100E0 D8A100E8
D8C100F0 D8E100F8
D9010100 39200600
390100BC B12100A0
39210130 912100A4
392100A8 912100A8
808D97F8 38E100B8
7FA6EB78 38A00000
38610008 6FDE8000
4A826AF5 3D204330
91210108 3D40817F
93C1010C 6FFF8000
C00A0348 38610070
C9810108 91210110
3D20817F 93E10114
FC4C0028 C0690344
C9810110 93A10064
FC2C0028 93A10060
4A8A43E9 38800000
38610070 4A8BD419
38C100A0 7F85E378
388000FF 38610008
4A826951 38610008
38210128 BB81FFF0
80010004 7C0803A6
4A826AEC 00000000
59800004 00000000
0420675C 495F2A79 0420675C 495F2A79
0424F32C 495A9CED 0424F32C 495A9CED
077F9018 000003BA 077F9018 000003BA
@ -4114,4 +3992,55 @@
0402BF98 60000000 0402BF98 60000000
</source> </source>
</code> </code>
<code>
<id>drawText</id>
<category>lib</category>
<title lang="en-US">drawText</title>
<author>sup39(サポミク)</author>
<version>0.1.3</version>
<date>Mar 04, 2022</date>
<description lang="en-US">
```c
void drawText(int x, int y, int fontSize, uint32_t colorTop, uint32_t colorBot, const char *fmt, ...);
```
</description>
<source version="GMSJ01">
077F0238 00000114
9421FED8 7C0802A6
BF810118 7C7F1B78
9001012C 7C9E2378
90C100B8 7CBD2B78
90E100BC 7D1C4378
912100C0 914100C4
40860024 D82100C8
D84100D0 D86100D8
D88100E0 D8A100E8
D8C100F0 D8E100F8
D9010100 39200600
390100BC B12100A0
39210130 912100A4
392100A8 912100A8
808D97F8 38E100B8
7FA6EB78 38A00000
38610008 6FDE8000
4A826AF5 3D204330
91210108 3D40817F
93C1010C 6FFF8000
C00A0348 38610070
C9810108 91210110
3D20817F 93E10114
FC4C0028 C0690344
C9810110 93A10064
FC2C0028 93A10060
4A8A43E9 38800000
38610070 4A8BD419
38C100A0 7F85E378
388000FF 38610008
4A826951 38610008
38210128 BB81FFF0
80010004 7C0803A6
4A826AEC 00000000
59800004 00000000
</source>
</code>
</codes> </codes>

20
package-lock.json generated
View file

@ -17,7 +17,6 @@
"@vuepress/plugin-back-to-top": "1.9.7", "@vuepress/plugin-back-to-top": "1.9.7",
"@vuepress/plugin-medium-zoom": "1.9.7", "@vuepress/plugin-medium-zoom": "1.9.7",
"jsdom": "19.0.0", "jsdom": "19.0.0",
"markdown-it-attrs": "4.1.3",
"pre-commit": "1.2.2", "pre-commit": "1.2.2",
"prettier": "2.6.0", "prettier": "2.6.0",
"serve": "^13.0.2", "serve": "^13.0.2",
@ -9530,18 +9529,6 @@
"markdown-it": "*" "markdown-it": "*"
} }
}, },
"node_modules/markdown-it-attrs": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.3.tgz",
"integrity": "sha512-d5yg/lzQV2KFI/4LPsZQB3uxQrf0/l2/RnMPCPm4lYLOZUSmFlpPccyojnzaHkfQpAD8wBHfnfUW0aMhpKOS2g==",
"dev": true,
"engines": {
"node": ">=6"
},
"peerDependencies": {
"markdown-it": ">= 9.0.0 < 13.0.0"
}
},
"node_modules/markdown-it-chain": { "node_modules/markdown-it-chain": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz", "resolved": "https://registry.npmjs.org/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz",
@ -23972,13 +23959,6 @@
"dev": true, "dev": true,
"requires": {} "requires": {}
}, },
"markdown-it-attrs": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.3.tgz",
"integrity": "sha512-d5yg/lzQV2KFI/4LPsZQB3uxQrf0/l2/RnMPCPm4lYLOZUSmFlpPccyojnzaHkfQpAD8wBHfnfUW0aMhpKOS2g==",
"dev": true,
"requires": {}
},
"markdown-it-chain": { "markdown-it-chain": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz", "resolved": "https://registry.npmjs.org/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz",

View file

@ -25,7 +25,6 @@
"@vuepress/plugin-back-to-top": "1.9.7", "@vuepress/plugin-back-to-top": "1.9.7",
"@vuepress/plugin-medium-zoom": "1.9.7", "@vuepress/plugin-medium-zoom": "1.9.7",
"jsdom": "19.0.0", "jsdom": "19.0.0",
"markdown-it-attrs": "4.1.3",
"pre-commit": "1.2.2", "pre-commit": "1.2.2",
"prettier": "2.6.0", "prettier": "2.6.0",
"serve": "^13.0.2", "serve": "^13.0.2",

View file

@ -47,7 +47,7 @@ const validateXML = (xmlString) => {
if (!codeCategory || !codeCategory.textContent) if (!codeCategory || !codeCategory.textContent)
throw new Error(`Missing code category in ${codeTitle.textContent}`); throw new Error(`Missing code category in ${codeTitle.textContent}`);
if (!codeCategories.map((c) => c.identifier).includes(codeCategory.textContent)) if (!['lib', ...codeCategories.map((c) => c.identifier)].includes(codeCategory.textContent))
throw new Error(`Invalid code category for ${codeTitle.textContent}`); throw new Error(`Invalid code category for ${codeTitle.textContent}`);
const codePresets = codes[i].querySelector('presets'); const codePresets = codes[i].querySelector('presets');
@ -279,6 +279,7 @@ const parseXml = (xmlString, gameVersion = null) => {
return codes return codes
.map((code) => ({ .map((code) => ({
id: code.querySelector('id')?.textContent ?? null,
author: readTextNode(code, 'author'), author: readTextNode(code, 'author'),
title: localizeNode(code, 'title'), title: localizeNode(code, 'title'),
description: localizeMarkdown(code, 'description'), description: localizeMarkdown(code, 'description'),
@ -288,6 +289,9 @@ const parseXml = (xmlString, gameVersion = null) => {
presets: readPresetList(code, gameVersion), presets: readPresetList(code, gameVersion),
category: readTextNode(code, 'category'), category: readTextNode(code, 'category'),
dependsOn: code.querySelector('depends-on')?.textContent ?? null, dependsOn: code.querySelector('depends-on')?.textContent ?? null,
dependencies:
code.querySelector('dependencies:not([version])')?.textContent.split(',') ??
code.querySelector(`dependencies[version=${gameVersion}]`)?.textContent.split(',') ?? [],
})) }))
.filter((code) => code.source != null); .filter((code) => code.source != null);
}; };

View file

@ -105,6 +105,10 @@ export default {
}, },
emitChangeEvent() { emitChangeEvent() {
const selectedCodes = this.availableCodes.filter((c) => c.selected); const selectedCodes = this.availableCodes.filter((c) => c.selected);
// add dependencies
const deps = new Set(selectedCodes.flatMap(c => c.dependencies));
selectedCodes.push(...this.codes.filter(c => deps.has(c.id)));
// emit
this.onSelectionChanged(selectedCodes); this.onSelectionChanged(selectedCodes);
}, },
loadPreset(identifier) { loadPreset(identifier) {