69 lines
2.9 KiB
TypeScript
69 lines
2.9 KiB
TypeScript
import {RoomObjectVariable} from "../../../../../api";
|
|
import {RoomObjectBadgeAssetEvent, RoomObjectEvent, RoomObjectWidgetRequestEvent} from "../../../../../events";
|
|
import {RoomObjectUpdateMessage} from "../../../../../room";
|
|
import {ObjectGroupBadgeUpdateMessage, ObjectSelectedMessage} from "../../../messages";
|
|
import {FurnitureBadgeDisplayLogic} from "./FurnitureBadgeDisplayLogic";
|
|
|
|
export class FurnitureAchievementResolutionLogic extends FurnitureBadgeDisplayLogic {
|
|
public static STATE_RESOLUTION_NOT_STARTED: number = 0;
|
|
public static STATE_RESOLUTION_IN_PROGRESS: number = 1;
|
|
public static STATE_RESOLUTION_ACHIEVED: number = 2;
|
|
public static STATE_RESOLUTION_FAILED: number = 3;
|
|
private static ACH_NOT_SET: string = "ach_0";
|
|
private static BADGE_VISIBLE_IN_STATE: number = 2;
|
|
|
|
public override getEventTypes(): string[] {
|
|
const types = [
|
|
RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_OPEN,
|
|
RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_ENGRAVING,
|
|
RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_FAILED,
|
|
RoomObjectBadgeAssetEvent.LOAD_BADGE,
|
|
];
|
|
|
|
return this.mergeTypes(super.getEventTypes(), types);
|
|
}
|
|
|
|
public override processUpdateMessage(message: RoomObjectUpdateMessage): void {
|
|
super.processUpdateMessage(message);
|
|
|
|
if (message instanceof ObjectGroupBadgeUpdateMessage) {
|
|
if (message.assetName !== "loading_icon") {
|
|
this.object.model.setValue(RoomObjectVariable.FURNITURE_BADGE_VISIBLE_IN_STATE, FurnitureAchievementResolutionLogic.BADGE_VISIBLE_IN_STATE);
|
|
}
|
|
}
|
|
|
|
if (message instanceof ObjectSelectedMessage) {
|
|
if (!this.eventDispatcher || !this.object) return;
|
|
|
|
this.eventDispatcher.dispatchEvent(new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.CLOSE_FURNI_CONTEXT_MENU, this.object));
|
|
}
|
|
}
|
|
|
|
public override useObject(): void {
|
|
if (!this.object || !this.eventDispatcher) return;
|
|
|
|
let event: RoomObjectEvent = null;
|
|
|
|
switch (this.object.getState(0)) {
|
|
case FurnitureAchievementResolutionLogic.STATE_RESOLUTION_NOT_STARTED:
|
|
case FurnitureAchievementResolutionLogic.STATE_RESOLUTION_IN_PROGRESS:
|
|
event = new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_OPEN, this.object);
|
|
break;
|
|
case FurnitureAchievementResolutionLogic.STATE_RESOLUTION_ACHIEVED:
|
|
event = new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_ENGRAVING, this.object);
|
|
break;
|
|
case FurnitureAchievementResolutionLogic.STATE_RESOLUTION_FAILED:
|
|
event = new RoomObjectWidgetRequestEvent(RoomObjectWidgetRequestEvent.ACHIEVEMENT_RESOLUTION_FAILED, this.object);
|
|
break;
|
|
}
|
|
|
|
if (event) this.eventDispatcher.dispatchEvent(event);
|
|
}
|
|
|
|
protected override updateBadge(badgeId: string): void {
|
|
if (badgeId === FurnitureAchievementResolutionLogic.ACH_NOT_SET) return;
|
|
|
|
super.updateBadge(badgeId);
|
|
}
|
|
}
|