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.
		
		
		
		
		
			
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C#
		
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace Autohand{
 | 
						|
    /// <summary>Takes a reference for a disabled grabbable, and grabs that instead</summary>
 | 
						|
    [RequireComponent(typeof(Grabbable))]
 | 
						|
    public class GrabbableSubstitute : MonoBehaviour{
 | 
						|
        [Tooltip("Whether or not to disable this gameobject on grab")]
 | 
						|
        public bool disableOnGrab = true;
 | 
						|
        [Tooltip("If true, the substitute will return to the this local location and turn off and the local grabbable will turn back on")]
 | 
						|
        public bool returnOnRelease = false;
 | 
						|
        public Grabbable grabbableSubstitute;
 | 
						|
 | 
						|
        Grabbable localGrabbable;
 | 
						|
 | 
						|
        private void Start() {
 | 
						|
            localGrabbable = GetComponent<Grabbable>();
 | 
						|
            localGrabbable.OnGrabEvent += OnGrabOriginal;
 | 
						|
            grabbableSubstitute.OnReleaseEvent += OnReleaseSub;
 | 
						|
        }
 | 
						|
 | 
						|
        void OnGrabOriginal(Hand hand, Grabbable grab) {
 | 
						|
            hand.Release();
 | 
						|
 | 
						|
            grabbableSubstitute.gameObject.SetActive(true);
 | 
						|
            hand.CreateGrabConnection(grabbableSubstitute, hand.transform.position, hand.transform.rotation, grab.transform.position, grab.transform.rotation, true);
 | 
						|
 | 
						|
            if(disableOnGrab)
 | 
						|
                grab.gameObject.SetActive(false);
 | 
						|
        }
 | 
						|
 | 
						|
        void OnReleaseSub(Hand hand, Grabbable grab) {
 | 
						|
            if(returnOnRelease) {
 | 
						|
                grabbableSubstitute.transform.position = localGrabbable.transform.position;
 | 
						|
                grabbableSubstitute.transform.rotation = localGrabbable.transform.rotation;
 | 
						|
                grabbableSubstitute.body.position = localGrabbable.body.position;
 | 
						|
                grabbableSubstitute.body.rotation = localGrabbable.body.rotation;
 | 
						|
 | 
						|
                grabbableSubstitute.gameObject.SetActive(false);
 | 
						|
                if(disableOnGrab)
 | 
						|
                    grab.gameObject.SetActive(true);
 | 
						|
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>Disables the local grabbale (if enabled), enables the substitute at the local grabbables positoin)</summary>
 | 
						|
        public void LocalSubstitute(Hand hand, Grabbable grab) {
 | 
						|
            if(localGrabbable.gameObject.activeInHierarchy) {
 | 
						|
                grabbableSubstitute.gameObject.SetActive(true);
 | 
						|
                grabbableSubstitute.transform.position = localGrabbable.transform.position;
 | 
						|
                grabbableSubstitute.transform.rotation = localGrabbable.transform.rotation;
 | 
						|
                grabbableSubstitute.body.position = localGrabbable.body.position;
 | 
						|
                grabbableSubstitute.body.rotation = localGrabbable.body.rotation;
 | 
						|
 | 
						|
                if(disableOnGrab)
 | 
						|
                    localGrabbable.gameObject.SetActive(false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |