| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // 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 сам.времяОстат
- }
|