// package fuel -- топливо в баке package fuel import ( "fmt" "strconv" "strings" "time" "wartank/pkg/types" "wartank/server/serv_bots/warbot/tank/tankstat/static_param" ) // Fuel -- топливо в баке type Fuel struct { server types.IServer angar types.IAngar bot types.IBot fuel types.IStatParam } // NewFuel -- возвращает новый топливный бак func NewFuel(bot types.IBot) (*Fuel, error) { if bot == nil { return nil, fmt.Errorf("NewFuel(): IBot == nil") } sf := &Fuel{ server: bot.Server(), angar: bot.Angar(), bot: bot, fuel: static_param.NewStaticParam("fuel"), } return sf, nil } // Run -- должен работать в отдельном потоке, контролит топливо func (sf *Fuel) Run() { count := 0 // Каждые 1500 сек (100 топлива проверять принудительно) for { time.Sleep(time.Second * 15) if sf.fuel.Get() == 0 || count >= 100 { sf.findFuel() count = 0 continue } count++ fuel := sf.angar.Fuel().Get() fuel++ sf.angar.Fuel().Set(fuel) // log.Printf("Fuel.Run: val=%v\n", fuel) } } // Ищет в теле текста ангара топливо func (sf *Fuel) findFuel() { // _mt.Println("\tAngarNet.findFuel()") if sf.fuel.Get() > 314 { return } lstAngar := sf.bot.Angar().GetLst() var strOut string for _, strFuel := range lstAngar { if strings.Contains(strFuel, `Топливо `) strFuel := lstFuel[1] iFuel, err := strconv.Atoi(strFuel) if err != nil { // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err) return } sf.bot.Angar().Fuel().Set(iFuel) if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315 return } // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel) } // Fuel -- возвращает объект сстатическог опараметра топлива func (sf *Fuel) Fuel() types.IStatParam { return sf.fuel }