You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Autohand {
[RequireComponent(typeof(Grabbable))]
public class GrabbableExtraEvents : MonoBehaviour {
public UnityHandGrabEvent OnFirstGrab;
public UnityHandGrabEvent OnLastRelease;
public UnityHandGrabEvent OnTwoHandedGrab;
public UnityHandGrabEvent OnTwoHandedRelease;
[Space]
public UnityPlacePointEvent OnPlacePointAdd;
public UnityPlacePointEvent OnPlacePointRemove;
public UnityPlacePointEvent OnPlacePointHighlight;
public UnityPlacePointEvent OnPlacePointUnhighlight;
Grabbable grab;
void OnEnable() {
grab = GetComponent<Grabbable>();
grab.OnGrabEvent += Grab;
grab.OnReleaseEvent += Release;
grab.OnPlacePointAddEvent += PlacePointAdd;
grab.OnPlacePointRemoveEvent += PlacePointRemove;
grab.OnPlacePointHighlightEvent += PlacePointHighlight;
grab.OnPlacePointUnhighlightEvent += PlacePointUnhighlight;
}
void OnDisable() {
grab = grab ?? GetComponent<Grabbable>();
grab.OnGrabEvent -= Grab;
grab.OnReleaseEvent -= Release;
grab.OnPlacePointAddEvent -= PlacePointAdd;
grab.OnPlacePointRemoveEvent -= PlacePointRemove;
grab.OnPlacePointHighlightEvent -= PlacePointHighlight;
grab.OnPlacePointUnhighlightEvent -= PlacePointUnhighlight;
}
public void PlacePointAdd(PlacePoint point, Grabbable grab) {
OnPlacePointAdd?.Invoke(point, grab);
}
public void PlacePointRemove(PlacePoint point, Grabbable grab) {
OnPlacePointRemove?.Invoke(point, grab);
}
public void PlacePointHighlight(PlacePoint point, Grabbable grab) {
OnPlacePointHighlight?.Invoke(point, grab);
}
public void PlacePointUnhighlight(PlacePoint point, Grabbable grab) {
OnPlacePointUnhighlight?.Invoke(point, grab);
}
public void Grab(Hand hand, Grabbable grab) {
if(grab.HeldCount() == 1) {
OnFirstGrab?.Invoke(hand, grab);
}
if(grab.HeldCount() == 2) {
OnTwoHandedGrab?.Invoke(hand, grab);
}
}
public void Release(Hand hand, Grabbable grab) {
if(grab.HeldCount() == 0) {
OnLastRelease?.Invoke(hand, grab);
}
if(grab.HeldCount() == 1) {
OnTwoHandedRelease?.Invoke(hand, grab);
}
}
}
}