Files
2026-06-07 16:58:24 +01:00

52 lines
1.8 KiB
C#

using UnityEngine;
using VRC.Udon.Common.Interfaces;
namespace VRC.Dynamics
{
public class PhysBoneUdonEmitter : IPhysBoneUdonEmitter
{
private readonly IUdonBehaviour[] _udonBehaviours;
private const string EventOnPhysBoneGrabbed = "_onPhysBoneGrabbed";
private const string EventOnPhysBoneReleased = "_onPhysBoneReleased";
private const string EventOnPhysBonePosed = "_onPhysBonePosed";
private const string EventOnPhysBoneUnPosed = "_onPhysBoneUnPosed";
public PhysBoneUdonEmitter(GameObject hostGameObject)
{
_udonBehaviours = hostGameObject.GetComponents<IUdonBehaviour>();
}
public void OnPhysBoneGrabbed(PhysBoneGrabbedInfo physBoneInfo)
{
foreach (IUdonBehaviour udonBehaviour in _udonBehaviours)
{
udonBehaviour.RunEvent(EventOnPhysBoneGrabbed, ("physBoneInfo", physBoneInfo));
}
}
public void OnPhysBoneReleased(PhysBoneReleasedInfo physBoneInfo)
{
foreach (IUdonBehaviour udonBehaviour in _udonBehaviours)
{
udonBehaviour.RunEvent(EventOnPhysBoneReleased, ("physBoneInfo", physBoneInfo));
}
}
public void OnPhysBonePosed(PhysBonePosedInfo physBoneInfo)
{
foreach (IUdonBehaviour udonBehaviour in _udonBehaviours)
{
udonBehaviour.RunEvent(EventOnPhysBonePosed, ("physBoneInfo", physBoneInfo));
}
}
public void OnPhysBoneUnPosed(PhysBoneUnPosedInfo physBoneInfo)
{
foreach (IUdonBehaviour udonBehaviour in _udonBehaviours)
{
udonBehaviour.RunEvent(EventOnPhysBoneUnPosed, ("physBoneInfo", physBoneInfo));
}
}
}
}