maidraw 0.10.5 → 0.11.0

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.
Files changed (78) hide show
  1. package/assets/themes/chunithm/chart/common/versionless/logo/jpn/240.png +0 -0
  2. package/assets/themes/chunithm/chart/jp/verse/manifest.json +8 -8
  3. package/assets/themes/ongeki/{jp → best/jp}/brightMemoryLandscape/classic/manifest.json +2 -2
  4. package/assets/themes/ongeki/{jp → best/jp}/brightMemoryLandscape/refresh/manifest.json +2 -2
  5. package/assets/themes/ongeki/{jp → best/jp}/refreshLandscape/classic/manifest.json +2 -2
  6. package/assets/themes/ongeki/{jp → best/jp}/refreshLandscape/refresh/manifest.json +2 -2
  7. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/100.png +0 -0
  8. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/105.png +0 -0
  9. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/110.png +0 -0
  10. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/115.png +0 -0
  11. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/120.png +0 -0
  12. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/125.png +0 -0
  13. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/130.png +0 -0
  14. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/135.png +0 -0
  15. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/140.png +0 -0
  16. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/145.png +0 -0
  17. package/assets/themes/ongeki/chart/common/versionless/logo/jpn/150.png +0 -0
  18. package/assets/themes/ongeki/chart/jp/refresh/manifest.json +151 -0
  19. package/dist/chu/lib/adapter/lxns/index.d.ts +18 -8
  20. package/dist/chu/lib/adapter/lxns/index.js +15 -16
  21. package/dist/chu/lib/adapter/lxns/index.js.map +1 -1
  22. package/dist/chu/painter/chart/index.d.ts +3 -39
  23. package/dist/chu/painter/index.d.ts +3 -39
  24. package/dist/chu/painter/index.js +47 -79
  25. package/dist/chu/painter/index.js.map +1 -1
  26. package/dist/geki/index.d.ts +2 -0
  27. package/dist/geki/index.js +2 -0
  28. package/dist/geki/index.js.map +1 -1
  29. package/dist/geki/lib/adapter/index.d.ts +7 -0
  30. package/dist/geki/lib/adapter/index.js.map +1 -1
  31. package/dist/geki/lib/adapter/kamaiTachi/index.d.ts +7 -0
  32. package/dist/geki/lib/adapter/kamaiTachi/index.js +49 -0
  33. package/dist/geki/lib/adapter/kamaiTachi/index.js.map +1 -1
  34. package/dist/geki/lib/database.d.ts +132 -0
  35. package/dist/geki/lib/database.js +87 -12
  36. package/dist/geki/lib/database.js.map +1 -1
  37. package/dist/geki/lib/util.d.ts +99 -0
  38. package/dist/geki/lib/util.js +255 -0
  39. package/dist/geki/lib/util.js.map +1 -0
  40. package/dist/geki/painter/chart/index.d.ts +156 -0
  41. package/dist/geki/painter/chart/index.js +128 -0
  42. package/dist/geki/painter/chart/index.js.map +1 -0
  43. package/dist/geki/painter/index.d.ts +92 -0
  44. package/dist/geki/painter/index.js +810 -0
  45. package/dist/geki/painter/index.js.map +1 -1
  46. package/dist/lib/painter.js +2 -0
  47. package/dist/lib/painter.js.map +1 -1
  48. package/dist/mai/painter/chart/index.d.ts +4 -41
  49. package/dist/mai/painter/index.d.ts +4 -41
  50. package/dist/mai/painter/index.js +48 -81
  51. package/dist/mai/painter/index.js.map +1 -1
  52. package/package.json +1 -1
  53. /package/assets/themes/ongeki/{common → best/common}/brightmemory/background.png +0 -0
  54. /package/assets/themes/ongeki/{common → best/common}/brightmemory/logo.png +0 -0
  55. /package/assets/themes/ongeki/{common → best/common}/refresh/background.png +0 -0
  56. /package/assets/themes/ongeki/{common → best/common}/refresh/logo.png +0 -0
  57. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/a.png +0 -0
  58. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/aa.png +0 -0
  59. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/aaa.png +0 -0
  60. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/b.png +0 -0
  61. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/bb.png +0 -0
  62. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/bbb.png +0 -0
  63. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/c.png +0 -0
  64. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/d.png +0 -0
  65. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/s.png +0 -0
  66. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/ss.png +0 -0
  67. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/sss.png +0 -0
  68. /package/assets/themes/ongeki/{common → best/common}/versionless/achievement/sssp.png +0 -0
  69. /package/assets/themes/ongeki/{common → best/common}/versionless/emote.png +0 -0
  70. /package/assets/themes/ongeki/{common → best/common}/versionless/icon.png +0 -0
  71. /package/assets/themes/ongeki/{common → best/common}/versionless/milestone/ab.png +0 -0
  72. /package/assets/themes/ongeki/{common → best/common}/versionless/milestone/abp.png +0 -0
  73. /package/assets/themes/ongeki/{common → best/common}/versionless/milestone/fb.png +0 -0
  74. /package/assets/themes/ongeki/{common → best/common}/versionless/milestone/fc.png +0 -0
  75. /package/assets/themes/ongeki/{common → best/common}/versionless/numberMap.png +0 -0
  76. /package/assets/themes/ongeki/{common → best/common}/versionless/userplateAF2025.png +0 -0
  77. /package/assets/themes/ongeki/{common → best/common}/versionless/userplateIchigeki.png +0 -0
  78. /package/assets/themes/ongeki/{common → best/common}/versionless/void.png +0 -0
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OngekiUtil = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const util_1 = __importDefault(require("../../lib/util"));
9
+ const type_1 = require("../type");
10
+ var OngekiUtil;
11
+ (function (OngekiUtil) {
12
+ class Version {
13
+ static ONGEKI = {
14
+ name: "オンゲキ",
15
+ gameVersion: {
16
+ major: 1,
17
+ minor: 0,
18
+ },
19
+ };
20
+ static ONGEKI_PLUS = {
21
+ name: "オンゲキ PLUS",
22
+ gameVersion: {
23
+ major: 1,
24
+ minor: 10,
25
+ },
26
+ };
27
+ static SUMMER = {
28
+ name: "オンゲキ SUMMER",
29
+ gameVersion: {
30
+ major: 1,
31
+ minor: 10,
32
+ },
33
+ };
34
+ static SUMMER_PLUS = {
35
+ name: "オンゲキ SUMMER PLUS",
36
+ gameVersion: {
37
+ major: 1,
38
+ minor: 15,
39
+ },
40
+ };
41
+ static RED = {
42
+ name: "オンゲキ R.E.D.",
43
+ gameVersion: {
44
+ major: 1,
45
+ minor: 20,
46
+ },
47
+ };
48
+ static RED_PLUS = {
49
+ name: "オンゲキ R.E.D. PLUS",
50
+ gameVersion: {
51
+ major: 1,
52
+ minor: 25,
53
+ },
54
+ };
55
+ static BRIGHT = {
56
+ name: "オンゲキ bright",
57
+ gameVersion: {
58
+ major: 1,
59
+ minor: 30,
60
+ },
61
+ };
62
+ static BRIGHT_MEMORY_ACT1 = {
63
+ name: "オンゲキ bright MEMORY Act.1",
64
+ gameVersion: {
65
+ major: 1,
66
+ minor: 35,
67
+ },
68
+ };
69
+ static BRIGHT_MEMORY_ACT2 = {
70
+ name: "オンゲキ bright MEMORY Act.2",
71
+ gameVersion: {
72
+ major: 1,
73
+ minor: 40,
74
+ },
75
+ };
76
+ static BRIGHT_MEMORY_ACT3 = {
77
+ name: "オンゲキ bright MEMORY Act.3",
78
+ gameVersion: {
79
+ major: 1,
80
+ minor: 45,
81
+ },
82
+ };
83
+ static REFRESH = {
84
+ name: "オンゲキ Re:Fresh",
85
+ gameVersion: {
86
+ major: 1,
87
+ minor: 50,
88
+ },
89
+ };
90
+ static versions = [
91
+ Version.ONGEKI,
92
+ Version.ONGEKI_PLUS,
93
+ Version.SUMMER,
94
+ Version.SUMMER_PLUS,
95
+ Version.RED,
96
+ Version.RED_PLUS,
97
+ Version.BRIGHT,
98
+ Version.BRIGHT_MEMORY_ACT1,
99
+ Version.BRIGHT_MEMORY_ACT2,
100
+ Version.BRIGHT_MEMORY_ACT3,
101
+ Version.REFRESH,
102
+ ];
103
+ static getNextVersion(version) {
104
+ const index = lodash_1.default.findIndex(Version.versions, (v) => {
105
+ return (lodash_1.default.isEqual(v.gameVersion.major, version.gameVersion.major) &&
106
+ lodash_1.default.isEqual(v.gameVersion.minor, version.gameVersion.minor));
107
+ });
108
+ if (index == -1) {
109
+ return version;
110
+ }
111
+ else if (index == this.versions.length - 1) {
112
+ return this.versions[index];
113
+ }
114
+ return this.versions[index + 1];
115
+ }
116
+ static getPreviousVersion(version) {
117
+ const index = lodash_1.default.findIndex(Version.versions, (v) => {
118
+ return lodash_1.default.isEqual(v.gameVersion, version.gameVersion);
119
+ });
120
+ if (index == -1) {
121
+ return version;
122
+ }
123
+ else if (index == 0) {
124
+ return this.versions[index];
125
+ }
126
+ return this.versions[index - 1];
127
+ }
128
+ static toEventVersion(version) {
129
+ const event = {
130
+ ...version,
131
+ region: "JPN",
132
+ };
133
+ event.gameVersion.release = 0;
134
+ return event;
135
+ }
136
+ }
137
+ OngekiUtil.Version = Version;
138
+ function getNumberVersion(version) {
139
+ return version.gameVersion.major * 100 + version.gameVersion.minor;
140
+ }
141
+ OngekiUtil.getNumberVersion = getNumberVersion;
142
+ /**
143
+ * Calculate the rating of a score.
144
+ * @param internalLevel Internal level of the chart.
145
+ * @param score Score, range between 0 to 1010000.
146
+ * @param bell Full Bell or None.
147
+ * @param combo All Break Plus, All Break, Full Combo or None.
148
+ * @returns Raw decimal rating value.
149
+ */
150
+ function calculateReFreshScoreRating(internalLevel, score, bell, combo) {
151
+ let bonus = 0, scoreCoef = 0;
152
+ switch (true) {
153
+ case score >= 1010000: {
154
+ scoreCoef = 2.0;
155
+ bonus += 0.3; // SSS+ bonus;
156
+ break;
157
+ }
158
+ case score >= 1007500: {
159
+ scoreCoef = 1.75 + ((score - 1007500) / 2500) * 0.25;
160
+ bonus += 0.2; // SSS bonus;
161
+ break;
162
+ }
163
+ case score >= 1000000: {
164
+ scoreCoef = 1.25 + ((score - 1000000) / 5000) * 0.5;
165
+ bonus += 0.1; // SS bonus;
166
+ break;
167
+ }
168
+ case score >= 990000: {
169
+ scoreCoef = 0.75 + ((score - 990000) / 10000) * 0.5;
170
+ break;
171
+ }
172
+ case score >= 970000: {
173
+ scoreCoef = 0 + ((score - 970000) / 20000) * 0.75;
174
+ break;
175
+ }
176
+ case score >= 900000: {
177
+ scoreCoef = -4.0 - ((900000 - score) / 70000) * 4.0;
178
+ break;
179
+ }
180
+ case score >= 800000: {
181
+ scoreCoef = -6.0 - ((800000 - score) / 100000) * 2.0;
182
+ break;
183
+ }
184
+ default: {
185
+ scoreCoef =
186
+ -internalLevel - (-score / 800000) * (internalLevel - 6.0);
187
+ }
188
+ }
189
+ switch (bell) {
190
+ case type_1.EBellTypes.FULL_BELL:
191
+ bonus += 0.05;
192
+ break;
193
+ }
194
+ switch (combo) {
195
+ case type_1.EComboTypes.ALL_BREAK_PLUS:
196
+ bonus += 0.35;
197
+ break;
198
+ case type_1.EComboTypes.ALL_BREAK:
199
+ bonus += 0.3;
200
+ break;
201
+ case type_1.EComboTypes.FULL_COMBO:
202
+ bonus += 0.1;
203
+ break;
204
+ }
205
+ return Math.max(0, internalLevel + util_1.default.truncateNumber(scoreCoef, 3) + bonus);
206
+ }
207
+ OngekiUtil.calculateReFreshScoreRating = calculateReFreshScoreRating;
208
+ function calculateReFreshStarRating(internalLevel, starRatio) {
209
+ let starCount = 0;
210
+ if (starRatio >= 0.98)
211
+ starCount = 5;
212
+ else if (starRatio >= 0.97)
213
+ starCount = 4;
214
+ else if (starRatio >= 0.96)
215
+ starCount = 3;
216
+ else if (starRatio >= 0.95)
217
+ starCount = 2;
218
+ else if (starRatio >= 0.94)
219
+ starCount = 1;
220
+ return Math.floor(starCount * internalLevel * internalLevel) / 1000;
221
+ }
222
+ OngekiUtil.calculateReFreshStarRating = calculateReFreshStarRating;
223
+ function calculateScoreRating(internalLevel, score) {
224
+ let scoreCoef = 0;
225
+ switch (true) {
226
+ case score >= 1007500: {
227
+ scoreCoef = 2.0;
228
+ break;
229
+ }
230
+ case score >= 1000000: {
231
+ scoreCoef = 1.5 + ((score - 1000000) / 5000) * 0.5;
232
+ break;
233
+ }
234
+ case score >= 970000: {
235
+ scoreCoef = 0 + ((score - 970000) / 20000) * 1.5;
236
+ break;
237
+ }
238
+ case score >= 900000: {
239
+ scoreCoef = -4.0 - ((900000 - score) / 70000) * 4.0;
240
+ break;
241
+ }
242
+ case score >= 800000: {
243
+ scoreCoef = -6.0 - ((800000 - score) / 100000) * 2.0;
244
+ break;
245
+ }
246
+ default: {
247
+ scoreCoef =
248
+ -internalLevel - (-score / 800000) * (internalLevel - 6.0);
249
+ }
250
+ }
251
+ return Math.max(0, internalLevel + util_1.default.truncateNumber(scoreCoef, 2));
252
+ }
253
+ OngekiUtil.calculateScoreRating = calculateScoreRating;
254
+ })(OngekiUtil || (exports.OngekiUtil = OngekiUtil = {}));
255
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/geki/lib/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { z } from "zod/v4";
2
+ import { IScore } from "../../type";
3
+ import ScoreTrackerAdapter from "../../lib/adapter";
4
+ import { OngekiPainter } from "..";
5
+ export declare class ChartPainter extends OngekiPainter<typeof ChartPainter.Theme> {
6
+ static readonly Theme: z.ZodObject<{
7
+ name: z.ZodString;
8
+ displayName: z.ZodString;
9
+ width: z.ZodNumber;
10
+ height: z.ZodNumber;
11
+ elements: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
12
+ x: z.ZodNumber;
13
+ y: z.ZodNumber;
14
+ type: z.ZodLiteral<"profile">;
15
+ sprites: z.ZodObject<{
16
+ ratingNumberMap: z.ZodString;
17
+ profile: z.ZodObject<{
18
+ userplate: z.ZodString;
19
+ icon: z.ZodString;
20
+ }, z.core.$strip>;
21
+ }, z.core.$strip>;
22
+ }, z.core.$strip>, z.ZodObject<{
23
+ x: z.ZodNumber;
24
+ y: z.ZodNumber;
25
+ type: z.ZodLiteral<"chart-grid">;
26
+ width: z.ZodNumber;
27
+ height: z.ZodNumber;
28
+ margin: z.ZodNumber;
29
+ gap: z.ZodNumber;
30
+ bubble: z.ZodObject<{
31
+ margin: z.ZodNumber;
32
+ color: z.ZodObject<{
33
+ basic: z.ZodString;
34
+ advanced: z.ZodString;
35
+ expert: z.ZodString;
36
+ master: z.ZodString;
37
+ lunatic: z.ZodString;
38
+ }, z.core.$strip>;
39
+ }, z.core.$strip>;
40
+ color: z.ZodObject<{
41
+ card: z.ZodString;
42
+ }, z.core.$strip>;
43
+ sprites: z.ZodObject<{
44
+ achievement: z.ZodObject<{
45
+ d: z.ZodString;
46
+ c: z.ZodString;
47
+ b: z.ZodString;
48
+ bb: z.ZodString;
49
+ bbb: z.ZodString;
50
+ a: z.ZodString;
51
+ aa: z.ZodString;
52
+ aaa: z.ZodString;
53
+ s: z.ZodString;
54
+ ss: z.ZodString;
55
+ sss: z.ZodString;
56
+ sssp: z.ZodString;
57
+ }, z.core.$strip>;
58
+ milestone: z.ZodObject<{
59
+ ab: z.ZodString;
60
+ abp: z.ZodString;
61
+ fc: z.ZodString;
62
+ fb: z.ZodString;
63
+ none: z.ZodString;
64
+ }, z.core.$strip>;
65
+ versions: z.ZodObject<{
66
+ JPN: z.ZodRecord<z.ZodString, z.ZodString>;
67
+ }, z.core.$strip>;
68
+ }, z.core.$strip>;
69
+ }, z.core.$strip>, z.ZodObject<{
70
+ x: z.ZodNumber;
71
+ y: z.ZodNumber;
72
+ type: z.ZodLiteral<"detail-info">;
73
+ width: z.ZodNumber;
74
+ height: z.ZodNumber;
75
+ margin: z.ZodNumber;
76
+ color: z.ZodObject<{
77
+ card: z.ZodString;
78
+ }, z.core.$strip>;
79
+ }, z.core.$strip>, z.ZodObject<{
80
+ x: z.ZodNumber;
81
+ y: z.ZodNumber;
82
+ type: z.ZodLiteral<"character-info">;
83
+ width: z.ZodNumber;
84
+ height: z.ZodNumber;
85
+ margin: z.ZodNumber;
86
+ color: z.ZodObject<{
87
+ card: z.ZodString;
88
+ }, z.core.$strip>;
89
+ }, z.core.$strip>, z.ZodObject<{
90
+ x: z.ZodNumber;
91
+ y: z.ZodNumber;
92
+ type: z.ZodLiteral<"image">;
93
+ width: z.ZodNumber;
94
+ height: z.ZodNumber;
95
+ path: z.ZodString;
96
+ }, z.core.$strip>, z.ZodObject<{
97
+ x: z.ZodNumber;
98
+ y: z.ZodNumber;
99
+ type: z.ZodLiteral<"text">;
100
+ size: z.ZodNumber;
101
+ content: z.ZodString;
102
+ width: z.ZodOptional<z.ZodNumber>;
103
+ height: z.ZodOptional<z.ZodNumber>;
104
+ linebreak: z.ZodOptional<z.ZodBoolean>;
105
+ align: z.ZodOptional<z.ZodEnum<{
106
+ left: "left";
107
+ center: "center";
108
+ right: "right";
109
+ }>>;
110
+ color: z.ZodOptional<z.ZodString>;
111
+ borderColor: z.ZodOptional<z.ZodString>;
112
+ font: z.ZodOptional<z.ZodString>;
113
+ }, z.core.$strip>, z.ZodObject<{
114
+ x: z.ZodNumber;
115
+ y: z.ZodNumber;
116
+ type: z.ZodLiteral<"hitokoto">;
117
+ size: z.ZodNumber;
118
+ width: z.ZodOptional<z.ZodNumber>;
119
+ height: z.ZodOptional<z.ZodNumber>;
120
+ linebreak: z.ZodOptional<z.ZodBoolean>;
121
+ align: z.ZodOptional<z.ZodEnum<{
122
+ left: "left";
123
+ center: "center";
124
+ right: "right";
125
+ }>>;
126
+ color: z.ZodOptional<z.ZodString>;
127
+ borderColor: z.ZodOptional<z.ZodString>;
128
+ probability: z.ZodOptional<z.ZodNumber>;
129
+ customLines: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
130
+ }, z.core.$strip>], "type">>;
131
+ }, z.core.$strip>;
132
+ constructor();
133
+ private static readonly DEFAULT_THEME;
134
+ draw(variables: {
135
+ username: string;
136
+ rating: number;
137
+ chartId: number;
138
+ scores: (IScore | null)[];
139
+ type: "refresh" | "classic";
140
+ }, options?: {
141
+ scale?: number;
142
+ theme?: string;
143
+ profilePicture?: Buffer;
144
+ region?: "JPN";
145
+ }): Promise<Buffer | null>;
146
+ drawWithScoreSource(source: ScoreTrackerAdapter, variables: {
147
+ username: string;
148
+ chartId: number;
149
+ type: "refresh" | "classic";
150
+ }, options?: {
151
+ scale?: number;
152
+ theme?: string;
153
+ profilePicture?: Buffer | null;
154
+ region?: "JPN";
155
+ }): Promise<Buffer | null>;
156
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ChartPainter = void 0;
7
+ const upath_1 = __importDefault(require("upath"));
8
+ const v4_1 = require("zod/v4");
9
+ const canvas_1 = require("canvas");
10
+ const type_1 = require("../../type");
11
+ const util_1 = require("../../../lib/util");
12
+ const __1 = require("..");
13
+ const painter_1 = require("../../../lib/painter");
14
+ const database_1 = require("../../lib/database");
15
+ class ChartPainter extends __1.OngekiPainter {
16
+ static Theme = painter_1.ThemeManager.BaseTheme.extend({
17
+ elements: v4_1.z.array(v4_1.z.discriminatedUnion("type", [
18
+ __1.OngekiPainterModule.Profile.schema,
19
+ __1.OngekiPainterModule.Chart.ChartGrid.schema,
20
+ __1.OngekiPainterModule.Chart.DetailInfo.schema,
21
+ __1.OngekiPainterModule.Chart.CharacterInfo.schema,
22
+ painter_1.PainterModule.Image.schema,
23
+ painter_1.PainterModule.Text.schema,
24
+ painter_1.PainterModule.Hitokoto.schema,
25
+ ])),
26
+ });
27
+ constructor() {
28
+ super({
29
+ theme: {
30
+ schema: ChartPainter.Theme,
31
+ searchPaths: [
32
+ upath_1.default.join(ChartPainter.assetsPath, "themes", "ongeki", "chart"),
33
+ ],
34
+ defaultTheme: ChartPainter.DEFAULT_THEME,
35
+ },
36
+ });
37
+ }
38
+ static DEFAULT_THEME = "jp-refresh";
39
+ async draw(variables, options = {}) {
40
+ let currentTheme = this.theme.get(this.theme.defaultTheme);
41
+ if (options?.theme) {
42
+ const theme = this.theme.get(options.theme);
43
+ if (theme) {
44
+ currentTheme = theme;
45
+ }
46
+ }
47
+ const charts = [];
48
+ for (let i = type_1.EDifficulty.BASIC; i <= type_1.EDifficulty.LUNATIC; ++i) {
49
+ charts.push(database_1.Database.getLocalChart(variables.chartId, i));
50
+ }
51
+ if (!charts.length)
52
+ return null;
53
+ if (currentTheme) {
54
+ await database_1.Database.cacheJackets([variables.chartId]);
55
+ const canvas = new canvas_1.Canvas(currentTheme.content.width * (options?.scale ?? 1), currentTheme.content.height * (options?.scale ?? 1));
56
+ const ctx = canvas.getContext("2d");
57
+ if (options?.scale)
58
+ ctx.scale(options.scale, options.scale);
59
+ ctx.imageSmoothingEnabled = true;
60
+ for (const element of currentTheme.content.elements) {
61
+ switch (element.type) {
62
+ case "image": {
63
+ await painter_1.PainterModule.Image.draw(ctx, currentTheme, element);
64
+ break;
65
+ }
66
+ case "hitokoto": {
67
+ await painter_1.PainterModule.Hitokoto.draw(ctx, currentTheme, element);
68
+ break;
69
+ }
70
+ case "chart-grid": {
71
+ await __1.OngekiPainterModule.Chart.ChartGrid.draw(ctx, currentTheme, element, variables.chartId, variables.scores, options?.region);
72
+ break;
73
+ }
74
+ case "detail-info": {
75
+ await __1.OngekiPainterModule.Chart.DetailInfo.draw(ctx, currentTheme, element, variables.chartId);
76
+ break;
77
+ }
78
+ case "character-info": {
79
+ await __1.OngekiPainterModule.Chart.CharacterInfo.draw(ctx, currentTheme, element, charts.find((v) => v != undefined)?.meta.boss);
80
+ break;
81
+ }
82
+ case "profile": {
83
+ await __1.OngekiPainterModule.Profile.draw(ctx, currentTheme, element, variables.username, variables.rating, options?.profilePicture);
84
+ break;
85
+ }
86
+ case "text": {
87
+ await painter_1.PainterModule.Text.draw(ctx, element, {
88
+ username: util_1.Util.HalfFullWidthConvert.toFullWidth(variables.username),
89
+ rating: util_1.Util.truncate(variables.rating, 0),
90
+ });
91
+ break;
92
+ }
93
+ }
94
+ }
95
+ return canvas.toBuffer();
96
+ }
97
+ else
98
+ return null;
99
+ }
100
+ async drawWithScoreSource(source, variables, options = {}) {
101
+ const profile = await source.getPlayerInfo(variables.username, variables.type);
102
+ const score = await source.getPlayerScore(variables.username, variables.chartId);
103
+ if (!profile || !score)
104
+ return null;
105
+ return this.draw({
106
+ username: profile.name,
107
+ rating: profile.rating,
108
+ chartId: variables.chartId,
109
+ scores: [
110
+ score.basic,
111
+ score.advanced,
112
+ score.expert,
113
+ score.master,
114
+ score.lunatic,
115
+ ],
116
+ type: variables.type,
117
+ }, {
118
+ ...options,
119
+ profilePicture: options?.profilePicture === null
120
+ ? undefined
121
+ : options?.profilePicture ||
122
+ (await source.getPlayerProfilePicture(variables.username)) ||
123
+ undefined,
124
+ });
125
+ }
126
+ }
127
+ exports.ChartPainter = ChartPainter;
128
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/geki/painter/chart/index.ts"],"names":[],"mappings":"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"}
@@ -85,4 +85,96 @@ export declare namespace OngekiPainterModule {
85
85
  function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, score: IScore, index: number, x: number, y: number, type?: "refresh" | "classic"): Promise<void>;
