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() }