PhysicsManagerComponent.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using System.Collections.Generic;
  5. namespace MagicaCloth
  6. {
  7. /// <summary>
  8. /// コンポーネント全体の管理
  9. /// </summary>
  10. public class PhysicsManagerComponent : PhysicsManagerAccess
  11. {
  12. /// <summary>
  13. /// すべてのコンポーネントのセット
  14. /// これは初期化の成否に関係なく無条件で登録されるので注意!
  15. /// 初期化完了の有無は comp.Status.IsInitSuccess で判定する
  16. /// </summary>
  17. private HashSet<CoreComponent> componentSet = new HashSet<CoreComponent>();
  18. /// <summary>
  19. /// データ更新が必要なパーティクルコンポーネントセット
  20. /// </summary>
  21. private HashSet<ParticleComponent> dataUpdateParticleSet = new HashSet<ParticleComponent>();
  22. //=========================================================================================
  23. /// <summary>
  24. /// 初期設定
  25. /// </summary>
  26. public override void Create()
  27. {
  28. }
  29. /// <summary>
  30. /// 破棄
  31. /// </summary>
  32. public override void Dispose()
  33. {
  34. }
  35. //=========================================================================================
  36. /// <summary>
  37. /// 登録コンポーネント数を返す
  38. /// </summary>
  39. public int ComponentCount
  40. {
  41. get
  42. {
  43. return componentSet.Count;
  44. }
  45. }
  46. /// <summary>
  47. /// 登録コンポーネントに対してアクションを実行します
  48. /// </summary>
  49. /// <param name="act"></param>
  50. public void ComponentAction(System.Action<CoreComponent> act)
  51. {
  52. foreach (var comp in componentSet)
  53. {
  54. if (comp != null)
  55. act(comp);
  56. }
  57. }
  58. /// <summary>
  59. /// 登録コンポーネントの実行状態を更新する
  60. /// </summary>
  61. public void UpdateComponentStatus()
  62. {
  63. foreach (var comp in componentSet)
  64. {
  65. if (comp == null)
  66. continue;
  67. if (comp.Status.IsInitSuccess == false)
  68. continue;
  69. comp.Status.UpdateStatus();
  70. }
  71. }
  72. //=========================================================================================
  73. public void AddComponent(CoreComponent comp)
  74. {
  75. //Debug.Log($"AddComponent:{comp.name}");
  76. componentSet.Add(comp);
  77. }
  78. public void RemoveComponent(CoreComponent comp)
  79. {
  80. //Debug.Log($"RemoveComponent:{comp.name}");
  81. if (componentSet.Contains(comp))
  82. componentSet.Remove(comp);
  83. }
  84. //=========================================================================================
  85. /// <summary>
  86. /// パーティクルコンポーネントをデータ更新予約に追加する
  87. /// </summary>
  88. /// <param name="comp"></param>
  89. internal void ReserveDataUpdateParticleComponent(ParticleComponent comp)
  90. {
  91. dataUpdateParticleSet.Add(comp);
  92. }
  93. /// <summary>
  94. /// 予約されたパーティクルコンポーネントのデータを変更し予約リストをクリアする
  95. /// </summary>
  96. internal void DataUpdateParticleComponent()
  97. {
  98. if (dataUpdateParticleSet.Count > 0)
  99. {
  100. foreach (var comp in dataUpdateParticleSet)
  101. {
  102. comp?.DataUpdate();
  103. }
  104. dataUpdateParticleSet.Clear();
  105. }
  106. }
  107. }
  108. }