shot_time.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package shot_time
  2. import (
  3. "sync"
  4. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  5. . "wartank/app/lev0/alias"
  6. )
  7. /*
  8. Содержит время до выстрела
  9. */
  10. // ShotTime -- время до выстрела
  11. type ShotTime struct {
  12. val АМилСек // Время в мсек
  13. block sync.RWMutex
  14. }
  15. // NewShotTime -- возвращает новый ShotTime
  16. func NewShotTime() *ShotTime {
  17. return &ShotTime{}
  18. }
  19. // Get -- возвращает хранимое время до выстрела
  20. func (сам *ShotTime) Get() АМилСек {
  21. сам.block.RLock()
  22. defer сам.block.RUnlock()
  23. return сам.val
  24. }
  25. // Dec5 -- уменьшает время до выстрела на 5 мсек
  26. func (сам *ShotTime) Dec5() {
  27. сам.block.Lock()
  28. defer сам.block.Unlock()
  29. сам.val -= 5
  30. if сам.val > 500_000 {
  31. сам.val = 0
  32. }
  33. }
  34. // Dec30 -- уменьшает время до выстрела на 30 мсек
  35. func (сам *ShotTime) Dec30() {
  36. сам.block.Lock()
  37. defer сам.block.Unlock()
  38. сам.val -= 30
  39. if сам.val > 500_000 {
  40. сам.val = 0
  41. }
  42. }
  43. // Inc210 -- увеличивает время до выстрела на 210 мсек
  44. func (сам *ShotTime) Inc210() {
  45. сам.block.Lock()
  46. defer сам.block.Unlock()
  47. сам.val += 210
  48. }
  49. // IsZero -- возвращает истину, если значение обнулено
  50. func (сам *ShotTime) IsZero() bool {
  51. сам.block.RLock()
  52. defer сам.block.RUnlock()
  53. return сам.val == 0
  54. }
  55. // Set -- устанавливает значение по требованию
  56. func (сам *ShotTime) Set(val АМилСек) {
  57. сам.block.Lock()
  58. defer сам.block.Unlock()
  59. Hassert(val <= 500_000, "ShotTime.Set(): значение(%v)>500_000", val)
  60. сам.val = val
  61. }