using UnityEngine;
using System;
#if MAGICACLOTH2
using MagicaCloth2;
#endif
///
/// MagicaCloth2 시뮬레이션 리셋 관리
///
[Serializable]
public class ClothSimulationManager
{
private Action log;
private Action logError;
public void Initialize(Action log, Action logError)
{
this.log = log;
this.logError = logError;
}
#if MAGICACLOTH2
public void RefreshAllMagicaCloth(bool keepPose = false)
{
var allMagicaCloths = UnityEngine.Object.FindObjectsByType(FindObjectsSortMode.None);
if (allMagicaCloths == null || allMagicaCloths.Length == 0)
{
log?.Invoke("씬에 MagicaCloth 컴포넌트가 없습니다.");
return;
}
int resetCount = 0;
foreach (var cloth in allMagicaCloths)
{
if (cloth != null && cloth.IsValid())
{
try
{
cloth.ResetCloth(keepPose);
resetCount++;
}
catch (Exception e)
{
logError?.Invoke($"MagicaCloth 리셋 실패 ({cloth.gameObject.name}): {e.Message}");
}
}
}
log?.Invoke($"MagicaCloth 시뮬레이션 리셋 완료 ({resetCount}/{allMagicaCloths.Length}개)");
}
public void ResetAllMagicaCloth()
{
RefreshAllMagicaCloth(false);
}
public void ResetAllMagicaClothKeepPose()
{
RefreshAllMagicaCloth(true);
}
#else
public void RefreshAllMagicaCloth(bool keepPose = false)
{
logError?.Invoke("MagicaCloth2가 설치되어 있지 않습니다.");
}
public void ResetAllMagicaCloth()
{
logError?.Invoke("MagicaCloth2가 설치되어 있지 않습니다.");
}
public void ResetAllMagicaClothKeepPose()
{
logError?.Invoke("MagicaCloth2가 설치되어 있지 않습니다.");
}
#endif
}