protected override void StartGrab(BaseGrabber grabber) { base.StartGrab(grabber); transform.SetParent(GrabberPrimary.transform); gameObject.GetComponent <Rigidbody>().isKinematic = true; }
public virtual bool TryGrabWith(BaseGrabber grabber) { // TODO error checking, mult-grab checking if (GrabState != GrabStateEnum.Inactive) { switch (grabStyle) { case GrabStyleEnum.Exclusive: // Try to transfer ownership of grabbed object BaseGrabber primary = GrabberPrimary; if (GrabberPrimary.CanTransferOwnershipTo(this, grabber)) { // Remove from grabbable list and detatch activeGrabbers.Remove(primary); DetachFromGrabber(primary); } else { // If we can't, it's a no-go return(false); } break; case GrabStyleEnum.Multi: break; default: throw new ArgumentOutOfRangeException(); } } StartGrab(grabber); return(true); }
/// <summary> /// Specify the target and turn off gravity. Otherwise gravity will interfere with desired grab effect /// </summary> protected override void StartGrab(BaseGrabber grabber) { base.StartGrab(grabber); if (_rigidbody) { _rigidbody.useGravity = false; } }
protected override void AttachToGrabber(BaseGrabber grabber) { GetComponent <Rigidbody>().isKinematic = true; if (!activeGrabbers.Contains(grabber)) { activeGrabbers.Add(grabber); } }
protected override void DetachFromGrabber(BaseGrabber grabber) { if (_rigidbody == null) { _rigidbody = GetComponent <Rigidbody>(); } _rigidbody.isKinematic = false; _rigidbody.useGravity = true; }
protected override void StartGrab(BaseGrabber grabber) { base.StartGrab(grabber); if (grabber is AttachGrabberBase) { transform.position = transform.parent.position; //UnityEngine.Physics.IgnoreCollision(GetComponent<Collider>(), grabber.GetComponent<Collider>()); //this.GetComponent<Collider>().isTrigger = true; } Base.SetGrabber(grabber); }
public virtual void TransferTo(BaseGrabber grabber) { foreach (var oldGrabber in this.ActiveGrabbers.ToList()) { if (!oldGrabber.CanTransferOwnershipTo(this, grabber)) { Debug.LogError("Couldn't transfer ownership of " + this.name + " from " + oldGrabber.name); } //this.DetachFromGrabber(grabber); (?) } }
protected override void StartGrab(BaseGrabber grabber) { base.StartGrab(grabber); if (grabber is ConnectableSlot) { Debug.Log("[" + name + "] " + "Grabbed by slot: " + grabber.name); transform.position = transform.parent.position; } else { Debug.Log("[" + name + "] " + "Being grabbed non-slot: " + grabber.name); } }
public override bool TryGrabWith(BaseGrabber grabber) { var slot = GetSlot(); if (slot != null) { if (!slot.Unpluggable) { return(false); } } return(base.TryGrabWith(grabber)); }
/// <summary> /// Specify the target and turn off gravity. Otherwise gravity will interfere with desired grab effect /// </summary> protected override void StartGrab(BaseGrabber grabber) { base.StartGrab(grabber); if (_rigidbody) { _rigidbody.useGravity = false; } if (_ai) { _ai.pointed = false; _ai.grabbed = true; } }
public override bool CanTransferOwnershipTo(BaseGrabbable ownerGrab, BaseGrabber otherGrabber) { if (!Unpluggable && IsAttached) { return(false); } else { if (Attached != null) { Detach(); } return(base.CanTransferOwnershipTo(ownerGrab, otherGrabber)); } }
public override bool TryGrabWith(BaseGrabber grabber) { if (Base.UnPluggable || !Base.IsPluggedIn()) { if (Base.UnPluggable) { Debug.LogWarning("MARKED AS UNPLUGGABLE WTF BRO"); } return(base.TryGrabWith(grabber)); } else { Debug.Log("Won't start duplicate grab action!! Already Plugged In: " + Base.PluggedInObject().name + ", Attempted Grabber: " + grabber.name); Debug.Log("[" + name + "] " + "Stack: " + StackTraceUtility.ExtractStackTrace()); return(false); } }
protected virtual void StartGrab(BaseGrabber grabber) { Debug.Log("Start grab"); if (GrabState == GrabStateEnum.Inactive) { Debug.Log("State is inactive"); // If we're not already updating our grab state, start now activeGrabbers.Add(grabber); StartCoroutine(StayGrab()); } else { Debug.Log("State is not inactive"); // Otherwise just push the grabber activeGrabbers.Add(grabber); } // Attach ourselves to this grabber AttachToGrabber(grabber); if (OnGrabbed != null) { OnGrabbed(this); } }
/// <summary> /// Attempts to transfer ownership of grabbable object to another grabber /// Can override to 'lock' objects to a grabber, if desired /// </summary> /// <param name="ownerGrab"></param> /// <param name="otherGrabber"></param> /// <returns></returns> public virtual bool CanTransferOwnershipTo(BaseGrabbable ownerGrab, BaseGrabber otherGrabber) { Debug.Log("Transferring ownership of " + ownerGrab.name + " to grabber " + otherGrabber.name); grabbedObjects.Remove(ownerGrab); return(true); }
protected override void DetachFromGrabber(BaseGrabber grabber) { GetComponent <Rigidbody>().isKinematic = false; GetComponent <Rigidbody>().useGravity = true; }
private void Awake() { _grabber = GetComponent <BaseGrabber>(); }
protected virtual void DetachFromGrabber(BaseGrabber grabber) { // By default this does nothing // In most cases this will un-parent or destroy a joint }
//the next three functions provide basic behaviour. Extend from this base script in order to provide more specific functionality. protected virtual void AttachToGrabber(BaseGrabber grabber) { // By default this does nothing // In most cases this will parent or create a joint }
/// <summary> /// Removes a grabber object from the list of available grabbers /// </summary> public void RemoveContact(BaseGrabber availableObject) { availableGrabbers.Remove(availableObject); }
/// <summary> /// Adds a grabber object to the list of available grabbers /// </summary> public void AddContact(BaseGrabber availableObject) { availableGrabbers.Add(availableObject); }
public abstract void SetGrabber(BaseGrabber grabber);