コード例 #1
0
ファイル: GrabbableChild.cs プロジェクト: firemansamm/jengavr
    protected override void StartGrab(BaseGrabber grabber)
    {
        base.StartGrab(grabber);

        transform.SetParent(GrabberPrimary.transform);
        gameObject.GetComponent <Rigidbody>().isKinematic = true;
    }
コード例 #2
0
    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);
    }
コード例 #3
0
 /// <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;
     }
 }
コード例 #4
0
 protected override void AttachToGrabber(BaseGrabber grabber)
 {
     GetComponent <Rigidbody>().isKinematic = true;
     if (!activeGrabbers.Contains(grabber))
     {
         activeGrabbers.Add(grabber);
     }
 }
コード例 #5
0
    protected override void DetachFromGrabber(BaseGrabber grabber)
    {
        if (_rigidbody == null)
        {
            _rigidbody = GetComponent <Rigidbody>();
        }

        _rigidbody.isKinematic = false;
        _rigidbody.useGravity  = true;
    }
コード例 #6
0
 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);
 }
コード例 #7
0
 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); (?)
     }
 }
コード例 #8
0
 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);
     }
 }
コード例 #9
0
        public override bool TryGrabWith(BaseGrabber grabber)
        {
            var slot = GetSlot();

            if (slot != null)
            {
                if (!slot.Unpluggable)
                {
                    return(false);
                }
            }
            return(base.TryGrabWith(grabber));
        }
コード例 #10
0
 /// <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;
     }
 }
コード例 #11
0
 public override bool CanTransferOwnershipTo(BaseGrabbable ownerGrab, BaseGrabber otherGrabber)
 {
     if (!Unpluggable && IsAttached)
     {
         return(false);
     }
     else
     {
         if (Attached != null)
         {
             Detach();
         }
         return(base.CanTransferOwnershipTo(ownerGrab, otherGrabber));
     }
 }
コード例 #12
0
 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);
     }
 }
コード例 #13
0
    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);
        }
    }
コード例 #14
0
 /// <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);
 }
コード例 #15
0
 protected override void DetachFromGrabber(BaseGrabber grabber)
 {
     GetComponent <Rigidbody>().isKinematic = false;
     GetComponent <Rigidbody>().useGravity  = true;
 }
コード例 #16
0
 private void Awake()
 {
     _grabber = GetComponent <BaseGrabber>();
 }
コード例 #17
0
 protected virtual void DetachFromGrabber(BaseGrabber grabber)
 {
     // By default this does nothing
     // In most cases this will un-parent or destroy a joint
 }
コード例 #18
0
    //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
    }
コード例 #19
0
 /// <summary>
 /// Removes a grabber object from the list of available grabbers
 /// </summary>
 public void RemoveContact(BaseGrabber availableObject)
 {
     availableGrabbers.Remove(availableObject);
 }
コード例 #20
0
 /// <summary>
 /// Adds a grabber object to the list of available grabbers
 /// </summary>
 public void AddContact(BaseGrabber availableObject)
 {
     availableGrabbers.Add(availableObject);
 }
コード例 #21
0
 public abstract void SetGrabber(BaseGrabber grabber);