kipphi 2.0.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.
package/chartTypes.ts ADDED
@@ -0,0 +1,512 @@
1
+
2
+
3
+ /// #declaration:global
4
+
5
+ /** 尽管JSON中有布尔值字面量,RPEJSON中没有使用它 */
6
+ export type Bool = 1 | 0
7
+ /** 三元组,用带分数表示的时间 */
8
+ export type TimeT = [number, number, number]
9
+ export type RGB = [number, number, number]
10
+ export interface ChartDataRPE {
11
+ /** BPM列表 */
12
+ BPMList: BPMSegmentData[];
13
+ /** 元数据 */
14
+ META: MetaData;
15
+ /** 判定线组 */
16
+ judgeLineGroup: string[];
17
+ /** 判定线列表 */
18
+ judgeLineList: JudgeLineDataRPE[];
19
+ chartTime?: number;
20
+ kpaChartTime?: number;
21
+ multiLineString: string;
22
+ multiScale: number;
23
+
24
+ }
25
+
26
+ export interface BPMSegmentData {
27
+ bpm: number;
28
+ startTime: TimeT;
29
+ // endTime?: TimeT;
30
+ }
31
+ export interface MetaData {
32
+ /** RPE版本(int) */
33
+ RPEVersion: number;
34
+ /** 背景图片路径 */
35
+ background: string;
36
+ /** 画师名称 */
37
+ illustration: string;
38
+ /** 谱师名称 */
39
+ charter: string;
40
+ /** 曲师名称 */
41
+ composer: string;
42
+ /** 谱面ID,即Resources文件夹下的文件夹名称 */
43
+ id: string;
44
+ /** 谱面难度 */
45
+ level: string;
46
+ /** 谱面名称 */
47
+ name: string;
48
+ /** 谱面偏移(以毫秒计量) */
49
+ offset: number;
50
+ /** 音乐文件路径 */
51
+ song: string;
52
+ /** 音乐时长(1.6(存疑)新增) */
53
+ duration?: number;
54
+ }
55
+
56
+ export interface NoteDataRPE {
57
+ /** 音符是否在判定线上方 (2为下方) */
58
+ above: Bool | 2;
59
+ /** 音符不透明度 */
60
+ alpha: number;
61
+ /** 音符结束时间,无论是否为Hold都有该属性 */
62
+ endTime: TimeT;
63
+ /** 音符是否为假 */
64
+ isFake: Bool;
65
+ /** 音符在判定线上落点位置 */
66
+ positionX: number;
67
+ /** 音符大小(默认1.0) */
68
+ size: number;
69
+ /** 音符速度 */
70
+ speed: number;
71
+ /** 音符开始时间 */
72
+ startTime: TimeT;
73
+ /** 音符类型(1 为 Tap,2 为 Hold,3 为 Flick,4 为 Drag)*/
74
+ type: NoteType;
75
+ /** 音符可视时间(打击前多少秒开始显现,默认99999.0) */
76
+ visibleTime: number;
77
+ /** y值偏移,使音符被打击时的位置偏离判定线 */
78
+ yOffset: number;
79
+
80
+ // 下面是PhiZone Player扩展的内容
81
+ /** Sets the Z index for the object. */
82
+ zIndex?: number;
83
+ /**
84
+ * Sets the Z index for the hit effects of the note. Defaults to 7.
85
+ */
86
+ zIndexHitEffects?: number;
87
+ /** Sets the tint for the hit effects of the note. Defaults to null. */
88
+ tint?: RGB;
89
+ tintHitEffects?: RGB;
90
+
91
+ /** Determines the width of the judgment area of the note. Defaults to size. */
92
+ judgeSize?: number;
93
+ }
94
+
95
+ export interface NoteDataKPA {
96
+ /** 音符是否在判定线上方 (2为下方) */
97
+ above: Bool | 2;
98
+ /** 音符不透明度 */
99
+ alpha: number;
100
+ /** 音符结束时间,无论是否为Hold都有该属性 */
101
+ endTime: TimeT;
102
+ /** 音符是否为假 */
103
+ isFake: Bool;
104
+ /** 音符在判定线上落点位置 */
105
+ positionX: number;
106
+ /** 音符大小(默认1.0) */
107
+ size: number;
108
+ /** 音符速度 */
109
+ speed: number;
110
+ /** 音符开始时间 */
111
+ startTime: TimeT;
112
+ /** 音符类型(1 为 Tap,2 为 Hold,3 为 Flick,4 为 Drag)*/
113
+ type: NoteType;
114
+ /** 音符可视时间(打击前多少秒开始显现,默认99999.0) */
115
+ visibleTime?: number;
116
+ /** y值偏移,使音符被打击时的位置偏离判定线 */
117
+ yOffset: number;
118
+
119
+ // 下面是PhiZone Player扩展的内容
120
+ /** Sets the Z index for the object. */
121
+ zIndex?: number;
122
+ /**
123
+ * Sets the Z index for the hit effects of the note. Defaults to 7.
124
+ */
125
+ zIndexHitEffects?: number;
126
+ /** Sets the tint for the hit effects of the note. Defaults to null. */
127
+ tint?: RGB;
128
+ tintHitEffects?: RGB;
129
+
130
+ /** Determines the width of the judgment area of the note. Defaults to size. */
131
+ judgeSize?: number;
132
+ visibleBeats?: number;
133
+ absoluteYOffset: number;
134
+ }
135
+
136
+ /** 事件 */
137
+ export interface EventDataRPELike<T = number> {
138
+ /** 是否使用贝塞尔曲线 */
139
+ bezier: Bool;
140
+ /** 贝塞尔控制点 */
141
+ bezierPoints: [number, number, number, number];
142
+ /** 截取缓动左边界 */
143
+ easingLeft: number;
144
+ /** 截取缓动右边界 */
145
+ easingRight: number;
146
+ /** 缓动类型 */
147
+ easingType: number | string;
148
+ /** 结束值 */
149
+ end: T;
150
+ /** 结束时间 */
151
+ endTime: TimeT;
152
+ /** 链接组 */
153
+ linkgroup: number;
154
+ /** 开始值 */
155
+ start: T;
156
+ /** 开始时间 */
157
+ startTime: TimeT;
158
+ }
159
+
160
+ // 不得更改数值
161
+ export enum InterpreteAs {
162
+ str = 0,
163
+ int = 1,
164
+ float = 2
165
+ }
166
+
167
+
168
+ // 多年才想起来,根本没做参数方程缓动的相关适配
169
+
170
+ export interface EventDataKPA<T = number> extends EventDataRPELike<T> {
171
+ /** 若设为真,则easingType当做JS表达式解读 */
172
+ isParametric?: boolean;
173
+ interpreteAs?: InterpreteAs;
174
+ }
175
+
176
+ export enum EasingType {
177
+ normal,
178
+ template,
179
+ bezier,
180
+ segmented
181
+ }
182
+
183
+ export interface NormalEasingData {
184
+ type: EasingType.normal
185
+ identifier: number;
186
+ }
187
+
188
+ export interface TemplateEasingData {
189
+ identifier: string;
190
+ type: EasingType.template;
191
+ }
192
+
193
+ export interface BezierEasingData {
194
+ type: EasingType.bezier;
195
+ bezier: [number, number, number, number];
196
+ }
197
+
198
+ export interface SegmentedEasingData {
199
+ type: EasingType.segmented;
200
+ left: number;
201
+ right: number;
202
+ inner: EasingDataKPA2;
203
+ }
204
+
205
+ export type EasingDataKPA2 = NormalEasingData | TemplateEasingData | BezierEasingData | SegmentedEasingData;
206
+
207
+ export enum EvaluatorType {
208
+ eased,
209
+ expressionbased
210
+ }
211
+
212
+ // Eased
213
+
214
+ interface EasedEvaluatorDataKPA2<T> {
215
+ type: EvaluatorType.eased;
216
+ easing: EasingDataKPA2;
217
+ }
218
+
219
+ export type NumericEasedEvaluatorKPA2 = EasedEvaluatorDataKPA2<number>;
220
+ export type ColorEasedEvaluatorKPA2 = EasedEvaluatorDataKPA2<RGB>;
221
+ export interface TextEasedEvaluatorKPA2 extends EasedEvaluatorDataKPA2<string> {
222
+ font: string;
223
+ interpretedAs: InterpreteAs;
224
+ }
225
+
226
+ export type EasedEvaluatorDataOfType<T> = T extends number ? NumericEasedEvaluatorKPA2 : T extends RGB ? ColorEasedEvaluatorKPA2 : TextEasedEvaluatorKPA2;
227
+
228
+ // Expression-based
229
+
230
+ export interface ExpressionEvaluatorDataKPA2 {
231
+ type: EvaluatorType.expressionbased;
232
+ jsExpr: string;
233
+ }
234
+
235
+
236
+ export type EvaluatorDataKPA2<T> = EasedEvaluatorDataOfType<T> | ExpressionEvaluatorDataKPA2;
237
+ export interface EventDataKPA2<T = number> {
238
+ startTime: TimeT;
239
+ endTime: TimeT;
240
+ start: T;
241
+ end: T;
242
+ evaluator: EvaluatorDataKPA2<T>;
243
+ }
244
+
245
+ export enum EventValueType {
246
+ numeric,
247
+ color,
248
+ text,
249
+ }
250
+
251
+ export type EventValueTypeOfType<T extends EventValueESType> = T extends number ? EventValueType.numeric : T extends RGB ? EventValueType.color : EventValueType.text;
252
+ export type EventValueESType = string | number | RGB
253
+ /**
254
+ * 五个种类的事件的start/end含义:
255
+ * X/Y方向移动:像素
256
+ * 旋转:角度(以度计)
257
+ * 不透明度改变:不透明度(0-255的整数)
258
+ * 速度改变:RPE速度单位(每个单位代表每秒下降120px)
259
+ */
260
+
261
+ /** 每条判定线的前四个事件层级。第五个是特殊事件,这里没有列入 */
262
+ export interface EventLayerDataRPE {
263
+ moveXEvents?: EventDataRPELike[];
264
+ moveYEvents?: EventDataRPELike[];
265
+ rotateEvents?: EventDataRPELike[];
266
+ alphaEvents?: EventDataRPELike[];
267
+ speedEvents?: EventDataRPELike[];
268
+ }
269
+
270
+
271
+
272
+ export interface Control {
273
+ easing: number;
274
+ x: number;
275
+ }
276
+
277
+ export interface AlphaControl extends Control {
278
+ alpha: number;
279
+ }
280
+ export interface PosControl extends Control {
281
+ pos: number;
282
+ }
283
+ export interface SizeControl extends Control {
284
+ size: number;
285
+ }
286
+ export interface SkewControl extends Control {
287
+ skew: number;
288
+ }
289
+ export interface YControl extends Control {
290
+ y: number;
291
+ }
292
+
293
+ /** 判定线 */
294
+ export interface JudgeLineDataRPE {
295
+ /** 音符数据
296
+ * 对音符的顺序没有要求,但RPE生成的标准RPEJSON中应当按照时间升序排列,
297
+ * 且非Hold类型与Hold分开排列,非Hold在前
298
+ */
299
+ notes: NoteDataRPE[];
300
+ /** 所在的判定线组,对应judgeLineGroup数组中的字符串的下标 */
301
+ Group: number;
302
+ /** 线名 */
303
+ Name: string;
304
+ /** 纹理图片的路径 */
305
+ Texture: string;
306
+ /** BPM因数 */
307
+ bpmfactor: 1.0;
308
+ /** 事件层级,这里没有介绍第五个 */
309
+ eventLayers: (EventLayerDataRPE | null)[];
310
+ /** 扩展事件 */
311
+ extended?: {
312
+ colorEvents: EventDataRPELike<RGB>[];
313
+ inclineEvents: EventDataRPELike[];
314
+ scaleXEvents: EventDataRPELike[];
315
+ scaleYEvents: EventDataRPELike[];
316
+ textEvents: EventDataRPELike<string>[];
317
+ gifEvents: EventDataRPELike<number>[];
318
+ };
319
+ /** 父线线号,没有父线则为-1 */
320
+ father: number;
321
+ /** 有无遮罩 */
322
+ isCover: Bool;
323
+ /** 音符数量 */
324
+ numOfNotes: number;
325
+
326
+ alphaControl?: AlphaControl[];
327
+ posControl?: PosControl[];
328
+ sizeControl?: SizeControl[];
329
+ skewControl?: SkewControl[];
330
+ yControl?: YControl[];
331
+ /** z轴顺序,决定重叠的顺序 */
332
+ zOrder?: number;
333
+
334
+ // 锚点相对于贴图的位置
335
+ anchor: [number, number];
336
+
337
+ /** 背景是否为GIF */
338
+ isGif: Bool;
339
+
340
+ rotateWithFather?: boolean;
341
+ attachUI?: "pause" | "combonumber" | "combo" | "score" | "bar" | "name" | "level";
342
+
343
+ /** Decides how scaleX events affect notes. Defaults to 0.
344
+ * 0: none; 1: scale; 2: clip
345
+ */
346
+ scaleOnNotes?: 0 | 1 | 2;
347
+ /** Decides how the line will be displayed when a UI component or any video is attached to it.
348
+ * Color events will override the color defined by these options. Defaults to 0.
349
+ * 0: hidden; 1: white colored; 2: FC/AP colored
350
+ */
351
+ appearanceOnAttach?: 0 | 1 | 2;
352
+ /** Sets the Z index for the object.
353
+ * For a judgeline, this property, if set, overrides the zOrder property,
354
+ * allowing for more control over on which layer the line should be displayed. */
355
+ zIndex?: number;
356
+ }
357
+
358
+ export interface JudgeLineDataRPEExtended extends JudgeLineDataRPE {
359
+ _id?: number;
360
+ children: number[]
361
+ }
362
+
363
+ export interface CustomEasingData {
364
+ content: string;
365
+ name: string;
366
+ usedBy: string[];
367
+ dependencies: string[];
368
+ }
369
+
370
+
371
+ // 使用对应标识符来标记事件节点序列
372
+
373
+ export interface EventLayerDataKPA {
374
+ moveX: string;
375
+ moveY: string;
376
+ rotate: string;
377
+ alpha: string;
378
+ speed: string;
379
+ }
380
+
381
+
382
+ export interface NoteNodeDataKPA {
383
+ notes: NoteDataKPA[];
384
+ startTime: TimeT;
385
+ }
386
+
387
+ export interface NNListDataKPA {
388
+ speed: number;
389
+ medianYOffset: number;
390
+ noteNodes: NoteNodeDataKPA[];
391
+ }
392
+
393
+ export interface JudgeLineDataKPA {
394
+ cover: boolean;
395
+ id: number;
396
+ group: number;
397
+ nnLists: {[k: string]: NNListDataKPA};
398
+ hnLists: {[k: string]: NNListDataKPA};
399
+ Name: string;
400
+ Texture: string;
401
+ eventLayers: EventLayerDataKPA[];
402
+ children: JudgeLineDataKPA[];
403
+ rotatesWithFather: boolean;
404
+
405
+ anchor: [number, number];
406
+ extended?: {
407
+ scaleXEvents: string;
408
+ scaleYEvents: string;
409
+ textEvents?: string;
410
+ colorEvents?: string;
411
+ }
412
+ zOrder: number;
413
+ }
414
+
415
+
416
+
417
+ export interface EventNodeSequenceDataKPA<VT> {
418
+ events: EventDataKPA<VT>[];
419
+ id: string;
420
+ type: EventType;
421
+ endValue: VT;
422
+ }
423
+
424
+ export interface EventNodeSequenceDataKPA2<VT> {
425
+ events: EventDataKPA2<VT>[];
426
+ id: string;
427
+ type: EventType;
428
+ endValue: VT;
429
+ }
430
+
431
+ export interface ChartDataKPA {
432
+ version: number;
433
+ offset: number;
434
+ duration: number;
435
+ info: {
436
+ level: string;
437
+ name: string;
438
+ charter: string;
439
+ illustrator: string;
440
+ composer: string;
441
+ };
442
+ ui: {
443
+ pause: number;
444
+ combonumber: number;
445
+ combo: number;
446
+ score: number;
447
+ bar: number;
448
+ name: number;
449
+ level: number;
450
+ }
451
+ envEasings: CustomEasingData[]; // New!
452
+ eventNodeSequences: EventNodeSequenceDataKPA<any>[];
453
+ orphanLines: JudgeLineDataKPA[];
454
+ bpmList: BPMSegmentData[];
455
+ judgeLineGroups: string[];
456
+ chartTime?: number;
457
+ rpeChartTime?: number;
458
+ }
459
+
460
+ export interface ChartDataKPA2 {
461
+ version: number;
462
+ offset: number;
463
+ duration: number;
464
+ info: {
465
+ level: string;
466
+ name: string;
467
+ charter: string;
468
+ illustrator: string;
469
+ composer: string;
470
+ };
471
+ ui: {
472
+ pause: number;
473
+ combonumber: number;
474
+ combo: number;
475
+ score: number;
476
+ bar: number;
477
+ name: number;
478
+ level: number;
479
+ }
480
+ envEasings: CustomEasingData[];
481
+ eventNodeSequences: EventNodeSequenceDataKPA2<any>[];
482
+ orphanLines: JudgeLineDataKPA[];
483
+ bpmList: BPMSegmentData[];
484
+ judgeLineGroups: string[];
485
+ chartTime?: number;
486
+ rpeChartTime?: number;
487
+ }
488
+
489
+ export enum EventType {
490
+ moveX,
491
+ moveY,
492
+ rotate,
493
+ alpha,
494
+ speed,
495
+ easing,
496
+ bpm,
497
+ scaleX,
498
+ scaleY,
499
+ text,
500
+ color
501
+ }
502
+ export enum NoteType {
503
+ tap=1,
504
+ drag=4,
505
+ flick=3,
506
+ hold=2
507
+ }
508
+
509
+
510
+ export type ValueTypeOfEventType<T extends EventType> = [number, number, number, number, number, number, number, number, number, string, RGB][T]
511
+
512
+ /// #enddeclaration