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 (сам *ShotTime) Get() alias.МилСек { сам.block.RLock() defer сам.block.RUnlock() return сам.val } // Dec5 -- уменьшает время до выстрела на 5 мсек func (сам *ShotTime) Dec5() { сам.block.Lock() defer сам.block.Unlock() сам.val -= 5 if сам.val < 0 { сам.val = 0 } } // Dec30 -- уменьшает время до выстрела на 30 мсек func (сам *ShotTime) Dec30() { сам.block.Lock() defer сам.block.Unlock() сам.val -= 30 if сам.val < 0 { сам.val = 0 } } // Inc210 -- увеличивает время до выстрела на 210 мсек func (сам *ShotTime) Inc210() { сам.block.Lock() defer сам.block.Unlock() сам.val += 210 } // IsZero -- возвращает истину, если значение обнулено func (сам *ShotTime) IsZero() bool { сам.block.RLock() defer сам.block.RUnlock() return сам.val == 0 } // Set -- устанавливает значение по требованию func (сам *ShotTime) Set(val alias.МилСек) { сам.block.Lock() defer сам.block.Unlock() if val < 0 { logrus.WithField("val", val).Error("ShotTime.Set(): отрицательное значение") return } сам.val = val }