// package arena_state -- состояние арены package arena_state import ( "sync" . "gitp78su.ipnodns.ru/svi/kern/kc/helpers" "wartank/app/lev0/alias" "wartank/app/lev0/cons" . "wartank/app/lev0/types" ) // СценаСостояние -- состояние сцены type АренаСостояние struct { знач alias.ААренаСостояние // Имя режима block sync.RWMutex } // НовСекцияРежим -- возвращает новый *СценаРежим func НовАренаСостояние() *АренаСостояние { сам := &АренаСостояние{ знач: cons.РежимНеСуществует, } _ = ИАренаСостояние(сам) return сам } // СостояниеУст -- устанавливает состояние арены func (сам *АренаСостояние) Уст(состояние alias.ААренаСостояние) { сам.block.Lock() defer сам.block.Unlock() switch сам.знач { case cons.РежимНеСуществует: if состояние != cons.РежимАпгрейдПлатный { Hassert(false, "АренаСостояние.Уст(): нельзя из не существует перейти в '%v'", состояние) } case cons.РежимАпгрейд: if состояние == cons.РежимАпгрейдПлатный { сам.знач = состояние return } if состояние == cons.РежимОжидание { сам.знач = состояние return } case cons.РежимАпгрейдПлатный: if состояние == cons.РежимОжидание { сам.знач = состояние return } if состояние == cons.РежимАпгрейд { сам.знач = состояние return } case cons.РежимОжидание: if состояние == cons.РежимРабота { сам.знач = состояние return } if состояние == cons.РежимАпгрейдПлатный { сам.знач = состояние return } case cons.РежимРабота: if состояние == cons.РежимОжидание { сам.знач = состояние return } if состояние == cons.РежимАпгрейдПлатный { сам.знач = состояние return } default: Hassert(false, "АренаСостояние.Уст(): нельзя из '%v' перейти в '%v'", сам.знач, состояние) } сам.знач = состояние } // Состояние -- возвращает состояние арены func (сам *АренаСостояние) Получ() alias.ААренаСостояние { сам.block.RLock() defer сам.block.RUnlock() return сам.знач }