nitro/libs/renderer/src/nitro/room/object/logic/furniture/FurnitureCuckooClockLogic.ts

35 lines
1.1 KiB
TypeScript

import {RoomObjectPlaySoundIdEvent} from "../../../../../events";
import {RoomObjectUpdateMessage} from "../../../../../room";
import {ObjectDataUpdateMessage} from "../../../messages";
import {FurnitureMultiStateLogic} from "./FurnitureMultiStateLogic";
export class FurnitureCuckooClockLogic extends FurnitureMultiStateLogic {
private _state: number = 1;
public override getEventTypes(): string[] {
const types = [RoomObjectPlaySoundIdEvent.PLAY_SOUND_AT_PITCH];
return this.mergeTypes(super.getEventTypes(), types);
}
public override processUpdateMessage(message: RoomObjectUpdateMessage): void {
super.processUpdateMessage(message);
if (message instanceof ObjectDataUpdateMessage) {
if (this._state !== -1 && message.state !== this._state) {
this.dispatchSoundEvent(this.object.location.z);
}
this._state = message.state;
}
}
private dispatchSoundEvent(height: number): void {
const pitch = Math.pow(2, height - 1.2);
this.eventDispatcher.dispatchEvent(
new RoomObjectPlaySoundIdEvent(RoomObjectPlaySoundIdEvent.PLAY_SOUND_AT_PITCH, this.object, "FURNITURE_cuckoo_clock", pitch)
);
}
}