Esempio n. 1
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();
        }
    }