package machine import ( "github.com/mohae/deepcopy" "github.com/tomas-qstarrs/boost/randx" "mongo.games.com/game/gamesrv/slotspkg/internal/module/shared" "mongo.games.com/game/gamesrv/slotspkg/slots/formation" "mongo.games.com/game/gamesrv/slotspkg/slots/intf" ) // Formation implements intf.Formation type Formation struct { *shared.Formation OriginFormation *formation.Formation Machine *Machine } func asFormationIntf(m *Machine, f *shared.Formation, o *formation.Formation) intf.Formation { formation := &Formation{ Formation: f, OriginFormation: o, Machine: m, } return formation } // GetWin gets formation win in after spin func (f *Formation) GetWin() int64 { return f.Win } // SetWin sets formation win in after spin func (f *Formation) SetWin(win int64) intf.Formation { f.Win = win return f } // GetInitSymbols gets origin symbols func (f *Formation) GetInitSymbols() []int64 { initSymbols := make([]int64, len(f.InitSymbols)) copy(initSymbols, f.InitSymbols) return initSymbols } func (f *Formation) GetInitMatrixFormattedSymbols() [][]int64 { return formation.FormatSymbols(f.InitSymbols, f.OriginFormation.MatrixForm) } // SetInitSymbols sets origin symbols func (f *Formation) SetInitSymbols(symbols []int64) intf.Formation { f.InitSymbols = symbols return f } func (f *Formation) SetInitFormattedSymbols(symbols [][]int64) intf.Formation { f.InitSymbols = formation.DeformatSymbols(symbols) return f } // GetSymbols gets origin symbols func (f *Formation) GetSymbols() []int64 { symbols := make([]int64, len(f.OriginFormation.Symbols)) copy(symbols, f.OriginFormation.Symbols) return symbols } // GetSymbolsAbove gets origin SymbolsAbove func (f *Formation) GetSymbolsAbove() []int64 { symbolsAbove := make([]int64, len(f.OriginFormation.SymbolsAbove)) copy(symbolsAbove, f.OriginFormation.SymbolsAbove) return symbolsAbove } // GetSymbolsBelow gets origin SymbolsBelow func (f *Formation) GetSymbolsBelow() []int64 { symbolsBelow := make([]int64, len(f.OriginFormation.SymbolsBelow)) copy(symbolsBelow, f.OriginFormation.SymbolsBelow) return symbolsBelow } // SetSymbols sets origin symbols func (f *Formation) SetSymbols(symbols []int64) intf.Formation { f.OriginFormation.Symbols = symbols return f } // GetReelFormattedSymbols gets origin symbols and places them into specific form func (f *Formation) GetReelFormattedSymbols() [][]int64 { return formation.FormatSymbols(f.OriginFormation.Symbols, f.OriginFormation.ReelForm) } // GetMatrixFormattedSymbols gets origin symbols and places them into specific form func (f *Formation) GetMatrixFormattedSymbols() [][]int64 { return formation.FormatSymbols(f.OriginFormation.Symbols, f.OriginFormation.MatrixForm) } // SetFormattedSymbols sets formed origin symbols func (f *Formation) SetFormattedSymbols(symbols [][]int64) intf.Formation { f.OriginFormation.Symbols = formation.DeformatSymbols(symbols) return f } // GetCheatSymbols gets cheat symbols func (f *Formation) GetCheatSymbols() []int64 { cheatSymbols := make([]int64, len(f.OriginFormation.CheatSymbols)) copy(cheatSymbols, f.OriginFormation.CheatSymbols) return cheatSymbols } // SetCheatSymbols sets cheat symbols func (f *Formation) SetCheatSymbols(symbols []int64) intf.Formation { f.OriginFormation.CheatSymbols = symbols return f } // GetReelFormattedCheatSymbols gets cheat symbols and places them into specific form func (f *Formation) GetReelFormattedCheatSymbols() [][]int64 { return formation.FormatSymbols(f.OriginFormation.CheatSymbols, f.OriginFormation.ReelForm) } // SetFormattedCheatSymbols sets formed cheat symbols func (f *Formation) SetFormattedCheatSymbols(symbols [][]int64) intf.Formation { f.OriginFormation.CheatSymbols = formation.DeformatSymbols(symbols) return f } // GetDisplaySymbols gets display symbols func (f *Formation) GetDisplaySymbols() []int64 { displaySymbols := make([]int64, len(f.Formation.DisplaySymbols)) copy(displaySymbols, f.Formation.DisplaySymbols) return displaySymbols } // SetDisplaySymbols sets display symbols func (f *Formation) SetDisplaySymbols(symbols []int64) intf.Formation { f.Formation.DisplaySymbols = symbols return f } // GetReelFormattedDisplaySymbols gets display symbols and places them into specific form func (f *Formation) GetReelFormattedDisplaySymbols() [][]int64 { return formation.FormatSymbols(f.Formation.DisplaySymbols, f.OriginFormation.ReelForm) } // SetFormattedDisplaySymbols sets formed origin symbols func (f *Formation) SetFormattedDisplaySymbols(symbols [][]int64) intf.Formation { f.Formation.DisplaySymbols = formation.DeformatSymbols(symbols) return f } // GetOriginDisplaySymbols gets display symbols func (f *Formation) GetOriginDisplaySymbols() []int64 { displaySymbols := make([]int64, len(f.OriginFormation.DisplaySymbols)) copy(displaySymbols, f.OriginFormation.DisplaySymbols) return displaySymbols } // SetOriginDisplaySymbols sets display symbols func (f *Formation) SetOriginDisplaySymbols(symbols []int64) intf.Formation { f.OriginFormation.DisplaySymbols = symbols return f } // GetReelFormattedOriginDisplaySymbols gets display symbols and places them into specific form func (f *Formation) GetReelFormattedOriginDisplaySymbols() [][]int64 { return formation.FormatSymbols(f.OriginFormation.DisplaySymbols, f.OriginFormation.ReelForm) } // SetFormattedOriginDisplaySymbols sets formed origin symbols func (f *Formation) SetFormattedOriginDisplaySymbols(symbols [][]int64) intf.Formation { f.OriginFormation.DisplaySymbols = formation.DeformatSymbols(symbols) return f } // GetFinalSymbols gets origin symbols func (f *Formation) GetFinalSymbols() []int64 { finalSymbols := make([]int64, len(f.Formation.FinalSymbols)) copy(finalSymbols, f.Formation.FinalSymbols) return finalSymbols } // SetFinalSymbols sets final symbols func (f *Formation) SetFinalSymbols(symbols []int64) intf.Formation { f.Formation.FinalSymbols = symbols return f } // GetMatrixFormattedFinalSymbols gets final symbols and places them into specific form func (f *Formation) GetMatrixFormattedFinalSymbols() [][]int64 { return formation.FormatSymbols(f.FinalSymbols, f.OriginFormation.MatrixForm) } // GetMatrixFormattedBySymbols gets symbols and places them into specific form func (f *Formation) GetMatrixFormattedBySymbols(symbols []int64) [][]int64 { return formation.FormatSymbols(symbols, f.OriginFormation.MatrixForm) } // SetFormattedFinalSymbols sets formed final symbols func (f *Formation) SetFormattedFinalSymbols(symbols [][]int64) intf.Formation { f.Formation.FinalSymbols = formation.DeformatSymbols(symbols) return f } // GetLinkPositions gets link positions func (f *Formation) GetLinkPositions() []*shared.LinkPositions { return deepcopy.Copy(f.Formation.LinkPositions).([]*shared.LinkPositions) } // SetLinkPositions sets link positions func (f *Formation) SetLinkPositions(linkPositions []*shared.LinkPositions) intf.Formation { f.Formation.LinkPositions = linkPositions return f } // CoordsToPosition converts row & col to pos func (f *Formation) CoordsToPosition(row int64, col int64) int64 { coords := formation.Coords{ Row: row, Col: col, } form := f.OriginFormation.FormationDesc.MatrixDesc.Form return coords.ToPos(form) } // PositionToCoords converts pos to row & col func (f *Formation) PositionToCoords(position int64) (int64, int64) { form := f.OriginFormation.FormationDesc.MatrixDesc.Form coords := &formation.Coords{} coords.FromPos(form, position) return coords.Row, coords.Col } // GetLineSymbols gets line symbols func (f *Formation) GetLineSymbols() [][]int64 { return f.OriginFormation.LineSymbols } // GetLinePays gets line pays func (f *Formation) GetLinePays() []float64 { return f.OriginFormation.LinePays } // GetLineCount gets line count func (f *Formation) GetLineCount() int64 { return f.OriginFormation.FormationDesc.MatrixDesc.LineCount } // GetLineCount gets all Lines func (f *Formation) GetLineLines() [][]int64 { return f.OriginFormation.FormationDesc.MatrixDesc.Lines } // GetRandPositions gets RandPositions func (f *Formation) GetRandPositions() []int64 { return f.OriginFormation.RandPositions } // GetReelSymbols gets ReelSymbols func (f *Formation) GetReelSymbols(reelIndex int64, startIdx int64, size int64) []int64 { if size == 0 { return []int64{} } reelDesc := f.OriginFormation.FormationDesc.ReelsDesc[int(reelIndex)] length := int64(len(reelDesc.Reel)) for startIdx < 0 { startIdx += length } var symbols = make([]int64, 0) for symbolIdx := startIdx; symbolIdx < startIdx+size; symbolIdx++ { symbol := reelDesc.Reel[symbolIdx%length] symbols = append(symbols, symbol) } return symbols } func (f *Formation) GetMatrixForm() []int64 { return f.OriginFormation.MatrixForm } func (f *Formation) ResetRandSymbols(r *randx.Randx) { f.OriginFormation.ResetRandSymbols(r) } func (f *Formation) ResetRandSymbolsByIndex(r *randx.Randx) { f.OriginFormation.ResetRandSymbolsByIndex(r) } func (f *Formation) GetRewardInfo() []*shared.RewardInfo { RewardInfo := make([]*shared.RewardInfo, len(f.Formation.RewardInfo)) copy(RewardInfo, f.Formation.RewardInfo) return RewardInfo } func (f *Formation) SetRewardInfo(ri []*shared.RewardInfo) { f.Formation.RewardInfo = ri } func (f *Formation) GetNewNodeType() string { return f.NewNodeType } func (f *Formation) SetNewNodeType(nodeType string) { f.NewNodeType = nodeType }