arena_state.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // package arena_state -- состояние арены
  2. package arena_state
  3. import (
  4. "sync"
  5. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  6. "wartank/app/lev0/alias"
  7. "wartank/app/lev0/cons"
  8. . "wartank/app/lev0/types"
  9. )
  10. // СценаСостояние -- состояние сцены
  11. type АренаСостояние struct {
  12. знач alias.ААренаСостояние // Имя режима
  13. block sync.RWMutex
  14. }
  15. // НовСекцияРежим -- возвращает новый *СценаРежим
  16. func НовАренаСостояние() *АренаСостояние {
  17. сам := &АренаСостояние{
  18. знач: cons.РежимНеСуществует,
  19. }
  20. _ = ИАренаСостояние(сам)
  21. return сам
  22. }
  23. // СостояниеУст -- устанавливает состояние арены
  24. func (сам *АренаСостояние) Уст(состояние alias.ААренаСостояние) {
  25. сам.block.Lock()
  26. defer сам.block.Unlock()
  27. switch сам.знач {
  28. case cons.РежимНеСуществует:
  29. if состояние != cons.РежимАпгрейдПлатный {
  30. Hassert(false, "АренаСостояние.Уст(): нельзя из не существует перейти в '%v'", состояние)
  31. }
  32. case cons.РежимАпгрейд:
  33. if состояние == cons.РежимАпгрейдПлатный {
  34. сам.знач = состояние
  35. return
  36. }
  37. if состояние == cons.РежимОжидание {
  38. сам.знач = состояние
  39. return
  40. }
  41. case cons.РежимАпгрейдПлатный:
  42. if состояние == cons.РежимОжидание {
  43. сам.знач = состояние
  44. return
  45. }
  46. if состояние == cons.РежимАпгрейд {
  47. сам.знач = состояние
  48. return
  49. }
  50. case cons.РежимОжидание:
  51. if состояние == cons.РежимРабота {
  52. сам.знач = состояние
  53. return
  54. }
  55. if состояние == cons.РежимАпгрейдПлатный {
  56. сам.знач = состояние
  57. return
  58. }
  59. case cons.РежимРабота:
  60. if состояние == cons.РежимОжидание {
  61. сам.знач = состояние
  62. return
  63. }
  64. if состояние == cons.РежимАпгрейдПлатный {
  65. сам.знач = состояние
  66. return
  67. }
  68. default:
  69. Hassert(false, "АренаСостояние.Уст(): нельзя из '%v' перейти в '%v'", сам.знач, состояние)
  70. }
  71. сам.знач = состояние
  72. }
  73. // Состояние -- возвращает состояние арены
  74. func (сам *АренаСостояние) Получ() alias.ААренаСостояние {
  75. сам.block.RLock()
  76. defer сам.block.RUnlock()
  77. return сам.знач
  78. }