CrowdSpawnerControlBehaviour.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections;
  2. using TMPro;
  3. using Unity.Entities;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. namespace GPUECSAnimationBaker.Samples.SampleScenes.Festival.CrowdSpawnerSystem
  7. {
  8. public class CrowdSpawnerControlBehaviour : MonoBehaviour
  9. {
  10. public Scrollbar rowsScrollbar;
  11. public Scrollbar colsScrollbar;
  12. public TextMeshProUGUI rowsText;
  13. public TextMeshProUGUI colsText;
  14. public TextMeshProUGUI totalAmountText;
  15. private IEnumerator Start()
  16. {
  17. while(World.DefaultGameObjectInjectionWorld.EntityManager.CreateEntityQuery(
  18. typeof(CrowdSpawnerUpdateComponent)).CalculateEntityCount() == 0)
  19. yield return null;
  20. ScrollUpdate();
  21. }
  22. public void ScrollUpdate()
  23. {
  24. CrowdSpawnerControlSystem crowdSpawnerControlSystem =
  25. World.DefaultGameObjectInjectionWorld.GetOrCreateSystemManaged<CrowdSpawnerControlSystem>();
  26. crowdSpawnerControlSystem.doScrollUpdate = true;
  27. crowdSpawnerControlSystem.rows = Mathf.RoundToInt(rowsScrollbar.value * 500);
  28. rowsText.text = crowdSpawnerControlSystem.rows.ToString();
  29. crowdSpawnerControlSystem.cols = Mathf.RoundToInt(colsScrollbar.value * 500);
  30. colsText.text = crowdSpawnerControlSystem.cols.ToString();
  31. totalAmountText.text = "Total amount of units: " + (crowdSpawnerControlSystem.rows * crowdSpawnerControlSystem.cols).ToString();
  32. }
  33. }
  34. public partial class CrowdSpawnerControlSystem : SystemBase
  35. {
  36. public bool doScrollUpdate;
  37. public int cols;
  38. public int rows;
  39. protected override void OnUpdate()
  40. {
  41. if (doScrollUpdate)
  42. {
  43. doScrollUpdate = false;
  44. Entities.ForEach((ref CrowdSpawnerUpdateComponent crowdSpawnerUpdate) =>
  45. {
  46. crowdSpawnerUpdate.cols = cols;
  47. crowdSpawnerUpdate.rows = rows;
  48. crowdSpawnerUpdate.updateTime = 0.5f;
  49. }).WithoutBurst().Run();
  50. }
  51. }
  52. }
  53. }