public void TryPush(bool pushingRight, bool overridePushTime = false) { if (CanPush) { _pushTimer -= Time.deltaTime; if (_pushTimer <= 0 || overridePushTime) { Vector2 direction = Vector2.right; if (!pushingRight) { direction = Vector2.left; } if (!BoxcastHelper.BoxcastInDirection(direction, 1, GroundLayers)) { StartCoroutine(Push(direction.x)); //check for boxes on top of this one and push them too if we can RaycastHit2D result; if (BoxcastHelper.GetFirstBoxcastHit(Vector2.up, 1, GroundLayers, out result)) { PushableBlock pb = result.transform.GetComponent <PushableBlock>(); if (pb != null) { pb.TryPush(pushingRight, true); } } } } } }
private void OnCollisionStay2D(Collision2D collision) { if (collision.gameObject.tag == "PushBlock") { if (OnGround && Mathf.Abs(transform.position.y - collision.transform.position.y) < .5f && CanPush) { float xInput = _controls.GetAxis(ActionNames.HorizontalMovement); PushableBlock pb = collision.gameObject.GetComponent <PushableBlock>(); if (transform.position.x < collision.transform.position.x && xInput > 0) { pb.TryPush(true); } else if (transform.position.x > collision.transform.position.x && xInput < 0) { pb.TryPush(false); } } } }