game_sync/gamesrv/slotspkg/slots/machine/formation.go

290 lines
8.6 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
}
// 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)
}
// 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
}