This repository was archived by the owner on Jun 20, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmod.ts
More file actions
84 lines (81 loc) · 1.72 KB
/
Copy pathmod.ts
File metadata and controls
84 lines (81 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import {
checkHolds,
type CheckHoldsResult,
checkOneshotBeats,
type CheckOneshotBeatsResult,
} from "./beat.ts";
import {
type CheckOneshotCuesResult,
type ExpectedBeat,
playOneshotCues,
type PlayOneshotCuesOptions,
type PlayOneshotCuesResult,
} from "./cue.ts";
import {
type CueSource,
type CueType,
type Level,
type OneshotBeat,
type OneshotCue,
parseLevel,
} from "./level.ts";
import {
type BarAndBeat,
barToBeat,
beatToBar,
beatToTime,
type CpbChange,
type TempoChange,
timeToBeat,
} from "./time.ts";
export {
type BarAndBeat,
barToBeat,
beatToBar,
beatToTime,
checkHolds,
type CheckHoldsResult,
checkOneshotBeats,
type CheckOneshotBeatsResult,
type CheckOneshotCuesResult,
type CpbChange,
type CueSource,
type CueType,
type ExpectedBeat,
type Level,
type OneshotBeat,
type OneshotCue,
parseLevel,
playOneshotCues,
type PlayOneshotCuesOptions,
type PlayOneshotCuesResult,
type TempoChange,
timeToBeat,
};
export type CheckLevelOptions = PlayOneshotCuesOptions;
export type CheckLevelResult =
& CheckOneshotCuesResult
& CheckOneshotBeatsResult
& CheckHoldsResult;
export function checkLevel(
level: Level,
options?: CheckLevelOptions,
): CheckLevelResult {
const { expected, result: checkOneshotCuesResult } = playOneshotCues(
level.oneshotCues,
options,
);
const checkOneshotBeatsResult = checkOneshotBeats(
level.oneshotBeats,
expected,
);
const checkHoldsResult = checkHolds(level.holds);
return {
...checkOneshotCuesResult,
...checkOneshotBeatsResult,
...checkHoldsResult,
};
}
export function formatTime({ bar, beat }: BarAndBeat): string {
return `${bar + 1}-${Math.round((beat + 1) * 1000) / 1000}`;
}