-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerWalkingState.cs
58 lines (42 loc) · 1.77 KB
/
PlayerWalkingState.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using UnityEngine;
[RequireComponent(typeof(PlayerMoveData))]
public class PlayerWalkingState : PlayerBaseState
{
[Header("Read value's")]
[SerializeField] private float topSpeed;
[Header("Walk")]
[SerializeField] private float groundedSpeed;
[SerializeField] private float airedSpeed;
[SerializeField] private float accelerationTime;
private float _accelerationSpeed;
protected override void EnterState(PlayerStateManager player)
{
IsValidToSwitch = true;
}
protected override void UpdateState(PlayerStateManager player) { }
protected override void FixedUpdateState(PlayerStateManager player)
{
if (player.moveData.CanMove) Walking(player);
}
protected override void ExitState(PlayerStateManager player)
{
_accelerationSpeed = 0;
player.moveData.Deceleration();
player.moveData.Animator.SetBool("IsWalking", false);
}
private void Walking(PlayerStateManager player)
{
if(player.moveData.IsRolling) return;
topSpeed = player.moveData.GroundChecker.IsGrounded ? groundedSpeed : airedSpeed;
var acceleration = topSpeed / accelerationTime;
if(_accelerationSpeed < topSpeed) _accelerationSpeed += acceleration;
else if (_accelerationSpeed >= topSpeed) _accelerationSpeed = topSpeed;
var velocity = player.moveData.Rigidbody.velocity;
var moveForce = velocity.x =+ _accelerationSpeed;
var move = moveForce * player.moveData.MoveDirection.x;
var appliedVelocity = new Vector2(move, player.moveData.Gravity);
player.moveData.Rigidbody.velocity = appliedVelocity;
player.moveData.IsDecelerating = false;
player.moveData.Animator.SetBool("IsWalking", true);
}
}