scene.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // package scene -- базовая сцена для любой сцены
  2. package scene
  3. import (
  4. "context"
  5. "fmt"
  6. "wartank/pkg/alias"
  7. "wartank/pkg/scene/scene_mode"
  8. "wartank/pkg/types"
  9. )
  10. type Сцена struct {
  11. бот types.ИБот
  12. сценаИмя alias.СценаИмя
  13. кнт context.Context
  14. фнОтмена func()
  15. режим types.ИСценаРежим
  16. }
  17. // НовСцена -- возвращает новую сцену
  18. func НовСцена(бот types.ИБот, сценаИмя alias.СценаИмя) (*Сцена, error) {
  19. if бот == nil {
  20. return nil, fmt.Errorf("НовСцена(): ИБот==nil")
  21. }
  22. if сценаИмя == "" {
  23. return nil, fmt.Errorf("НовСцена(): сценаИмя не задано")
  24. }
  25. кнт, фнОтмена := context.WithCancel(бот.Кнт())
  26. сам := &Сцена{
  27. бот: бот,
  28. сценаИмя: сценаИмя,
  29. кнт: кнт,
  30. фнОтмена: фнОтмена,
  31. режим: scene_mode.НовСценаРежим(),
  32. }
  33. _ = types.ИСцена(сам)
  34. return сам, nil
  35. }
  36. // СценаРежим -- текущий режим работы
  37. func (сам *Сцена) СценаРежим() types.ИСценаРежим {
  38. return сам.режим
  39. }
  40. // Отмена -- отменяет контекст сцены
  41. func (сам *Сцена) Отмена() {
  42. сам.фнОтмена()
  43. }
  44. // Кнт -- возвращает контекст сцены
  45. func (сам *Сцена) Контекст() context.Context {
  46. return сам.кнт
  47. }
  48. // Имя -- возвращает имя сцены
  49. func (сам *Сцена) Имя() alias.СценаИмя {
  50. return сам.сценаИмя
  51. }
  52. // Бот -- возвращает бота сцены
  53. func (сам *Сцена) Бот() types.ИБот {
  54. return сам.бот
  55. }