UNPKG

pokie

Version:

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

85 lines 4.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VideoSlotWinCalculator = void 0; const pokie_1 = require("pokie"); class VideoSlotWinCalculator { constructor(conf) { this.winningLines = {}; this.winningScatters = {}; this.config = conf; } calculateWin(bet, symbolsCombination) { if (this.config.getAvailableBets().some((availableBet) => availableBet === bet)) { this.symbolsCombination = symbolsCombination; this.calculateWinningLinesAndScatters(bet); } else { throw new Error(`Bet ${bet} is not specified at paytable`); } } getWinningLines() { return this.winningLines; } getWinningScatters() { return this.winningScatters; } getWinAmount() { return this.getLinesWinning() + this.getScattersWinning(); } getLinesWinning() { return Object.values(this.getWinningLines()).reduce((sum, line) => sum + line.getWinAmount(), 0); } getScattersWinning() { return Object.values(this.getWinningScatters()).reduce((sum, scatter) => sum + scatter.getWinAmount(), 0); } calculateWinningLinesAndScatters(bet) { let line; this.winningLines = {}; const winningLinesIds = pokie_1.SymbolsCombinationsAnalyzer.getWinningLinesIds(this.symbolsCombination.toMatrix(), this.config.getLinesDefinitions(), this.config.getLinesPatterns().toArray(), this.config.getWildSymbols()); winningLinesIds.forEach((lineId) => { line = this.generateWinningLine(bet, lineId); if (!this.config.getScatterSymbols().some((scatter) => scatter === line.getSymbolId()) && line.getWinAmount() > 0) { this.winningLines[line.getLineId()] = line; } }); this.winningScatters = this.generateWinningScatters(bet); } generateWinningLine(bet, lineId) { const definition = this.config.getLinesDefinitions().getLineDefinition(lineId); const symbolsLine = pokie_1.SymbolsCombinationsAnalyzer.getSymbolsForDefinition(this.symbolsCombination.toMatrix(), definition); const pattern = pokie_1.SymbolsCombinationsAnalyzer.getMatchingPattern(symbolsLine, this.config.getLinesPatterns().toArray(), this.config.getWildSymbols()); const symbolsPositions = pattern.reduce((acc, value, index) => { if (value === 1) { acc.push(index); } return acc; }, []); const symbolId = pokie_1.SymbolsCombinationsAnalyzer.getWinningSymbolId(symbolsLine, pattern, this.config.getWildSymbols()); const wildSymbolsPositions = pokie_1.SymbolsCombinationsAnalyzer.getWildSymbolsPositions(symbolsLine, pattern, this.config.getWildSymbols()); const winAmount = this.getWinAmountForSymbol(bet, symbolId, symbolsPositions.length); return new pokie_1.WinningLine(winAmount, definition, pattern, lineId, symbolsPositions, wildSymbolsPositions, symbolId); } getWinAmountForSymbol(bet, symbolId, numOfWinningSymbols) { return this.config.getPaytable().getWinAmountForSymbol(symbolId, numOfWinningSymbols, bet); } generateWinningScatters(bet) { const rv = {}; if (this.config.getScatterSymbols() !== null) { for (const scatter of this.config.getScatterSymbols()) { const curScatterSymbolId = scatter; const curScatterSymbolsPositions = this.getScatterSymbolsPositions(curScatterSymbolId); const winAmount = this.getWinAmountForSymbol(bet, curScatterSymbolId, curScatterSymbolsPositions.length); if (winAmount > 0) { rv[curScatterSymbolId] = new pokie_1.WinningScatter(curScatterSymbolId, curScatterSymbolsPositions, winAmount); } } } return rv; } getScatterSymbolsPositions(symbolId) { return pokie_1.SymbolsCombinationsAnalyzer.getScatterSymbolsPositions(this.symbolsCombination.toMatrix(), symbolId); } } exports.VideoSlotWinCalculator = VideoSlotWinCalculator; //# sourceMappingURL=VideoSlotWinCalculator.js.map