Alior

Untitled

Nov 21st, 2019
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.64 KB | None | 0 0
  1. Есть замечания по реализации:
  2.  
  3. Апдейт каждого значения рядка в апдейте, не самая лучшая идея. Их может быть много да и нет необходимости делать это каждый апдейт.
  4.  
  5. private void Update()
  6. {
  7. if (this.activityPlayListPlayer == null)
  8. {
  9. return;
  10. }
  11. this.index.color = (this.activityPlayListPlayer.WillPlay(element, _index) || (activityPlayListPlayer.CurrentSessionElement == element && activityPlayListPlayer.CurrentRepeat == _index)) ? Color.red : Color.black;
  12. var res = regestry.GetResult(this.element, _index);
  13. if (res != null && res.Count > 0)
  14. {
  15. foreach (var item in res)
  16. {
  17. if (createdCells.TryGetValue(item.Key, out GameObject cell))
  18. {
  19. var cellText = cell.GetComponentInChildren<Text>();
  20. cellText.text = item.Value.ToString("00.00");
  21. }
  22. }
  23. }
  24. else
  25. {
  26. foreach (var item in createdCells)
  27. {
  28. item.Value.GetComponentInChildren<Text>().text = " - ";
  29. }
  30. }
  31. if (activityPlayListPlayer.CurrentRepeat == this._index && this.element == activityPlayListPlayer.CurrentSessionElement)
  32. {
  33. buttonImage.sprite = playingSprite;
  34. progressImage.fillAmount = (Time.time - activityPlayListPlayer.StartRepeatTime) / this.element.IterationDuration;
  35. }
  36. else
  37. {
  38. buttonImage.sprite = this.notPlayingSprite;
  39. progressImage.fillAmount = 0;
  40. }
  41. if (activityPlayListPlayer.IsPause)
  42. {
  43. buttonImage.sprite = this.notPlayingSprite;
  44. progressImage.fillAmount = 0;
  45. }
  46. }
  47.  
  48. if (CurrentSessionElement != null && !IsPause)
  49. {
  50. if ((Time.time - StartRepeatTime) > CurrentSessionElement.IterationDuration)
  51. {
  52. PlayNext();
  53. }
  54. }
  55.  
  56. ----------------------------------------------------------------------
  57.  
  58. Из пейста выше:
  59. cellText.text = item.Value.ToString("00.00"); - формат один, а на самом деле у каждого значения свои форматы. Предоставляются через activity.OutputFormats
  60. Может быть "32.22m", может быть например "0.123*" итд.
  61.  
  62. ----------------------------------------------------------------------
  63.  
  64. ActivityPlayListPlayer:
  65. if ((Time.time - StartRepeatTime) > CurrentSessionElement.IterationDuration)
  66. {
  67. PlayNext();
  68. }
  69.  
  70. Ты ориентируешься по своему счетчику времени и убиваешь активити когда считаешь что оно завершено. Это не верно по отношению к архитектуре. Дожидайся завершения активити и убивай его только тогда когда ты хочешь сделать стоп, а не считаешь что оно должно закончиться. Я подменю расчет времени активити что бы оно соответствовало указанному.
  71.  
  72. ----------------------------------------------------------------------
  73.  
  74. ActivityPlayer. Ты добавил сущность ActivityData единственным отличием которого от PlayingInfo является наличие стартового времени. Не плоди сущности, добавь нужное поле в плейинг инфо. Сейчас стейт размазывается между двумя не связными вещами.
  75.  
  76. Так же поле: currentActvityData не несет в данной реализации никакой полезной нагрузки так как есть проперти с PlayingInfo
  77.  
  78. ----------------------------------------------------------------------
  79.  
  80. ActivityPlayer:
  81. Observable.EveryUpdate().Subscribe(_ =>
  82. {
  83. if (info.Value != null && currentActvityData.Activity!=null)
  84. onActivityUpdated.Execute(currentActvityData);
  85. }).AddTo(disposable);
  86.  
  87. в комбинации с MeasurementRegestry и его подпиской дает апдейт каждый кадр зарегестрированых значений, что тоже не то что бы необходимо делать каждый фрейм.
Add Comment
Please, Sign In to add comment