summaryrefslogtreecommitdiff
path: root/GameCode/PlayerJump.cs
blob: 3bad574aec62ae464e198c81f6c95fa7f125f182 (plain)
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
using System;
using UnityEngine;

public class PlayerJump : MonoBehaviour
{
	private CharacterData data;

	public float upForce;

	private CharacterStatModifiers stats;

	public ParticleSystem[] jumpPart;

	public float sideForce = 1f;

	public Action JumpAction;

	private void Start()
	{
		stats = GetComponent<CharacterStatModifiers>();
		data = GetComponent<CharacterData>();
	}

	private void Update()
	{
		if (data.input.jumpWasPressed)
		{
			Jump();
		}
		if (data.input.jumpIsPressed && data.sinceJump < 0.2f)
		{
			data.playerVel.AddForce(Vector2.up * TimeHandler.deltaTime * 2f * data.stats.jump * data.playerVel.mass * (1f - stats.GetSlow()) * upForce, ForceMode2D.Force);
		}
	}

	public void Jump(bool forceJump = false, float multiplier = 1f)
	{
		if (!forceJump && (data.sinceJump < 0.1f || (data.currentJumps <= 0 && data.sinceWallGrab > 0.1f)))
		{
			return;
		}
		Vector3 vector = Vector3.up;
		Vector3 vector2 = data.groundPos;
		if (JumpAction != null)
		{
			JumpAction();
		}
		bool flag = false;
		if (data.sinceWallGrab < 0.1f && !data.isGrounded)
		{
			vector = Vector2.up * 0.8f + data.wallNormal * 0.4f;
			vector2 = data.wallPos;
			data.currentJumps = data.jumps;
			flag = true;
		}
		else
		{
			if (data.sinceGrounded > 0.05f)
			{
				vector2 = base.transform.position;
			}
			data.currentJumps = data.jumps;
		}
		if (data.playerVel.velocity.y < 0f)
		{
			data.playerVel.velocity = new Vector2(data.playerVel.velocity.x, 0f);
		}
		data.sinceGrounded = 0f;
		data.sinceJump = 0f;
		data.isGrounded = false;
		data.isWallGrab = false;
		data.currentJumps--;
		data.playerVel.AddForce(vector * multiplier * 0.01f * data.stats.jump * data.playerVel.mass * (1f - stats.GetSlow()) * upForce, ForceMode2D.Impulse);
		if (!flag)
		{
			data.playerVel.AddForce(Vector2.right * multiplier * sideForce * 0.01f * data.stats.jump * data.playerVel.mass * (1f - stats.GetSlow()) * data.playerVel.velocity.x, ForceMode2D.Impulse);
		}
		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(data.playerVel.velocity);
			jumpPart[i].Play();
		}
	}
}