battle.go 2.6 KB

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