UNPKG

pokie

Version:

A server-side video slot game logic framework for JavaScript and TypeScript.

79 lines (74 loc) 3.07 kB
import { GameSessionSerializer, GameSessionSerializing, VideoSlotInitialNetworkData, VideoSlotRoundNetworkData, VideoSlotSessionHandling, VideoSlotSessionSerializing, } from "pokie"; export class VideoSlotSessionSerializer implements VideoSlotSessionSerializing { private readonly baseSerializer: GameSessionSerializing; constructor(baseSerializer: GameSessionSerializing = new GameSessionSerializer()) { this.baseSerializer = baseSerializer; } public getInitialData(session: VideoSlotSessionHandling): VideoSlotInitialNetworkData { const availableSymbols = session.getAvailableSymbols(); const reelsNumber = session.getReelsNumber(); const reelsSymbolsNumber = session.getReelsSymbolsNumber(); const paytable = session.getPaytable().toMap(); const linesDefinitions = {}; session .getLinesDefinitions() .getLinesIds() .forEach((lineId) => { linesDefinitions[lineId] = session.getLinesDefinitions().getLineDefinition(lineId); }); return { ...this.baseSerializer.getInitialData(session), ...this.getRoundData(session), availableSymbols, reelsNumber, reelsSymbolsNumber, paytable, linesDefinitions, }; } public getRoundData(session: VideoSlotSessionHandling): VideoSlotRoundNetworkData { const symbolsCombination = session.getSymbolsCombination(); const winningLines = session.getWinningLines(); const winningScatters = session.getWinningScatters(); const r: VideoSlotRoundNetworkData = { ...this.baseSerializer.getRoundData(session), reelsSymbols: symbolsCombination.toMatrix(), }; if (Object.keys(winningLines).length > 0) { r.winningLines = Object.values(winningLines).reduce((acc, line) => { return { ...acc, [line.getLineId()]: { definition: line.getDefinition(), pattern: line.getPattern(), symbolId: line.getSymbolId(), lineId: line.getLineId(), symbolsPositions: line.getSymbolsPositions(), wildSymbolsPositions: line.getWildSymbolsPositions(), winAmount: line.getWinAmount(), }, }; }, {}); } if (Object.keys(winningScatters).length > 0) { r.winningScatters = Object.values(winningScatters).reduce((acc, scatter) => { return { ...acc, [scatter.getSymbolId()]: { symbolId: scatter.getSymbolId(), symbolsPositions: scatter.getSymbolsPositions(), winAmount: scatter.getWinAmount(), }, }; }, {}); } return r; } }