예제 #1
0
    protected void Move(Board board, Vector2 dir, float dt)
    {
        board.Dir = dir;

        var col = board.MoveAndCollide(board.Velocity * dt);

        if (col != null)
        {
            if (col.Collider is Ball ball)
            {
                ball.Audio.BoardHit();
                ball.CurrentDir = Bounce.BoardBounce(ball, board.Position, board.Extents, col.Position);
            }
            if (col.Collider is BasePowerUp powerUp)
            {
                powerUp.OnCollect();
            }
            else if (col.Collider is StaticBody2D body)
            {
                board.Dir = Vector2.Zero;
                if (PowerupManager.IsTeleportActive &&
                    body.Name == "right_col")
                {
                    stateMachine.ChangeState(nameof(Warping));
                }
            }
            else if (col.Collider is IHittable obj)
            {
                obj.OnHit();
            }
        }
    }
예제 #2
0
 //bouncing from the board depends on collision place
 private Vector2 BoardBounce(KinematicCollision2D col, Board board)
 {
     return(Bounce.BoardBounce(ball, board.Position, board.Extents, col.Position));
 }