section.go 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // package section -- типовая секция работы части игры (банк, арсенал и т.п.)
  2. package section
  3. import (
  4. "fmt"
  5. "log"
  6. "wartank/pkg/components/lst_string"
  7. "wartank/pkg/components/parsetime"
  8. "wartank/pkg/components/section/down_time"
  9. "wartank/pkg/components/section/section_mode"
  10. "wartank/pkg/components/section/zone"
  11. "wartank/pkg/types"
  12. )
  13. // Section -- секция игры
  14. type Section struct {
  15. *zone.Zone
  16. countDown types.ИВремяОстат // Обратный отсчёт до окончания работы режима
  17. mode types.ИРежимРаботы // Объект режима работы
  18. lstString *lst_string.LstString // Список строк из сети для анализа секции
  19. }
  20. // NewSection -- возвращает новую секцию игры
  21. func NewSection(bot types.ИБот, zoneName, strControl string) (*Section, error) {
  22. log.Printf("NewSection(): strControl=%q\n", strControl)
  23. zone, err := zone.NewZone(bot, zoneName)
  24. if err != nil {
  25. return nil, fmt.Errorf("NewSection(): in create IZone, err=\n\t%w", err)
  26. }
  27. sf := &Section{
  28. Zone: zone,
  29. countDown: down_time.НовВремОбрат(zone, 5),
  30. mode: section_mode.NewSectionMode(),
  31. }
  32. sf.lstString, err = lst_string.NewLstString(strControl)
  33. if err != nil {
  34. return nil, fmt.Errorf("NewSection(): in create *LstString, err=\n\t%w", err)
  35. }
  36. return sf, nil
  37. }
  38. // СтрОбновить -- обновляет список строк секции по требованию
  39. func (sf *Section) СтрОбновить(lstString []string) error {
  40. if err := sf.lstString.Set(lstString); err != nil {
  41. return fmt.Errorf("Section.СтрОбновить(): при установке lstString, err=\n\t%w", err)
  42. }
  43. return nil
  44. }
  45. // СписПолучить -- возвращает список строк секции
  46. func (sf *Section) СписПолучить() []string {
  47. return sf.lstString.Get()
  48. }
  49. // SetCountDown -- устанавливает новое значение обратного счётчика времени (int)
  50. func (sf *Section) SetCountDown(sec int) error {
  51. sf.countDown = down_time.НовВремОбрат(sf, sec)
  52. // if err := sf.countDown.Set(sec); err != nil {
  53. // return fmt.Errorf("Section.SetCountDown(): err=\n\t%w", err)
  54. // }
  55. return nil
  56. }
  57. // ParseCountDown -- устанавливает новое значение обратного счётчика времени (string)
  58. func (sf *Section) ParseCountDown(sec string) error {
  59. pt := parsetime.NewParseTime()
  60. pt.Parse(sec)
  61. _sec := pt.Get()
  62. sf.countDown = down_time.НовВремОбрат(sf, _sec)
  63. // if err := sf.countDown.Set(sec); err != nil {
  64. // return fmt.Errorf("Section.SetCountDown(): err=\n\t%w", err)
  65. // }
  66. return nil
  67. }
  68. // ВремяОпрос -- объект оставшегося времени
  69. func (sf *Section) ВремяОпрос() types.ИВремяОстат {
  70. return sf.countDown
  71. }
  72. // РежимТекущ -- текущий режим работы
  73. func (sf *Section) РежимТекущ() types.ИРежимРаботы {
  74. return sf.mode
  75. }