battleon.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package battle_worker
  2. import (
  3. "context"
  4. "time"
  5. . "wartank/app/lev0/types"
  6. "wartank/app/lev2/arena"
  7. "wartank/app/lev1/health"
  8. "wartank/app/lev1/manevr"
  9. "wartank/app/lev1/shot"
  10. )
  11. /*
  12. Предоставляет сетевой компонент при непосредственном сражении
  13. */
  14. // СражениеДействие -- непосредственно танкует в сражении
  15. type СражениеДействие struct {
  16. ИАрена
  17. бот ИБот
  18. кнт context.Context // Контекст сражения
  19. фнОтменить func() // Функция отмены сражения
  20. выстрел ИВыстрел // Объект выстрела
  21. здоровье ИЗдоровье // Текущее здоровье танка
  22. манёвр ИМанёвр // Возможность маневрирования
  23. логин string
  24. }
  25. // НовСражениеДействие -- возвращает новый *BattleOn
  26. func НовСражениеДействие(конт ИБотКонтекст) ИСражениеПроцесс {
  27. // Ограничить время сражения бота
  28. бот:=конт.Получ("бот").(ИБот)
  29. кнтСражение, фнОтменить := context.WithTimeout(бот.Контекст(), time.Second*305)
  30. сам := &СражениеДействие{
  31. бот: бот,
  32. кнт: кнтСражение,
  33. фнОтменить: фнОтменить,
  34. логин: бот.Имя(),
  35. }
  36. аренаКонфиг := arena.АренаКонфиг{
  37. Бот_: сам.бот,
  38. АренаИмя_: "Исполнитель сражения",
  39. СтрКонтроль_: `<title>Сражения</title>`,
  40. ФнПуск_: сам.пуск,
  41. СтрУрл_: "https://wartank.ru/pve",
  42. }
  43. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  44. go сам.пуск()
  45. return сам
  46. }
  47. // запускает сражение
  48. func (сам *СражениеДействие) пуск() {
  49. defer func() {
  50. сам.фнОтменить()
  51. // log._rintf("BattleOn.run(): сражение завершено\n")
  52. }()
  53. { // Подготовка к сражению
  54. сам.выстрел = shot.НовВыстрел(сам) // Объект выстрела
  55. сам.здоровье = health.НовЗдоровье(сам)
  56. сам.манёвр = manevr.НовМанёвр(сам)
  57. }
  58. // Рабочий цикл сражения
  59. <-сам.кнт.Done()
  60. }
  61. func (сам *СражениеДействие) МанёврНадоУст() {
  62. if сам.манёвр == nil {
  63. return
  64. }
  65. сам.манёвр.УстНадо()
  66. }
  67. // Выстрел --
  68. func (сам *СражениеДействие) Выстрел() ИВыстрел {
  69. return сам.выстрел
  70. }
  71. // Кнт -- возвращает контекст отмены сражения
  72. func (сам *СражениеДействие) Контекст() context.Context {
  73. return сам.кнт
  74. }
  75. // ОтменитьДействие -- вызов функции отмены контекста сражения
  76. func (сам *СражениеДействие) Отменить() {
  77. сам.фнОтменить()
  78. }