zone.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // package zone -- игровая зона (ангар, база, бан, битва и т.п.)
  2. package zone
  3. import (
  4. "context"
  5. "fmt"
  6. "log"
  7. "wartank/pkg/types"
  8. )
  9. // Зона -- игровая зона (ангар, база, бан, битва и т.п.)
  10. type Зона struct {
  11. бот types.ИБот // Ссылка на бота зоны
  12. кнт context.Context
  13. фнОтмена func()
  14. имя string // Имя игровой зоны
  15. }
  16. // НовЗона -- возвращает новую игровую зону
  17. func НовЗона(бот types.ИБот, зонаИмя string) (*Зона, error) {
  18. { // Предусловия
  19. if бот == nil {
  20. return nil, fmt.Errorf("НовЗона(): IBot==nil")
  21. }
  22. if зонаИмя == "" {
  23. return nil, fmt.Errorf("НовЗона(): zoneName is empty")
  24. }
  25. }
  26. log.Printf("НовЗона(): name=%q\tzone=%q\n", бот.Имя(), зонаИмя)
  27. кнт, fnCancel := context.WithCancel(бот.Кнт())
  28. sf := &Зона{
  29. бот: бот,
  30. имя: зонаИмя,
  31. кнт: кнт,
  32. фнОтмена: fnCancel,
  33. }
  34. _ = types.ИСцена(sf)
  35. return sf, nil
  36. }
  37. // Кнт -- возвращает контекст игровой зоны
  38. func (sf *Зона) Кнт() context.Context {
  39. return sf.кнт
  40. }
  41. // Закончить -- отменяет контекст игровой зоны
  42. func (sf *Зона) Закончить() {
  43. sf.фнОтмена()
  44. }
  45. // Бот -- возвращает бота игровой зоны
  46. func (sf *Зона) Бот() types.ИБот {
  47. return sf.бот
  48. }
  49. // Имя -- возвращает имя зоны
  50. func (sf *Зона) Имя() string {
  51. return sf.имя
  52. }