Improved jumping and added TODOs

This commit is contained in:
OverflowNarhoym
2022-02-22 12:17:45 +01:00
parent 9d911b058a
commit 51f44fc153
6 changed files with 172 additions and 44 deletions

View File

@@ -8,15 +8,19 @@ namespace Player
{
public class PlayerController : MonoBehaviour, IMovement, PlayerInput.IPlayerControlActions
{
private const float DefaultJumpForce = 9.81f;
private const float DefaultMass = 80.0f;
private const float DefaultJumpForce = 10.0f;
private const float DefaultMass = 40.0f;
private const float DefaultSpeed = 500.0f;
private const float GravityScale = 1.0f;
private Input.PlayerInput _controls;
private const float FallMultiplier = 3f;
private const float LowJumpMultiplier = 3f;
private PlayerInput _controls;
private Rigidbody2D _playerRigidbody2D;
private SpriteRenderer _playerSpriteRenderer;
private CollisionChecker _playerGroundTrigger;
private CollisionChecker _playerInteractableTrigger;
private bool _moveKeyPressed;
private bool _jumpKeyPressed;
@@ -24,18 +28,17 @@ namespace Player
private bool _isOnAir;
private float _xAxisValue;
private PlayerInput.IPlayerControlActions _playerControlActionsImplementation;
private void Awake()
{
_playerRigidbody2D = gameObject.GetComponent<Rigidbody2D>();
_playerRigidbody2D = GetComponent<Rigidbody2D>();
_playerSpriteRenderer = GetComponent<SpriteRenderer>();
_playerGroundTrigger = GameObject.Find("PlayerGroundTrigger").GetComponent<CollisionChecker>();
_playerSpriteRenderer = gameObject.GetComponent<SpriteRenderer>();
_playerInteractableTrigger = GameObject.Find("PlayerInteractableTrigger").GetComponent<CollisionChecker>();
}
private void Start()
{
_playerRigidbody2D.gravityScale = GravityScale;
_playerRigidbody2D.mass = DefaultMass;
BaseSpeed = DefaultSpeed;
}
@@ -58,15 +61,33 @@ namespace Player
private void FixedUpdate()
{
switch (_playerRigidbody2D.velocity.y)
{
case < 0:
_playerRigidbody2D.velocity +=
Vector2.up * (Physics2D.gravity.y * (FallMultiplier - 1) * Time.fixedDeltaTime);
break;
case > 0 when !_jumpKeyPressed:
_playerRigidbody2D.velocity +=
Vector2.up * (Physics2D.gravity.y * (LowJumpMultiplier - 1) * Time.fixedDeltaTime);
break;
}
if (_moveKeyPressed)
Move(_xAxisValue);
else
_playerRigidbody2D.velocity = new Vector2(0.0f, _playerRigidbody2D.velocity.y);
//TODO prevent jumping while keep pressing the button
if (_jumpKeyPressed && _playerGroundTrigger.IsCollided)
Jump();
}
private void Update()
{
//TODO calculate is on air based on wall and ground triggers
}
// PAUSE METHODS
public bool IsPaused { get; private set; }
@@ -101,8 +122,9 @@ namespace Player
private void Jump()
{
_playerRigidbody2D.velocity = new Vector2(_playerRigidbody2D.velocity.x, 0);
_playerRigidbody2D.AddForce(Vector2.up.normalized * DefaultJumpForce * DefaultMass, ForceMode2D.Impulse);
//_playerRigidbody2D.velocity = new Vector2(_playerRigidbody2D.velocity.x, 0);
//_playerRigidbody2D.AddForce(Vector2.up.normalized * DefaultJumpForce * DefaultMass, ForceMode2D.Impulse);
_playerRigidbody2D.velocity = Vector2.up * DefaultJumpForce;
}
private void Climb()
@@ -141,7 +163,8 @@ namespace Player
public void OnInteract(InputAction.CallbackContext context)
{
throw new NotImplementedException();
if (_playerInteractableTrigger.IsCollided)
throw new NotImplementedException();
}
}
}