121 lines
3.7 KiB
TypeScript
121 lines
3.7 KiB
TypeScript
import {RoomObjectVariable} from "../../../../../api";
|
|
import {RoomObjectDimmerStateUpdateEvent, RoomObjectWidgetRequestEvent} from "../../../../../events";
|
|
import {RoomObjectUpdateMessage} from "../../../../../room";
|
|
import {ObjectDataUpdateMessage} from "../../../messages";
|
|
import {FurnitureLogic} from "./FurnitureLogic";
|
|
|
|
export class FurnitureRoomDimmerLogic extends FurnitureLogic {
|
|
private _roomColorUpdated: boolean;
|
|
|
|
constructor() {
|
|
super();
|
|
|
|
this._roomColorUpdated = false;
|
|
}
|
|
|
|
public override getEventTypes(): string[] {
|
|
const types = [RoomObjectWidgetRequestEvent.DIMMER, RoomObjectWidgetRequestEvent.WIDGET_REMOVE_DIMMER, RoomObjectDimmerStateUpdateEvent.DIMMER_STATE];
|
|
|
|
return this.mergeTypes(super.getEventTypes(), types);
|
|
}
|
|
|
|
protected override onDispose(): void {
|
|
if (this._roomColorUpdated) {
|
|
if (this.eventDispatcher && this.object) {
|
|
const realRoomObject = this.object.model.getValue<number>(RoomObjectVariable.FURNITURE_REAL_ROOM_OBJECT);
|
|
|
|
if (realRoomObject === 1) {
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectDimmerStateUpdateEvent(this.object, 0, 1, 1, 0xffffff, 0xff));
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.WIDGET_REMOVE_DIMMER, this.object));
|
|
}
|
|
|
|
this._roomColorUpdated = false;
|
|
}
|
|
}
|
|
|
|
super.onDispose();
|
|
}
|
|
|
|
public override processUpdateMessage(message: RoomObjectUpdateMessage): void {
|
|
if (message instanceof ObjectDataUpdateMessage) {
|
|
if (message.data) {
|
|
const extra = message.data.getLegacyString();
|
|
|
|
const realRoomObject = this.object.model.getValue<number>(RoomObjectVariable.FURNITURE_REAL_ROOM_OBJECT);
|
|
|
|
if (realRoomObject === 1) this.processDimmerData(extra);
|
|
|
|
super.processUpdateMessage(new ObjectDataUpdateMessage(this.getStateFromDimmerData(extra), message.data));
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
super.processUpdateMessage(message);
|
|
}
|
|
|
|
private getStateFromDimmerData(data: string): number {
|
|
if (!data) return 0;
|
|
|
|
const parts = data.split(",");
|
|
|
|
if (parts.length >= 5) return parseInt(parts[0]) - 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
private processDimmerData(data: string): void {
|
|
if (!data) return;
|
|
|
|
const parts = data.split(",");
|
|
|
|
if (parts.length >= 5) {
|
|
const state = this.getStateFromDimmerData(data);
|
|
const presetId = parseInt(parts[1]);
|
|
const effectId = parseInt(parts[2]);
|
|
const color = parts[3];
|
|
|
|
let colorCode = parseInt(color.substr(1), 16);
|
|
let brightness = parseInt(parts[4]);
|
|
|
|
if (!state) {
|
|
colorCode = 0xffffff;
|
|
brightness = 0xff;
|
|
}
|
|
|
|
if (this.eventDispatcher && this.object) {
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectDimmerStateUpdateEvent(this.object, state, presetId, effectId, colorCode, brightness));
|
|
|
|
this._roomColorUpdated = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override useObject(): void {
|
|
if (!this.object || !this.eventDispatcher) return;
|
|
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.DIMMER, this.object));
|
|
}
|
|
|
|
public override update(time: number): void {
|
|
super.update(time);
|
|
|
|
// if(this.object && this.object.model)
|
|
// {
|
|
// const realRoomObject = this.object.model.getValue<number>(RoomObjectVariable.FURNITURE_REAL_ROOM_OBJECT);
|
|
|
|
// if(realRoomObject === 1)
|
|
// {
|
|
// const data = this.object.model.getValue<string>(RoomObjectVariable.FURNITURE_DATA);
|
|
|
|
// if(data && data.length > 0)
|
|
// {
|
|
// this.object.model.setValue(RoomObjectVariable.FURNITURE_DATA, '');
|
|
|
|
// this.processDimmerData(data);
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
}
|