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(); } }