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