// 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();
}
}
}
}