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.
 
 
 
 
AdLike2048/assets/mx/module/merge/events/MergeEvents.ts

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 };
},
};