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#
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
} |