| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // 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.РежимНеСуществует:
- Hassert(состояние == cons.РежимПостроено, "АренаСостояние.Уст(): нельзя из 'не существует' перейти в '%v'", состояние)
- case cons.РежимПостроено:
- switch состояние {
- case cons.РежимАпгрейд, cons.РежимАпгрейдПлатный, cons.РежимОжидание, cons.РежимРабота, cons.РежимЗабрать:
- сам.знач = состояние
- default:
- Hassert(false, "АренаСостояние.Уст(): нельзя из 'построено' перейти в '%v'", состояние)
- }
- case cons.РежимАпгрейд:
- switch состояние {
- case cons.РежимАпгрейдПлатный, cons.РежимОжидание:
- сам.знач = состояние
- return
- default:
- Hassert(false, "АренаСостояние.Уст(): нельзя из 'апгрейд' перейти в '%v'", состояние)
- }
- case cons.РежимАпгрейдПлатный:
- if состояние == cons.РежимОжидание {
- сам.знач = состояние
- return
- }
- if состояние == cons.РежимАпгрейд {
- сам.знач = состояние
- return
- }
- case cons.РежимОжидание:
- if состояние == cons.РежимРабота {
- сам.знач = состояние
- return
- }
- if состояние == cons.РежимАпгрейдПлатный {
- сам.знач = состояние
- return
- }
- case cons.РежимРабота:
- Hassert(состояние == cons.РежимЗабрать, "АренаСостояние.Уст(): нельзя из 'работа' перейти в '%v'", состояние)
- case cons.РежимЗабрать:
- Hassert(состояние == cons.РежимОжидание, "АренаСостояние.Уст(): нельзя из 'забрать' перейти в '%v'", состояние)
- default:
- Hassert(false, "АренаСостояние.Уст(): нельзя из '%v' перейти в '%v'", сам.знач, состояние)
- }
- сам.знач = состояние
- }
- // Состояние -- возвращает состояние арены
- func (сам *АренаСостояние) Получ() alias.ААренаСостояние {
- сам.block.RLock()
- defer сам.block.RUnlock()
- return сам.знач
- }
|