You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.7 KiB
58 lines
2.7 KiB
import type { ComposedUnit, PlaceRejectReason } from '../types/MergeTypes';
|
|
import { MergeEventType } from './MergeEventType';
|
|
|
|
export type MergeEvent =
|
|
| { type: MergeEventType.BagRefreshed; playEntrance?: boolean }
|
|
| { type: MergeEventType.BagSlotMoved; fromSlot: number; toSlot: number }
|
|
| { type: MergeEventType.TilePlaced; gridIndex: number; weapon2Id: number }
|
|
| { type: MergeEventType.TileMoved; fromGrid: number; toGrid: number }
|
|
| { type: MergeEventType.TileReturned; gridIndex: number; bagSlot: number }
|
|
| { type: MergeEventType.ComposeChanged; compositions: ComposedUnit[] }
|
|
| { type: MergeEventType.BagMerged; slotIndex: number; weapon1Id: number; level: number }
|
|
| { type: MergeEventType.MapUpgraded; gridIndex: number; weapon1Id: number; level: number }
|
|
| {
|
|
type: MergeEventType.GlyphRewritten;
|
|
target: { kind: 'map'; gridIndex: number } | { kind: 'bag'; slotIndex: number };
|
|
weapon2Id: number;
|
|
level: number;
|
|
}
|
|
| { type: MergeEventType.PlaceRejected; reason: PlaceRejectReason };
|
|
|
|
export type MergeEventListener = (event: MergeEvent) => void;
|
|
|
|
export const MergeEventFactory = {
|
|
bagRefreshed(playEntrance = true): MergeEvent {
|
|
return { type: MergeEventType.BagRefreshed, playEntrance };
|
|
},
|
|
bagSlotMoved(fromSlot: number, toSlot: number): MergeEvent {
|
|
return { type: MergeEventType.BagSlotMoved, fromSlot, toSlot };
|
|
},
|
|
tilePlaced(gridIndex: number, weapon2Id: number): MergeEvent {
|
|
return { type: MergeEventType.TilePlaced, gridIndex, weapon2Id };
|
|
},
|
|
tileMoved(fromGrid: number, toGrid: number): MergeEvent {
|
|
return { type: MergeEventType.TileMoved, fromGrid, toGrid };
|
|
},
|
|
tileReturned(gridIndex: number, bagSlot: number): MergeEvent {
|
|
return { type: MergeEventType.TileReturned, gridIndex, bagSlot };
|
|
},
|
|
composeChanged(compositions: ComposedUnit[]): MergeEvent {
|
|
return { type: MergeEventType.ComposeChanged, compositions };
|
|
},
|
|
bagMerged(slotIndex: number, weapon1Id: number, level: number): MergeEvent {
|
|
return { type: MergeEventType.BagMerged, slotIndex, weapon1Id, level };
|
|
},
|
|
mapUpgraded(gridIndex: number, weapon1Id: number, level: number): MergeEvent {
|
|
return { type: MergeEventType.MapUpgraded, gridIndex, weapon1Id, level };
|
|
},
|
|
glyphRewritten(
|
|
target: { kind: 'map'; gridIndex: number } | { kind: 'bag'; slotIndex: number },
|
|
weapon2Id: number,
|
|
level: number,
|
|
): MergeEvent {
|
|
return { type: MergeEventType.GlyphRewritten, target, weapon2Id, level };
|
|
},
|
|
placeRejected(reason: PlaceRejectReason): MergeEvent {
|
|
return { type: MergeEventType.PlaceRejected, reason };
|
|
},
|
|
};
|
|
|