damage.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package damage
  2. import (
  3. "sync"
  4. "wartank/app/lev0/alias"
  5. )
  6. /*
  7. Следит за уроном танка.
  8. Сравнивает с предыдущим значением,
  9. результат сравнения при каждом присвоении -- сохраняет
  10. */
  11. // Damage -- урон танка с памятью
  12. type Damage struct {
  13. val alias.АУрон
  14. res string
  15. block sync.RWMutex
  16. }
  17. // NewDamage -- возвращает новый *Damage
  18. func NewDamage() *Damage {
  19. return &Damage{
  20. res: "none",
  21. }
  22. }
  23. // Set -- устанавливает урон
  24. func (сам *Damage) Set(val alias.АУрон) {
  25. сам.block.Lock()
  26. defer сам.block.Unlock()
  27. if сам.val == 0 { // Первоначальное присвоение
  28. сам.val = val
  29. return
  30. }
  31. switch {
  32. case сам.val > val: // Урон уменьшился
  33. сам.res = "down"
  34. case сам.val < val: // Урон увеличился
  35. сам.res = "up"
  36. default: // Урон не изменился
  37. сам.res = "none"
  38. }
  39. сам.val = val
  40. }
  41. // Result -- возвращает результат сравнения урона старого и текущего
  42. func (сам *Damage) Result() string {
  43. сам.block.RLock()
  44. defer сам.block.RUnlock()
  45. return сам.res
  46. }