Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 85 86 87 88 89 90 91 92 93 94 95 96 97 | 22x 22x 12x 12x 12x 12x 3613x 3605x 3613x 4x 4x 3746x 3617x | import { NumberLabel, NumberLabelImpl, NumberLabelOptions } from './numberLabel' /** * {@link Ticker} の状態. * * 'enabled': 残り時間の変更を許可します. * * 'disabled': 残り時間を変更しようとしても無視します. */ export type TickerStatus = 'enabled' | 'disabled' /** * ゲームの残り時間を制御、描画します. */ export interface Ticker extends NumberLabel { /** * 残り時間が 0 になった際に発火するトリガ */ readonly onExpire: g.Trigger /** * 残り時間を取得します. (秒単位、0秒以上、小数点以下切り捨て) */ readonly value: number /** * 残り時間を取得します. (フレーム単位、負の値あり、小数点以下あり) */ readonly rawValue: number /** * 残り時間の変更を受け付けるか状態を取得します */ readonly status: TickerStatus /** * ライブラリ利用者が自由に使えるフィールドです. */ vars?: unknown /** * 残り時間の値 (フレーム数) を追加します. * * カウントダウン形式の場合、引数に負の値を設定してください. * * @param frame 追加する値 (フレーム数) */ add (frame: number): void /** * 引数の値に残り時間 (フレーム数) を設定します. * * @param frame 設定する値 */ set (frame: number): void /** * 残り時間を設定できるようにします. */ enable (): void /** * 残り時間を設定しようとしても無視します. */ disable (): void } export type TickerOptions = Omit<NumberLabelOptions, 'value' | 'textAlign'> & { frame: number vars: unknown } export class TickerImpl extends NumberLabelImpl implements Ticker { readonly onExpire = new g.Trigger() vars?: unknown constructor ({ scene, frame, font, digit, prefix, suffix, vars }: TickerOptions) { super({ scene, value: frame, font, digit, prefix, suffix, textAlign: 'left' }) this.vars = vars scene.onUpdate.add(() => { if (this.status === 'enabled') { this.add(-1) } if (this.rawValue <= 0) { this.disable() this.onExpire.fire() } }) } override get value (): number { return Math.max(Math.floor(super.value / g.game.fps), 0) } get rawValue (): number { return super.value } } |