package battle_worker import ( "context" "time" . "gitp78su.ipnodns.ru/svi/kern" . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes" . "wartank/app/lev0/types" "wartank/app/lev1/health" "wartank/app/lev1/manevr" "wartank/app/lev1/shot" "wartank/app/lev2/arena" ) /* Предоставляет сетевой компонент при непосредственном сражении */ // СражениеДействие -- непосредственно танкует в сражении type СражениеДействие struct { ИАрена бот ИБот кнт context.Context // Контекст сражения фнОтменить func() // Функция отмены сражения выстрел ИВыстрел // Объект выстрела здоровье ИЗдоровье // Текущее здоровье танка манёвр ИМанёвр // Возможность маневрирования логин string еслиКонец ISafeBool } // НовСражениеДействие -- возвращает новый *BattleOn func НовСражениеДействие(конт ILocalCtx) ИСражениеПроцесс { // Ограничить время сражения бота бот := конт.Get("бот").Val().(ИБот) кнтСражение, фнОтменить := context.WithTimeout(бот.КонтБот().Ctx(), time.Second*305) сам := &СражениеДействие{ бот: бот, кнт: кнтСражение, фнОтменить: фнОтменить, логин: бот.Имя(), еслиКонец: NewSafeBool(), } аренаКонфиг := arena.АренаКонфиг{ Бот_: сам.бот, АренаИмя_: "Исполнитель сражения", СтрКонтроль_: `Сражения`, ФнПуск_: сам.пуск, СтрУрл_: "https://wartank.ru/pve", } сам.ИАрена = arena.НовАрена(конт, аренаКонфиг) go сам.пуск() return сам } // Манёвр -- возвращает объект маневра func (сам *СражениеДействие) Манёвр() ИМанёвр { return сам.манёвр } // ЕслиКонец -- возвращает признак конца действия func (сам *СражениеДействие) ЕслиКонец() ISafeBool { return сам.еслиКонец } // запускает сражение func (сам *СражениеДействие) пуск() { defer func() { сам.фнОтменить() // log._rintf("BattleOn.run(): сражение завершено\n") }() { // Подготовка к сражению сам.выстрел = shot.НовВыстрел(сам) // Объект выстрела сам.здоровье = health.НовЗдоровье(сам) сам.манёвр = manevr.НовМанёвр(сам) } // Рабочий цикл сражения <-сам.кнт.Done() } func (сам *СражениеДействие) МанёврНадоУст() { if сам.манёвр == nil { return } сам.манёвр.УстНадо() } // Выстрел -- func (сам *СражениеДействие) Выстрел() ИВыстрел { return сам.выстрел } // Кнт -- возвращает контекст отмены сражения func (сам *СражениеДействие) Контекст() context.Context { return сам.кнт } // ОтменитьДействие -- вызов функции отмены контекста сражения func (сам *СражениеДействие) Отменить() { сам.фнОтменить() }