| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // package arena_battle -- объект сражения
- package arena_battle
- import (
- "time"
- . "wartank/app/lev0/types"
- "wartank/app/lev2/arena"
- "wartank/app/lev2/arena_battle/battle_register"
- "wartank/app/lev2/arena_battle/battle_wait"
- "wartank/app/lev2/arena_battle/battle_worker"
- )
- // АренаСражение -- объект сражения
- type АренаСражение struct {
- ИАрена
- бот ИБот
- клиент ИХттпВоркер
- регистрация *battle_register.СхваткаРегистрация // Регистратор на сражение
- ожидание *battle_wait.СхваткаОжидание // Ожидатель начала сражения
- действие *battle_worker.СхваткаИсполнитель // Исполнитель сражения
- }
- // НовСражение -- возвращает новый *Battle
- func НовСражение(конт ИБотКонтекст, бот ИБот) *АренаСражение {
- сам := &АренаСражение{
- бот: бот,
- клиент: бот.Сеть().ВебВоркер(),
- }
- аренаКонфиг := arena.АренаКонфиг{
- Бот_: бот,
- АренаИмя_: "Арена сражения",
- СтрКонтроль_: "<span>до начала ",
- ФнПуск_: сам.пуск,
- СтрУрл_: "https://wartank.ru/pve",
- }
- сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
- сам.регистрация = battle_register.НовСражениеРегистрация(конт, бот)
- сам.ожидание = battle_wait.НовСражениеОжидание(конт, бот)
- сам.действие = battle_worker.НовСражениеИсполнитель(конт, бот)
- // сам.shotTimeFull.Set(8000) // 8000 msec
- return сам
- }
- func (сам *АренаСражение) Пуск() {
- go сам.пуск()
- }
- // запускает в работу сражение
- func (сам *АренаСражение) пуск() {
- for {
- select {
- case <-сам.бот.Контекст().Done():
- return
- default:
- сам.регистрация.Зарегистрироваться()
- сам.ожидание.Ожидать()
- сам.действие.Пуск()
- time.Sleep(time.Second * 2) // Пауза между циклами, чтобы сервер не долбить запросами
- }
- }
- }
- // ЕслиНачало -- возвращает признак начала сражения (для браузера)
- func (сам *АренаСражение) ЕслиНачало() ИСтатПарам {
- return сам.действие.Тревога()
- }
|