// package section -- типовая секция работы части игры (банк, арсенал и т.п.) package section import ( "fmt" "log" "sync" "wartank/pkg/alias" "wartank/pkg/components/lst_string" "wartank/pkg/scene" "wartank/pkg/section/down_time" "wartank/pkg/types" ) // Секция -- секция игры type Секция struct { *scene.Сцена времяОстат types.ИВремяОстат // Обратный отсчёт до окончания работы режима списСтр *lst_string.LstString // Список строк из сети для анализа секции блок sync.RWMutex } // НовСекция -- возвращает новую секцию игры func НовСекция(бот types.ИБот, сценаИмя alias.СценаИмя, стрКонтроль string) (*Секция, error) { log.Printf("НовСекция(): стрКонтроль=%q\n", стрКонтроль) сцена, ош := scene.НовСцена(бот, сценаИмя) if ош != nil { return nil, fmt.Errorf("НовСекция(): при создании ИСцена, ош=\n\t%w", ош) } сам := &Секция{ Сцена: сцена, времяОстат: down_time.НовВремОбрат(сцена, 5), } сам.списСтр, ош = lst_string.NewLstString(стрКонтроль) if ош != nil { return nil, fmt.Errorf("НовСекция(): in create *LstString, err=\n\t%w", ош) } return сам, nil } // СтрОбновить -- обновляет список строк секции по требованию func (сам *Секция) СтрОбновить(lstString []string) error { if err := сам.списСтр.Set(lstString); err != nil { return fmt.Errorf("Section.СтрОбновить(): при установке lstString, err=\n\t%w", err) } return nil } // СписПолучить -- возвращает список строк секции func (сам *Секция) СписПолучить() []string { return сам.списСтр.Get() } // ОбратВремяУст -- устанавливает новое значение обратного счётчика времени func (сам *Секция) ОбратВремяУст(время alias.Время) error { ош := сам.времяОстат.Уст(время) if ош != nil { return fmt.Errorf("Секция.ОбратВремяУст(): ош=\n\t%w", ош) } return nil } // Уст -- устанавливает новое значение обратного счётчика времени func (сам *Секция) Уст(времяСек alias.Время) error { if ош := сам.времяОстат.Уст(времяСек); ош != nil { return fmt.Errorf("Секция.ParseCountDown(): err=\n\t%w", ош) } // if err := сам.countDown.Set(sec); err != nil { // // } return nil } // ВремяОстат -- объект оставшегося времени func (сам *Секция) ВремяОстат() types.ИВремяОстат { сам.блок.RLock() defer сам.блок.RUnlock() return сам.времяОстат }