battle.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // package death_match -- объект схватки
  2. package death_match
  3. import (
  4. "fmt"
  5. "time"
  6. "wartank/pkg/section"
  7. "wartank/pkg/types"
  8. "wartank/server/serv_bots/warbot/angar/battle/battle_register"
  9. "wartank/server/serv_bots/warbot/angar/battle/battle_wait"
  10. "wartank/server/serv_bots/warbot/angar/battle/battle_worker"
  11. )
  12. // Сражение -- объект схватки
  13. type Схватка struct {
  14. *section.Секция
  15. бот types.ИБот
  16. клиент types.ИВебВоркер
  17. регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
  18. ожидание *battle_wait.СхваткаОжидание // Ождатель начала схватки
  19. действие *battle_worker.СхваткаИсполнитель // Исполнитель схватки
  20. }
  21. // НовСражение -- возвращает новый *Battle
  22. func НовСхватка(бот types.ИБот) (*Схватка, error) {
  23. секция, ош := section.НовСекция(бот, "Группа схватки", `<span>до начала `)
  24. if ош != nil {
  25. return nil, fmt.Errorf("НовСражение(): in create *Section, err=\n\t%w", ош)
  26. }
  27. сам := &Схватка{
  28. Секция: секция,
  29. бот: бот,
  30. клиент: бот.Сеть().ВебВоркер(),
  31. }
  32. {
  33. сам.регистрация, ош = battle_register.НовСражениеРегистрация(бот)
  34. if ош != nil {
  35. return nil, fmt.Errorf("НовСражение(): при создании регистратора на схватки, err=\n\t%w", ош)
  36. }
  37. сам.ожидание, ош = battle_wait.НовСражениеОжидание(бот)
  38. if ош != nil {
  39. return nil, fmt.Errorf("НовСражение(): при создании ожидателя схватки, err=\n\t%w", ош)
  40. }
  41. сам.действие, ош = battle_worker.НовСражениеИсполнитель(бот)
  42. if ош != nil {
  43. return nil, fmt.Errorf("НовСражение(): при создании исполнителя схватки, err=\n\t%w", ош)
  44. }
  45. }
  46. // сам.shotTimeFull.Set(8000) // 8000 msec
  47. return сам, nil
  48. }
  49. func (сам *Схватка) Пуск() error {
  50. go сам.пуск()
  51. return nil
  52. }
  53. // запускает в работу сражение
  54. func (сам *Схватка) пуск() {
  55. for {
  56. select {
  57. case <-сам.бот.Кнт().Done():
  58. return
  59. default:
  60. сам.регистрация.Зарегистрироваться()
  61. сам.ожидание.Ожидать()
  62. сам.действие.Танковать()
  63. time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
  64. }
  65. }
  66. }
  67. // ЕслиНачало -- возвращает признак начала схватки (для браузера)
  68. func (сам *Схватка) ЕслиНачало() types.ИСтатПарам {
  69. return сам.действие.Тревога()
  70. }