// package zone -- игровая зона (ангар, база, бан, битва и т.п.) package zone import ( "context" "fmt" "log" "wartank/pkg/types" ) // Зона -- игровая зона (ангар, база, бан, битва и т.п.) type Зона struct { бот types.ИБот // Ссылка на бота зоны кнт context.Context фнОтмена func() имя string // Имя игровой зоны } // НовЗона -- возвращает новую игровую зону func НовЗона(бот types.ИБот, зонаИмя string) (*Зона, error) { { // Предусловия if бот == nil { return nil, fmt.Errorf("НовЗона(): IBot==nil") } if зонаИмя == "" { return nil, fmt.Errorf("НовЗона(): zoneName is empty") } } log.Printf("НовЗона(): name=%q\tzone=%q\n", бот.Имя(), зонаИмя) кнт, fnCancel := context.WithCancel(бот.Кнт()) sf := &Зона{ бот: бот, имя: зонаИмя, кнт: кнт, фнОтмена: fnCancel, } _ = types.ИСцена(sf) return sf, nil } // Кнт -- возвращает контекст игровой зоны func (sf *Зона) Кнт() context.Context { return sf.кнт } // Закончить -- отменяет контекст игровой зоны func (sf *Зона) Закончить() { sf.фнОтмена() } // Бот -- возвращает бота игровой зоны func (sf *Зона) Бот() types.ИБот { return sf.бот } // Имя -- возвращает имя зоны func (sf *Зона) Имя() string { return sf.имя }