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