battle.go 2.9 KB

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