private void AttemptGrab()
 {
     if (objectToGrab != null)
     {
         objectToGrab.Grab(this);
     }
 }
예제 #2
0
    public void GrabGrabbable(IGrabbable grabbable)
    {
        if (CloserGrabbable == null || Carryer != null)
        {
            return;
        }

        grabbable.Grab(this);
        anim.SetBool("Holding", true);
    }
예제 #3
0
    private void GetGrabbedObject()
    {
        ray = Cam.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit))
        {
            if ((grabbedObject = hit.transform.GetComponent <IGrabbable>()) != null)
            {
                grabbedObject.Grab(mouseAnchor.rigidbody, GetMousePosition());
            }
        }
    }
예제 #4
0
        public void Grab()
        {
            if (IsHandFull || !ObjectToGrab)
            {
                return;
            }

            _objectInHand = ObjectToGrab.GetComponent <MonoGrabbable>().GetGrabbable();
            _objectInHand.Grab(FixedJoint);
            ObjectToGrab = null;
            IsHandFull   = true;
        }
예제 #5
0
    public void IExecute()
    {
        if (grabbedBody == null)
        {
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

            if (hit.collider != null && hit.collider.gameObject.TryGetComponent <IGrabbable>(out grabbed))
            {
                if (Vector2.Distance(player.position, hit.collider.transform.position) < maxRange)
                {
                    grabbedBody   = hit.collider.gameObject.GetComponent <Rigidbody2D>();
                    grabbedObject = hit.collider.transform;
                    previousLayer = grabbedObject.gameObject.layer;
                    grabbedObject.gameObject.layer = 11; //Magic number for Grabbed Object layer
                    grabbed.Grab();
                    var grabEffect = grabbed.GetGrabEffect();
                    if (grabEffect.Item1 == Grabbable.GrabEffect.SlowDown)
                    { //This is dumb and should be changed
                        Movement movement = player.gameObject.GetComponent <Movement>();
                        Debug.Log(grabEffect.Item2);
                        uneditedSpeed  = movement.speed;
                        movement.speed = uneditedSpeed * (1 / grabEffect.Item2);
                    }
                }
            }
        }
        else
        {
            var grabEffect = grabbed.GetGrabEffect();
            if (grabEffect.Item1 == Grabbable.GrabEffect.SlowDown)
            {
                player.gameObject.GetComponent <Movement>().speed = uneditedSpeed;
            }
            grabbedObject.gameObject.layer = previousLayer;
            grabbedBody   = null;
            grabbedObject = null;
            grabbed.Release();
        }
    }
예제 #6
0
    void Grab()
    {
        anim.SetBool("Grab", true);
        handState        = HandState.Grab;
        gameObject.layer = LayerMask.NameToLayer("HandGrabbed");

        if (TryInteract())
        {
            return;
        }

        IGrabbable obj = null;

        Collider2D[] colliders = Physics2D.OverlapCircleAll(grabPosition.position, grabRadius, grabMask);

        if (colliders.Length > 0)
        {
            obj = colliders[0].GetComponent <IGrabbable>();

            float min = (grabPosition.position - colliders[0].transform.position).magnitude;

            for (int i = 1; i < colliders.Length; i++)
            {
                float d = (grabPosition.position - colliders[i].transform.position).magnitude;
                if (d < min)
                {
                    min = d;
                    obj = colliders[i].GetComponent <IGrabbable>();
                }
            }
        }

        grabbedObj = obj;
        if (grabbedObj != null)
        {
            grabbedObj.Grab();
        }
    }
예제 #7
0
    private void Grab()
    {
        RaycastHit hit;

        if (Physics.Raycast(transform.position, Vector3.forward, out hit, GrabDistance))
        {
            Debug.DrawRay(transform.position, Vector3.forward * hit.distance, Color.yellow);
            Debug.Log(hit.ToString());

            GameObject grabbedGameObject = hit.transform.gameObject;
            IGrabbable grabbable         = grabbedGameObject.GetComponent <IGrabbable>();
            if (grabbable != null)
            {
                grabbable.Grab(this);
                isGrabbing       = true;
                currentlyGrabbed = grabbable;
            }
        }
        else
        {
            Debug.DrawRay(transform.position, Vector3.forward * GrabDistance, Color.yellow);
        }
    }
예제 #8
0
    public void OnGrab()
    {
        if (character == null)
        {
            return;
        }
        Ray          ray    = new Ray(this.transform.position, lookDirection.normalized * character.GetInteractionRange());
        RaycastHit2D hitBox = Physics2D.CircleCast(ray.GetPoint(character.GetInteractionRange() / 2), character.GetInteractionRange() / 2, lookDirection.normalized, character.GetInteractionRange(), interactionLayer);

        if (hitBox)
        {
            RaycastHit2D hitInfo = Physics2D.Raycast(this.transform.position, hitBox.transform.position - this.transform.position, character.GetInteractionRange(), interactionLayer);
            if (hitInfo)
            {
                IGrabbable item = hitInfo.transform.gameObject.GetComponentInParent <IGrabbable>();
                if (item != null)
                {
                    currentGrabItem = item.Grab(motor, hitInfo.point);
                    CallAnimationTrigger?.Invoke("", null);
                    PlayAudio?.Invoke("Grab", 0f);
                }
            }
        }
    }
예제 #9
0
        private bool Grab(GameObject gameObject)
        {
            BeatMap.Log("Saber called grab on " + gameObject.name);
            IGrabbable grabbable = gameObject.GetComponent <IGrabbable>();

            if (grabbable == null)
            {
                grabbable = gameObject.GetComponentInParent <IGrabbable>();
            }
            if (grabbable == null)
            {
                Debug.LogWarning("Object not grabbable - " + gameObject.name);
                return(false);
            }
            if (grabbable.IsGrabbed())
            {
                Debug.LogWarning("Object already grabbed - " + gameObject.name);
                return(false);
            }
            grabbable.Grab(this);
            grabbing = true;
            addVibration(.5f, .5f, true);
            return(true);
        }
예제 #10
0
    void OnTriggerEnter2D(Collider2D other)
    {
        if (headState() == LamaController.HeadState.Launched)
        {
            IGrabbable grab = other.GetComponent <IGrabbable>();
            if (grab != null)
            {
                Debug.Log("Grabbed");
                //Alors on grab le bouzingue
                grab.Grab(gameObject);
                grabbedObject = other.gameObject;

                foreach (CircleCollider2D c in cc)
                {
                    c.enabled = false;
                }
                maxDistance = GetDistance(0, NeckNodes.Count);

                rigid.velocity = Vector2.zero;

                lama.headState = LamaController.HeadState.Grabbing;
            }
        }
    }