battle_worker.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // package battle_worker -- исполнение битвы
  2. package battle_worker
  3. import (
  4. "time"
  5. . "wartank/app/lev0/types"
  6. "wartank/app/lev1/stat_param"
  7. "wartank/app/lev2/arena"
  8. "wartank/app/lev2/arena_battle/battle_worker/battle_worker"
  9. "wartank/app/lev2/arena_battle/battle_worker/battle_worker/battle_sound"
  10. )
  11. // СражениеДействие -- исполнение битвы
  12. type СхваткаИсполнитель struct {
  13. ИАрена
  14. конт ИБотКонтекст
  15. бот ИБот
  16. еслиНачало ИСтатПарам
  17. // Непосредственное сражение
  18. действие *battle_worker.СражениеДействие
  19. sound *battle_sound.BattleSound // Однопоточное проигрывание звука
  20. }
  21. // НовСражениеДействие -- возвращает новый исполнитель битвы
  22. func НовСражениеИсполнитель(конт ИБотКонтекст, bot ИБот) *СхваткаИсполнитель {
  23. сам := &СхваткаИсполнитель{
  24. конт: конт,
  25. бот: bot,
  26. еслиНачало: stat_param.НовСтатПарам("тревога"),
  27. sound: battle_sound.NewBattleSound(),
  28. }
  29. аренаКонфиг := arena.АренаКонфиг{
  30. Бот_: bot,
  31. АренаИмя_: "Ход сражения",
  32. СтрКонтроль_: `<title>Сражения</title>`,
  33. ФнПуск_: сам.пуск,
  34. СтрУрл_: "https://wartank.ru/pve",
  35. }
  36. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  37. return сам
  38. }
  39. // выполняет битву
  40. func (сам *СхваткаИсполнитель) пуск() {
  41. сам.действие = battle_worker.НовСражениеДействие(сам.конт, сам.бот) // IBattleOn (онлайн)
  42. сам.sound.Play()
  43. time.Sleep(time.Second * 10) // Задержка для звука на странице
  44. <-сам.действие.Контекст().Done()
  45. // log._rintf("Battle.runBaton(): сражение завершено\n")
  46. }
  47. // Тревога -- возвращает признак начала сражения (для браузера)
  48. func (сам *СхваткаИсполнитель) Тревога() ИСтатПарам {
  49. return сам.еслиНачало
  50. }