86
86
  }
87
87
  }
88
+ namespace Chart {
89
+ namespace ChartGrid {
90
+ const schema: z.ZodObject<{
91
+ x: z.ZodNumber;
92
+ y: z.ZodNumber;
93
+ type: z.ZodLiteral<"chart-grid">;
94
+ width: z.ZodNumber;
95
+ height: z.ZodNumber;
96
+ margin: z.ZodNumber;
97
+ gap: z.ZodNumber;
98
+ bubble: z.ZodObject<{
99
+ margin: z.ZodNumber;
100
+ color: z.ZodObject<{
101
+ basic: z.ZodString;
102
+ advanced: z.ZodString;
103
+ expert: z.ZodString;
104
+ master: z.ZodString;
105
+ lunatic: z.ZodString;
106
+ }, z.core.$strip>;
107
+ }, z.core.$strip>;
108
+ color: z.ZodObject<{
109
+ card: z.ZodString;
110
+ }, z.core.$strip>;
111
+ sprites: z.ZodObject<{
112
+ achievement: z.ZodObject<{
113
+ d: z.ZodString;
114
+ c: z.ZodString;
115
+ b: z.ZodString;
116
+ bb: z.ZodString;
117
+ bbb: z.ZodString;
118
+ a: z.ZodString;
119
+ aa: z.ZodString;
120
+ aaa: z.ZodString;
121
+ s: z.ZodString;
122
+ ss: z.ZodString;
123
+ sss: z.ZodString;
124
+ sssp: z.ZodString;
125
+ }, z.core.$strip>;
126
+ milestone: z.ZodObject<{
127
+ ab: z.ZodString;
128
+ abp: z.ZodString;
129
+ fc: z.ZodString;
130
+ fb: z.ZodString;
131
+ none: z.ZodString;
132
+ }, z.core.$strip>;
133
+ versions: z.ZodObject<{
134
+ JPN: z.ZodRecord<z.ZodString, z.ZodString>;
135
+ }, z.core.$strip>;
136
+ }, z.core.$strip>;
137
+ }, z.core.$strip>;
138
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, chartId: number, scores: (IScore | null)[], region?: "JPN"): Promise<void>;
139
+ }
140
+ namespace DetailInfo {
141
+ const schema: z.ZodObject<{
142
+ x: z.ZodNumber;
143
+ y: z.ZodNumber;
144
+ type: z.ZodLiteral<"detail-info">;
145
+ width: z.ZodNumber;
146
+ height: z.ZodNumber;
147
+ margin: z.ZodNumber;
148
+ color: z.ZodObject<{
149
+ card: z.ZodString;
150
+ }, z.core.$strip>;
151
+ }, z.core.$strip>;
152
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, chartId: number): Promise<void>;
153
+ }
154
+ namespace CharacterInfo {
155
+ const schema: z.ZodObject<{
156
+ x: z.ZodNumber;
157
+ y: z.ZodNumber;
158
+ type: z.ZodLiteral<"character-info">;
159
+ width: z.ZodNumber;
160
+ height: z.ZodNumber;
161
+ margin: z.ZodNumber;
162
+ color: z.ZodObject<{
163
+ card: z.ZodString;
164
+ }, z.core.$strip>;
165
+ }, z.core.$strip>;
166
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, character?: {
167
+ card: {
168
+ id: number;
169
+ name: string;
170
+ };
171
+ character: {
172
+ rarity: string;
173
+ name: string;
174
+ comment?: string;
175
+ };
176
+ level: number;
177
+ }): Promise<void>;
178
+ }
179
+ }
88
180
  }