using Pong.Scripts.Managers; namespace Pong.Scripts.Objects; public partial class Paddle : RigidBody2D { [Export] private double _moveSpeed; private double _verticalInput; private readonly StringName _paddleUp = "paddle_up"; private readonly StringName _paddleDown = "paddle_down"; private ScalingManager _scalingManager; private bool _canMove = true; private Vector2 _originalPosition; private Vector2? _newPosition; /// /// property that multiples the moveSpeed by the Meter constant. /// private double MoveSpeed => _moveSpeed * Constants.Meter; public override void _EnterTree() { SetNotifyTransform(true); SetNotifyLocalTransform(true); _scalingManager = GetNode("../ScalingManager"); _scalingManager.NewPaddlePosition += (_, vector2) => _newPosition = vector2; } public override void _Process(double delta) { _verticalInput = GetVerticalInput(); } public override void _IntegrateForces(PhysicsDirectBodyState2D state) { if (_newPosition.HasValue) { state.Transform = new Transform2D(0, _newPosition.Value); _newPosition = null; } state.LinearVelocity = Vector2.Up * MoveSpeed * _verticalInput; } /// /// a method that returns a number that represents input on the vertical axis. /// /// 1 for up, -1 for down, 0 for nothing. private double GetVerticalInput() { if (Input.IsActionPressed(_paddleUp)) { return 1; } if (Input.IsActionPressed(_paddleDown)) { return -1; } return 0; } }