battle.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // package battle -- объект сражения
  2. package battle
  3. import (
  4. "time"
  5. "wartank/pkg/arena"
  6. "wartank/pkg/types"
  7. "wartank/server/serv_bots/warbot/angar/battle/battle_register"
  8. "wartank/server/serv_bots/warbot/angar/battle/battle_wait"
  9. "wartank/server/serv_bots/warbot/angar/battle/battle_worker"
  10. )
  11. // Сражение -- объект сражения
  12. type Сражение struct {
  13. types.ИАрена
  14. бот types.ИБот
  15. клиент types.ИХттпВоркер
  16. регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
  17. ожидание *battle_wait.СхваткаОжидание // Ожидатель начала сражения
  18. действие *battle_worker.СхваткаИсполнитель // Исполнитель сражения
  19. }
  20. // НовСражение -- возвращает новый *Battle
  21. func НовСражение(бот types.ИБот) *Сражение {
  22. сам := &Сражение{
  23. бот: бот,
  24. клиент: бот.Сеть().ВебВоркер(),
  25. }
  26. аренаКонфиг:= arena.АренаКонфиг{
  27. Бот_: бот,
  28. АренаИмя_: "Группа сражения",
  29. СтрКонтроль_: "<span>до начала ",
  30. ФнПуск_: сам.пуск,
  31. }
  32. сам.ИАрена = arena.НовАрена(аренаКонфиг)
  33. сам.регистрация = battle_register.НовСражениеРегистрация(бот)
  34. сам.ожидание = battle_wait.НовСражениеОжидание(бот)
  35. сам.действие = battle_worker.НовСражениеИсполнитель(бот)
  36. // сам.shotTimeFull.Set(8000) // 8000 msec
  37. return сам
  38. }
  39. func (сам *Сражение) Пуск() {
  40. go сам.пуск()
  41. }
  42. // запускает в работу сражение
  43. func (сам *Сражение) пуск() {
  44. for {
  45. select {
  46. case <-сам.бот.Контекст().Done():
  47. return
  48. default:
  49. сам.регистрация.Зарегистрироваться()
  50. сам.ожидание.Ожидать()
  51. сам.действие.Пуск()
  52. time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
  53. }
  54. }
  55. }
  56. // ЕслиНачало -- возвращает признак начала сражения (для браузера)
  57. func (сам *Сражение) ЕслиНачало() types.ИСтатПарам {
  58. return сам.действие.Тревога()
  59. }