import { ReelProps, SymbolsConfig, SymbolData } from '../types'; import { Symbol } from "." import { ObjectBase } from "dsg-engine"; export class Reel extends ObjectBase { protected _symbols: Symbol[] = []; private _distanceBetweenSymbols: number = 0; public get distanceBetweenSymbols(): number { return this._distanceBetweenSymbols; } public get symbols(): Symbol[] { return this._symbols; } public get props(): ReelProps { return this._props; } constructor ( public index: number, private _symbolsConfig: SymbolsConfig, private _props: ReelProps ) { super({}); this.createSymbols(); } /** * Populate reel with symbols. * Goes from bottom to top. */ private createSymbols() { for (let i = 0; i < this._props.symbolCount; i++) { const symbolData = this.getRandomSymbolData(); const symbol = new Symbol(symbolData, symbolData.name); symbol.scale.set(symbolData.scale); const offsetY = this._props.stepY + symbol.getBounds().height; this._distanceBetweenSymbols = offsetY; symbol.position.y = this._props.posY - i * offsetY; this.addChild(symbol); this._symbols.push(symbol); } } /** * Get random symbol data from symbols config * @returns symbol data */ private getRandomSymbolData() { const randomIndex = Math.floor(Math.random() * Object.keys(this._symbolsConfig).length); return this._symbolsConfig[randomIndex]; } public setSymbols(symbolsData: SymbolData[]) { if (symbolsData.length !== this._props.symbolCount) { throw new Error("Symbols data length does not match reel length"); } this._symbols.forEach((symbol, index) => { symbol.change(symbolsData[index]); }); } }