// package arena -- типовая арена работы части игры (банк, арсенал и т.п.) package arena import ( "fmt" "log" "sync" "wartank/pkg/alias" "wartank/pkg/arena/arena_context" "wartank/pkg/arena/arena_string" "wartank/pkg/arena/down_time" "wartank/pkg/types" ) // Арена -- арена игры type Арена struct { types.ИАренаКонтекст времяОстат types.ИВремяОстат // Обратный отсчёт до окончания работы режима списСтр *arena_string.АренаСтроки // Список строк из сети для анализа секции блок sync.RWMutex } // НовАрена -- возвращает новую арену игры func НовАрена(бот types.ИБот, сценаИмя alias.АренаИмя, стрКонтроль string) *Арена { log.Printf("НовАрена(): стрКонтроль=%q\n", стрКонтроль) аренаКонтекст := arena_context.НовАренаКонтекст(бот, сценаИмя) сам := &Арена{ ИАренаКонтекст: аренаКонтекст, времяОстат: down_time.НовВремОбрат(аренаКонтекст, 5), списСтр: arena_string.НовАренаСтроки(стрКонтроль), } _ = types.ИАрена(сам) return сам } // СтрОбновить -- обновляет список строк секции по требованию func (сам *Арена) СтрОбновить(lstString []string) error { if err := сам.списСтр.Set(lstString); err != nil { return fmt.Errorf("Арена.СтрОбновить(): при установке 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 (сам *Арена) ВремяОстат() types.ИВремяОстат { сам.блок.RLock() defer сам.блок.RUnlock() return сам.времяОстат }