// Magica Cloth. // Copyright (c) MagicaSoft, 2020-2022. // https://magicasoft.jp using System.Collections.Generic; namespace MagicaCloth { /// /// コンポーネント全体の管理 /// public class PhysicsManagerComponent : PhysicsManagerAccess { /// /// すべてのコンポーネントのセット /// これは初期化の成否に関係なく無条件で登録されるので注意! /// 初期化完了の有無は comp.Status.IsInitSuccess で判定する /// private HashSet componentSet = new HashSet(); /// /// データ更新が必要なパーティクルコンポーネントセット /// private HashSet dataUpdateParticleSet = new HashSet(); //========================================================================================= /// /// 初期設定 /// public override void Create() { } /// /// 破棄 /// public override void Dispose() { } //========================================================================================= /// /// 登録コンポーネント数を返す /// public int ComponentCount { get { return componentSet.Count; } } /// /// 登録コンポーネントに対してアクションを実行します /// /// public void ComponentAction(System.Action act) { foreach (var comp in componentSet) { if (comp != null) act(comp); } } /// /// 登録コンポーネントの実行状態を更新する /// public void UpdateComponentStatus() { foreach (var comp in componentSet) { if (comp == null) continue; if (comp.Status.IsInitSuccess == false) continue; comp.Status.UpdateStatus(); } } //========================================================================================= public void AddComponent(CoreComponent comp) { //Debug.Log($"AddComponent:{comp.name}"); componentSet.Add(comp); } public void RemoveComponent(CoreComponent comp) { //Debug.Log($"RemoveComponent:{comp.name}"); if (componentSet.Contains(comp)) componentSet.Remove(comp); } //========================================================================================= /// /// パーティクルコンポーネントをデータ更新予約に追加する /// /// internal void ReserveDataUpdateParticleComponent(ParticleComponent comp) { dataUpdateParticleSet.Add(comp); } /// /// 予約されたパーティクルコンポーネントのデータを変更し予約リストをクリアする /// internal void DataUpdateParticleComponent() { if (dataUpdateParticleSet.Count > 0) { foreach (var comp in dataUpdateParticleSet) { comp?.DataUpdate(); } dataUpdateParticleSet.Clear(); } } } }