pokie
Version:
A server-side video slot game logic framework for JavaScript and TypeScript.
142 lines (115 loc) • 4.36 kB
text/typescript
import {
GameSession,
GameSessionHandling,
LinesDefinitionsDescribing,
LinesPatternsDescribing,
PaytableRepresenting,
SymbolsCombination,
SymbolsCombinationDescribing,
SymbolsCombinationsGenerating,
SymbolsCombinationsGenerator,
SymbolsSequenceDescribing,
VideoSlotConfig,
VideoSlotConfigRepresenting,
VideoSlotSessionHandling,
VideoSlotWinCalculating,
VideoSlotWinCalculator,
WinningLineDescribing,
WinningScatterDescribing,
} from "pokie";
export class VideoSlotSession implements VideoSlotSessionHandling {
private readonly baseSession: GameSessionHandling;
private readonly config: VideoSlotConfigRepresenting;
private readonly combinationsGenerator: SymbolsCombinationsGenerating;
private readonly winCalculator: VideoSlotWinCalculating;
private winAmount = 0;
private symbolsCombination: SymbolsCombinationDescribing = new SymbolsCombination();
constructor(
config: VideoSlotConfigRepresenting = new VideoSlotConfig(),
combinationsGenerator: SymbolsCombinationsGenerating = new SymbolsCombinationsGenerator(config),
winCalculator: VideoSlotWinCalculating = new VideoSlotWinCalculator(config),
baseSession: GameSessionHandling = new GameSession(config),
) {
this.config = config;
this.combinationsGenerator = combinationsGenerator;
this.winCalculator = winCalculator;
this.baseSession = baseSession;
this.symbolsCombination = this.combinationsGenerator.generateSymbolsCombination();
}
public getPaytable(): PaytableRepresenting {
return this.config.getPaytable();
}
public getSymbolsCombination(): SymbolsCombinationDescribing {
return this.symbolsCombination;
}
public getWinningLines(): Record<number, WinningLineDescribing> {
return this.winCalculator.getWinningLines();
}
public getWinningScatters(): Record<string, WinningScatterDescribing> {
return this.winCalculator.getWinningScatters();
}
public getSymbolsSequences(): SymbolsSequenceDescribing[] {
return this.config.getSymbolsSequences();
}
public getReelsSymbolsNumber(): number {
return this.config.getReelsSymbolsNumber();
}
public getReelsNumber(): number {
return this.config.getReelsNumber();
}
public getAvailableSymbols(): string[] {
return [...this.config.getAvailableSymbols()];
}
public getCreditsAmount(): number {
return this.baseSession.getCreditsAmount();
}
public setCreditsAmount(creditsAmount: number): void {
this.baseSession.setCreditsAmount(creditsAmount);
}
public getWinAmount(): number {
return this.winAmount;
}
public getLinesWinning(): number {
return this.winCalculator.getLinesWinning();
}
public getScattersWinning(): number {
return this.winCalculator.getScattersWinning();
}
public getAvailableBets(): number[] {
return [...this.config.getAvailableBets()];
}
public getBet(): number {
return this.baseSession.getBet();
}
public setBet(bet: number): void {
this.baseSession.setBet(bet);
}
public canPlayNextGame(): boolean {
return this.baseSession.canPlayNextGame();
}
public play(): void {
this.baseSession.play();
this.symbolsCombination = this.combinationsGenerator.generateSymbolsCombination();
this.winCalculator.calculateWin(this.getBet(), this.symbolsCombination);
this.winAmount = this.winCalculator.getWinAmount();
this.setCreditsAmount(this.getCreditsAmount() + this.winAmount);
}
public isSymbolWild(symbolId: string): boolean {
return this.config.isSymbolWild(symbolId);
}
public isSymbolScatter(symbolId: string): boolean {
return this.config.isSymbolScatter(symbolId);
}
public getWildSymbols(): string[] {
return this.config.getWildSymbols();
}
public getScatterSymbols(): string[] {
return this.config.getScatterSymbols();
}
public getLinesDefinitions(): LinesDefinitionsDescribing {
return this.config.getLinesDefinitions();
}
public getLinesPatterns(): LinesPatternsDescribing {
return this.config.getLinesPatterns();
}
}