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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
using UnityEngine;
public class Movement : MonoBehaviour
{
public float jumpForce;
public float force;
public float torque;
public float drag = 1f;
public float Angulardrag = 1f;
public ParticleSystem[] jumpPart;
private GeneralInput input;
private Rigidbody2D rig;
private CharacterData data;
private CharacterStatModifiers stats;
public Vector2 knockBack;
private HealthHandler health;
private Vector3 moveDir;
private Vector3 idleForce;
private void Start()
{
rig = GetComponent<Rigidbody2D>();
input = GetComponent<GeneralInput>();
data = GetComponent<CharacterData>();
stats = GetComponent<CharacterStatModifiers>();
health = GetComponent<HealthHandler>();
}
private void FixedUpdate()
{
if (input.direction != Vector3.zero)
{
moveDir = input.direction;
idleForce = Vector3.Lerp(idleForce, moveDir, Time.fixedDeltaTime * 6f);
}
else if (data.isGrounded || data.isWallGrab)
{
idleForce = Vector3.Lerp(idleForce, Vector3.zero, 15f * Time.fixedDeltaTime);
}
else
{
idleForce = Vector3.Lerp(idleForce, Vector3.zero, 3f * Time.fixedDeltaTime);
}
if (input.direction == Vector3.zero)
{
moveDir = idleForce;
}
if (data.isGrounded || data.isWallGrab)
{
knockBack = Vector3.Lerp(knockBack, Vector3.zero, 10f * Time.fixedDeltaTime);
}
else
{
knockBack = Vector3.Lerp(knockBack, Vector3.zero, 7f * Time.fixedDeltaTime);
}
rig.AddForce(knockBack * 0.1f * rig.mass, ForceMode2D.Force);
if (moveDir.y > 0f)
{
moveDir.y = 0f;
}
rig.AddForce(-rig.velocity * 0.01f * drag * rig.mass, ForceMode2D.Force);
rig.AddTorque((0f - rig.angularVelocity) * 0.01f * Angulardrag * rig.mass, ForceMode2D.Force);
if (input.jumpIsPressed)
{
rig.AddForce(Vector2.up * 20f * rig.mass, ForceMode2D.Force);
}
rig.AddForce(moveDir * force * (1f - stats.GetSlow()) * rig.mass, ForceMode2D.Force);
}
private void Update()
{
if (input.jumpWasPressed)
{
Jump();
}
if (data.isGrounded && data.sinceJump > 0.2f)
{
data.currentJumps = data.jumps;
}
}
private void Jump()
{
if (data.sinceJump < 0.15f)
{
return;
}
Vector3 vector = Vector3.up;
Vector3 vector2 = data.groundPos;
if (data.sinceGrounded < 0.1f)
{
if (data.sinceGrounded > 0.05f)
{
vector2 = base.transform.position;
}
data.currentJumps = data.jumps;
}
else if (data.sinceWallGrab < 0.1f)
{
vector = Vector2.up + data.wallNormal;
vector2 = data.wallPos;
data.currentJumps = data.jumps;
}
else
{
if (data.currentJumps <= 0)
{
return;
}
vector2 = base.transform.position;
}
data.currentJumps--;
rig.velocity = new Vector3(rig.velocity.x, 0f);
health.TakeForce(Vector2.up * jumpForce * 1f * (1f - stats.GetSlow()) * rig.mass);
data.sinceJump = 0f;
data.sinceGrounded = 0f;
for (int i = 0; i < jumpPart.Length; i++)
{
jumpPart[i].transform.position = new Vector3(vector2.x, vector2.y, 5f) - vector * 0f;
jumpPart[i].transform.rotation = Quaternion.LookRotation(rig.velocity);
jumpPart[i].Play();
}
}
}
|