arena_angar.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package arena_angar
  2. import (
  3. "log"
  4. "time"
  5. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  6. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  7. . "wartank/app/lev0/types"
  8. "wartank/app/lev1"
  9. "wartank/app/lev2/arena"
  10. "wartank/app/lev3/bot/bot_stat/bot_resurs"
  11. )
  12. /*
  13. Объект ангара приложения
  14. */
  15. // Ангар -- ангар для танка
  16. type АренаАнгар struct {
  17. ИАрена
  18. конт ILocalCtx
  19. бот ИБот
  20. progress ИСтатПарам
  21. топливо ИСтатПарам
  22. серебро ИСтатПарам
  23. золото ИСтатПарам
  24. игроковОнлайн ИСтатПарам
  25. сереброСессия ИСтатПарам
  26. ресурсы ИБотРесурсы
  27. танкСтат ИТанкСтат
  28. }
  29. // НовАнгар -- возвращает новый *Angar
  30. func НовАнгар(конт ILocalCtx) ИАренаАнгар {
  31. Hassert(конт != nil, "НовАнгар(): ILocalCtx==nil")
  32. бот := конт.Get("бот").Val().(ИБот)
  33. сам := &АренаАнгар{
  34. конт: конт,
  35. бот: бот,
  36. progress: lev1.НовСтатПарам("прогресс"),
  37. игроковОнлайн: lev1.НовСтатПарам("онлайн"),
  38. сереброСессия: lev1.НовСтатПарам("серебро сессия"),
  39. танкСтат: конт.Get("танкСтат").Val().(ИТанкСтат),
  40. серебро: lev1.НовСтатПарам("серебро"),
  41. золото: lev1.НовСтатПарам("золото"),
  42. топливо: lev1.НовСтатПарам("топливо"),
  43. }
  44. аренаКонф := arena.АренаКонфиг{
  45. Бот_: бот,
  46. АренаИмя_: "Ангар",
  47. СтрКонтроль_: "<title>Ангар</title>",
  48. ФнПуск_: сам.пуск,
  49. СтрУрл_: "https://wartank.ru/angar",
  50. }
  51. конт.Set("ангар", сам, "Объект ангара бота")
  52. сам.ИАрена = arena.НовАрена(конт, аренаКонф)
  53. сам.ресурсы = bot_resurs.НовБотРесурсы(конт, сам)
  54. return сам
  55. }
  56. // Золото -- возвращает объект топлива в ангаре
  57. func (сам *АренаАнгар) Золото() ИСтатПарам {
  58. return сам.золото
  59. }
  60. // Топливо -- возвращает объект топлива в ангаре
  61. func (сам *АренаАнгар) Топливо() ИСтатПарам {
  62. return сам.топливо
  63. }
  64. // СереброСессия -- возвращает объект серебра за текущую сессию
  65. func (сам *АренаАнгар) СереброСессия() ИСтатПарам {
  66. return сам.сереброСессия
  67. }
  68. // Серебро -- возвращает объект серебра в ангаре
  69. func (сам *АренаАнгар) Серебро() ИСтатПарам {
  70. return сам.серебро
  71. }
  72. // Запускает обработку ангара
  73. func (сам *АренаАнгар) пуск() {
  74. { // Запуск компонентов
  75. }
  76. фнЦикл := func() bool {
  77. сам.Обновить()
  78. // сам.конвойПроверить()
  79. if err := сам.ОбратВремяУст("01:00"); err != nil {
  80. сам.конт.Cancel()
  81. log.Printf("Ангар.Run(): in update ICountTime, err=\n\t%v\n", err)
  82. return false
  83. }
  84. return true
  85. }
  86. go func() {
  87. ош := сам.ОбратВремяУст("01")
  88. if ош != nil {
  89. log.Printf("Ангар.Run(): in update ICountTime, ош=\n\t%v\n", ош)
  90. сам.конт.Cancel()
  91. return
  92. }
  93. for {
  94. select {
  95. case <-сам.конт.Ctx().Done(): // Отмена контекста
  96. return
  97. case <-сам.ВремяОстат().КаналСиг(): // Метка времени
  98. if !фнЦикл() {
  99. return
  100. }
  101. default: // Запускается раз в минуту
  102. if !фнЦикл() {
  103. return
  104. }
  105. time.Sleep(time.Minute * 1)
  106. }
  107. }
  108. }()
  109. }
  110. // Прогресс -- возвращает прогресс уровня игрока
  111. func (сам *АренаАнгар) Прогресс() ИСтатПарам {
  112. return сам.progress
  113. }
  114. // ИгрокиОнлайн -- возвращает количество игроков онлайн
  115. func (сам *АренаАнгар) ИгрокиОнлайн() ИСтатПарам {
  116. return сам.игроковОнлайн
  117. }