using UnityEngine;
using VRM.FastSpringBones.Components;
using VRM.FastSpringBones.Registries;
namespace VRM
{
///
/// Scene 上に単一で存在する、FastSpringBone の ServiceLocator 兼 EntryPoint
///
public class FastSpringBoneService : MonoBehaviour
{
public RootBoneRegistry RootBoneRegistry { get; private set; }
public TransformRegistry TransformRegistry { get; private set; }
public ColliderGroupRegistry ColliderGroupRegistry { get; private set; }
public FastSpringBoneScheduler FastSpringBoneScheduler { get; private set; }
private static FastSpringBoneService _instance;
public static FastSpringBoneService Instance
{
get
{
if (!_instance)
{
var gameObject = new GameObject("FastSpringBone Service");
DontDestroyOnLoad(gameObject);
_instance = gameObject.AddComponent();
}
return _instance;
}
}
///
/// 専有しているインスタンスを破棄する
///
public static void Free()
{
Destroy(_instance.gameObject);
_instance = null;
}
private void Awake()
{
RootBoneRegistry = new RootBoneRegistry();
TransformRegistry = new TransformRegistry();
ColliderGroupRegistry = new ColliderGroupRegistry();
FastSpringBoneScheduler = gameObject.AddComponent();
FastSpringBoneScheduler.Initialize(
RootBoneRegistry,
TransformRegistry,
ColliderGroupRegistry);
}
}
}