game_sync/gamesrv/slotspkg/slots/entity/spin.go

130 lines
1.7 KiB
Go

package entity
// Init inits entity
func (e *Entity) Init() {
e.Deserialize()
// In case of Revert, check empty every time when doing `Deserialize`
if e.IsEmpty() {
e.InitAct()
e.InitRootNode()
e.PrepareNodeDesc()
e.MustNext()
e.PrepareRand()
e.PrepareNextNodeDesc()
e.PrepareNextOriginFormations()
e.InitNextFormations()
e.InitNextFeatures()
e.Callback.OnInit()
}
}
// Step moves a step on node tree
func (e *Entity) Step() {
e.StepInitialize()
e.MoveNext()
e.PreProcessing()
e.Spin()
e.PostProcessing()
e.MustNext()
e.StepFinalize()
}
// StepInitialize processes node tree before `MoveNext`
func (e *Entity) StepInitialize() {
e.PrepareStep()
e.PrepareRand()
e.PrepareNodeDesc()
e.ResetNextClass()
e.Callback.OnStepBegin()
}
// PreProcessing prepocesses before `Spin`
func (e *Entity) PreProcessing() {
e.ResetNextBaseBet()
e.ConsumeCoins()
e.PrepareNodeDesc()
e.ResetFormations()
e.ResetBaseBet()
//e.ResetClass()
e.PrepareOriginFormations()
e.PrepareCheatFormations()
e.ResetSingleBet()
e.ResetBet()
e.ResetWin()
e.Callback.BeforeSpin()
}
// Spin reads configs and spins current node
func (e *Entity) Spin() {
e.UpdateRound()
e.Rand()
e.CheatFormations()
e.Callback.BeforeDisplay()
e.Display()
e.Callback.AfterDisplay()
e.Link()
e.ConvertFormations()
}
// PostProcessing post-processes after `Spin`
func (e *Entity) PostProcessing() {
e.Callback.AfterSpin()
e.UpdateImageFormations()
e.UpdateImageFeatures()
e.UpdateWin()
e.Progress()
}
// StepFinalize processes node tree after `MustNext`
func (e *Entity) StepFinalize() {
e.PrepareNextNodeDesc()
e.InitNextFormations()
e.InitNextFeatures()
e.Callback.OnStepEnd()
e.ObtainCoins()
e.SyncRand()
}