310 lines
9.3 KiB
Go
310 lines
9.3 KiB
Go
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
|
|
}
|