| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package arena_angar
- import (
- "log"
- "time"
- . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
- . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
- . "wartank/app/lev0/types"
- "wartank/app/lev1"
- "wartank/app/lev2/arena"
- "wartank/app/lev3/bot/bot_stat/bot_resurs"
- )
- /*
- Объект ангара приложения
- */
- // Ангар -- ангар для танка
- type АренаАнгар struct {
- ИАрена
- конт ILocalCtx
- бот ИБот
- progress ИСтатПарам
- топливо ИСтатПарам
- серебро ИСтатПарам
- золото ИСтатПарам
- игроковОнлайн ИСтатПарам
- сереброСессия ИСтатПарам
- ресурсы ИБотРесурсы
- танкСтат ИТанкСтат
- }
- // НовАнгар -- возвращает новый *Angar
- func НовАнгар(конт ILocalCtx) ИАренаАнгар {
- Hassert(конт != nil, "НовАнгар(): ILocalCtx==nil")
- бот := конт.Get("бот").Val().(ИБот)
- сам := &АренаАнгар{
- конт: конт,
- бот: бот,
- progress: lev1.НовСтатПарам("прогресс"),
- игроковОнлайн: lev1.НовСтатПарам("онлайн"),
- сереброСессия: lev1.НовСтатПарам("серебро сессия"),
- танкСтат: конт.Get("танкСтат").Val().(ИТанкСтат),
- серебро: lev1.НовСтатПарам("серебро"),
- золото: lev1.НовСтатПарам("золото"),
- топливо: lev1.НовСтатПарам("топливо"),
- }
- аренаКонф := arena.АренаКонфиг{
- Бот_: бот,
- АренаИмя_: "Ангар",
- СтрКонтроль_: "<title>Ангар</title>",
- ФнПуск_: сам.пуск,
- СтрУрл_: "https://wartank.ru/angar",
- }
- конт.Set("ангар", сам, "Объект ангара бота")
- сам.ИАрена = arena.НовАрена(конт, аренаКонф)
- сам.ресурсы = bot_resurs.НовБотРесурсы(конт, сам)
- return сам
- }
- // Золото -- возвращает объект топлива в ангаре
- func (сам *АренаАнгар) Золото() ИСтатПарам {
- return сам.золото
- }
- // Топливо -- возвращает объект топлива в ангаре
- func (сам *АренаАнгар) Топливо() ИСтатПарам {
- return сам.топливо
- }
- // СереброСессия -- возвращает объект серебра за текущую сессию
- func (сам *АренаАнгар) СереброСессия() ИСтатПарам {
- return сам.сереброСессия
- }
- // Серебро -- возвращает объект серебра в ангаре
- func (сам *АренаАнгар) Серебро() ИСтатПарам {
- return сам.серебро
- }
- // Запускает обработку ангара
- func (сам *АренаАнгар) пуск() {
- { // Запуск компонентов
- }
- фнЦикл := func() bool {
- сам.Обновить()
- // сам.конвойПроверить()
- if err := сам.ОбратВремяУст("01:00"); err != nil {
- сам.конт.Cancel()
- log.Printf("Ангар.Run(): in update ICountTime, err=\n\t%v\n", err)
- return false
- }
- return true
- }
- go func() {
- ош := сам.ОбратВремяУст("01")
- if ош != nil {
- log.Printf("Ангар.Run(): in update ICountTime, ош=\n\t%v\n", ош)
- сам.конт.Cancel()
- return
- }
- for {
- select {
- case <-сам.конт.Ctx().Done(): // Отмена контекста
- return
- case <-сам.ВремяОстат().КаналСиг(): // Метка времени
- if !фнЦикл() {
- return
- }
- default: // Запускается раз в минуту
- if !фнЦикл() {
- return
- }
- time.Sleep(time.Minute * 1)
- }
- }
- }()
- }
- // Прогресс -- возвращает прогресс уровня игрока
- func (сам *АренаАнгар) Прогресс() ИСтатПарам {
- return сам.progress
- }
- // ИгрокиОнлайн -- возвращает количество игроков онлайн
- func (сам *АренаАнгар) ИгрокиОнлайн() ИСтатПарам {
- return сам.игроковОнлайн
- }
|