76 lines
3.2 KiB
TypeScript
76 lines
3.2 KiB
TypeScript
import {IRoomGeometry, MouseEventType, RoomObjectVariable, StringDataType} from "../../../../../api";
|
|
import {RoomObjectBadgeAssetEvent, RoomObjectWidgetRequestEvent, RoomSpriteMouseEvent} from "../../../../../events";
|
|
import {GetTickerTime} from "../../../../../pixi-proxy";
|
|
import {RoomObjectUpdateMessage} from "../../../../../room";
|
|
import {ObjectDataUpdateMessage, ObjectGroupBadgeUpdateMessage, ObjectSelectedMessage} from "../../../messages";
|
|
import {FurnitureMultiStateLogic} from "./FurnitureMultiStateLogic";
|
|
|
|
export class FurnitureGuildCustomizedLogic extends FurnitureMultiStateLogic {
|
|
public static GROUPID_KEY: number = 1;
|
|
public static BADGE_KEY: number = 2;
|
|
public static COLOR1_KEY: number = 3;
|
|
public static COLOR2_KEY: number = 4;
|
|
|
|
public override getEventTypes(): string[] {
|
|
const types = [
|
|
RoomObjectBadgeAssetEvent.LOAD_BADGE,
|
|
RoomObjectWidgetRequestEvent.GUILD_FURNI_CONTEXT_MENU,
|
|
RoomObjectWidgetRequestEvent.CLOSE_FURNI_CONTEXT_MENU,
|
|
];
|
|
|
|
return this.mergeTypes(super.getEventTypes(), types);
|
|
}
|
|
|
|
public override processUpdateMessage(message: RoomObjectUpdateMessage): void {
|
|
super.processUpdateMessage(message);
|
|
|
|
if (message instanceof ObjectDataUpdateMessage) {
|
|
const data = message.data;
|
|
|
|
if (data instanceof StringDataType) {
|
|
this.updateGroupId(data.getValue(FurnitureGuildCustomizedLogic.GROUPID_KEY));
|
|
this.updateBadge(data.getValue(FurnitureGuildCustomizedLogic.BADGE_KEY));
|
|
this.updateColors(data.getValue(FurnitureGuildCustomizedLogic.COLOR1_KEY), data.getValue(FurnitureGuildCustomizedLogic.COLOR2_KEY));
|
|
}
|
|
} else if (message instanceof ObjectGroupBadgeUpdateMessage) {
|
|
if (message.assetName !== "loading_icon") {
|
|
this.object.model.setValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_ASSET_NAME, message.assetName);
|
|
|
|
this.update(GetTickerTime());
|
|
}
|
|
} else if (message instanceof ObjectSelectedMessage) {
|
|
if (!message.selected) {
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.CLOSE_FURNI_CONTEXT_MENU, this.object));
|
|
}
|
|
}
|
|
}
|
|
|
|
protected updateGroupId(id: string): void {
|
|
this.object.model.setValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_GUILD_ID, parseInt(id));
|
|
}
|
|
|
|
private updateBadge(badge: string): void {
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectBadgeAssetEvent(RoomObjectBadgeAssetEvent.LOAD_BADGE, this.object, badge, true));
|
|
}
|
|
|
|
public updateColors(color1: string, color2: string): void {
|
|
this.object.model.setValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_COLOR_1, parseInt(color1, 16));
|
|
this.object.model.setValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_COLOR_2, parseInt(color2, 16));
|
|
}
|
|
|
|
public override mouseEvent(event: RoomSpriteMouseEvent, geometry: IRoomGeometry): void {
|
|
if (!event || !geometry || !this.object) return;
|
|
|
|
switch (event.type) {
|
|
case MouseEventType.MOUSE_CLICK:
|
|
this.openContextMenu();
|
|
}
|
|
|
|
super.mouseEvent(event, geometry);
|
|
}
|
|
|
|
private openContextMenu(): void {
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.GUILD_FURNI_CONTEXT_MENU, this.object));
|
|
}
|
|
}
|