package shottime import ( "sync" "github.com/sirupsen/logrus" "wartank/pkg/alias" ) /* Содержит время до выстрела */ // ShotTime -- время до выстрела type ShotTime struct { val alias.МилСек // Время в мсек block sync.RWMutex } // NewShotTime -- возвращает новый ShotTime func NewShotTime() *ShotTime { return &ShotTime{} } // Get -- возвращает хранимое время до выстрела func (sf *ShotTime) Get() alias.МилСек { sf.block.RLock() defer sf.block.RUnlock() return sf.val } // Dec5 -- уменьшает время до выстрела на 5 мсек func (sf *ShotTime) Dec5() { sf.block.Lock() defer sf.block.Unlock() sf.val -= 5 if sf.val < 0 { sf.val = 0 } } // Dec30 -- уменьшает время до выстрела на 30 мсек func (sf *ShotTime) Dec30() { sf.block.Lock() defer sf.block.Unlock() sf.val -= 30 if sf.val < 0 { sf.val = 0 } } // Inc210 -- увеличивает время до выстрела на 210 мсек func (sf *ShotTime) Inc210() { sf.block.Lock() defer sf.block.Unlock() sf.val += 210 } // IsZero -- возвращает истину, если значение обнулено func (sf *ShotTime) IsZero() bool { sf.block.RLock() defer sf.block.RUnlock() return sf.val == 0 } // Set -- устанавливает значение по требованию func (sf *ShotTime) Set(val alias.МилСек) { sf.block.Lock() defer sf.block.Unlock() if val < 0 { logrus.WithField("val", val).Error("ShotTime.Set(): отрицательное значение") return } sf.val = val }