Spaces:
Sleeping
Sleeping
| import { IPoint } from "../geometry" | |
| export default class TempoCoordTransform { | |
| readonly pixelsPerTick: number | |
| // グラフの描画領域の高さ | |
| // Higher graph drawing area | |
| readonly height: number | |
| readonly maxBPM: number | |
| constructor(pixelsPerTick: number, height: number, maxBPM = 320) { | |
| this.pixelsPerTick = pixelsPerTick | |
| this.height = height | |
| this.maxBPM = maxBPM | |
| } | |
| getX(tick: number) { | |
| return tick * this.pixelsPerTick | |
| } | |
| getY(bpm: number) { | |
| return (1 - bpm / this.maxBPM) * this.height // 上下反転 | |
| } | |
| getMaxY() { | |
| return this.height | |
| } | |
| getTicks(pixels: number) { | |
| return pixels / this.pixelsPerTick | |
| } | |
| getBPM(pixels: number) { | |
| return (1 - pixels / this.height) * this.maxBPM | |
| } | |
| getDeltaBPM(pixels: number) { | |
| return (-pixels / this.height) * this.maxBPM | |
| } | |
| equals(t: TempoCoordTransform) { | |
| return ( | |
| this.pixelsPerTick === t.pixelsPerTick && | |
| this.height === t.height && | |
| this.maxBPM === t.maxBPM | |
| ) | |
| } | |
| fromPosition(position: IPoint) { | |
| return { | |
| tick: this.getTicks(position.x), | |
| bpm: this.getBPM(position.y), | |
| } | |
| } | |
| } | |