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);
                        }
                    }
                }
            }
        }
    }
Exemple #2
0
 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);
             }
         }
     }
 }