shot_time.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package shot_time
  2. import (
  3. "log"
  4. "sync"
  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. if val > 500_000 {
  60. log.Printf("ShotTime.Set(): отрицательное значение, val=%v\n", val)
  61. return
  62. }
  63. сам.val = val
  64. }