blob: db7c18ac8ce8b3cd5f9fc34b42551b8550b648a1 (
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
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
using System.Collections;
using Pathfinding.RVO;
using Rewired;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
[RequireComponent(typeof(RVOController))]
public class PlayerMovement : MonoBehaviour
{
public float speed = 4f;
public float sprintSpeed = 12f;
public Transform meshParent;
public float maxMeshRotationSpeed = 360f;
public Animator meshAnimator;
private Hp hp;
private Transform viewTransform;
private CharacterController controller;
private Player input;
private Quaternion desiredMeshRotation;
private RVOController rvoController;
private float yVelocity;
private bool heavyArmorEquipped;
private bool racingHorseEquipped;
private bool moving;
private bool sprinting;
private bool sprintingToggledOn;
public static PlayerMovement instance;
[SerializeField]
private Equippable heavyArmorPerk;
[SerializeField]
private Equippable warHorsePerk;
private Vector3 velocity;
public bool Moving => moving;
public bool Sprinting => sprinting;
public Vector3 Velocity => velocity;
private void Awake()
{
instance = this;
}
public void TeleportTo(Vector3 _position)
{
controller.enabled = false;
controller.transform.position = _position;
StartCoroutine(EnableControllerNextFrame(controller));
}
private void Start()
{
PlayerManager.RegisterPlayer(this);
viewTransform = Camera.main.transform;
controller = GetComponent<CharacterController>();
input = ReInput.players.GetPlayer(0);
rvoController = GetComponent<RVOController>();
hp = GetComponent<Hp>();
heavyArmorEquipped = PerkManager.IsEquipped(heavyArmorPerk);
racingHorseEquipped = PerkManager.IsEquipped(warHorsePerk);
}
private void Update()
{
Vector2 vector = new Vector2(input.GetAxis("Move Vertical"), input.GetAxis("Move Horizontal"));
if (LocalGamestate.Instance.PlayerFrozen)
{
vector = Vector2.zero;
}
Vector3 normalized = Vector3.ProjectOnPlane(viewTransform.forward, Vector3.up).normalized;
Vector3 normalized2 = Vector3.ProjectOnPlane(viewTransform.right, Vector3.up).normalized;
velocity = Vector3.zero;
velocity += normalized * vector.x;
velocity += normalized2 * vector.y;
velocity = Vector3.ClampMagnitude(velocity, 1f);
if (input.GetButtonDown("Sprint Toggle"))
{
sprintingToggledOn = !sprintingToggledOn;
}
if (sprintingToggledOn && input.GetButton("Sprint"))
{
sprintingToggledOn = false;
}
sprinting = (input.GetButton("Sprint") || sprintingToggledOn) && hp.HpPercentage >= 1f;
velocity *= (sprinting ? sprintSpeed : speed);
if (heavyArmorEquipped && DayNightCycle.Instance.CurrentTimestate == DayNightCycle.Timestate.Night)
{
velocity *= PerkManager.instance.heavyArmor_SpeedMultiplyer;
}
if (racingHorseEquipped)
{
velocity *= PerkManager.instance.racingHorse_SpeedMultiplyer;
}
rvoController.velocity = velocity;
moving = velocity.sqrMagnitude > 0.1f;
if (moving)
{
desiredMeshRotation = Quaternion.LookRotation(velocity.normalized, Vector3.up);
}
if (desiredMeshRotation != meshParent.rotation)
{
meshParent.rotation = Quaternion.RotateTowards(meshParent.rotation, desiredMeshRotation, maxMeshRotationSpeed * Time.deltaTime);
}
meshAnimator.SetBool("Moving", moving);
meshAnimator.SetBool("Sprinting", sprinting);
if (controller.enabled)
{
if (controller.isGrounded)
{
yVelocity = 0f;
}
else
{
yVelocity += -9.81f * Time.deltaTime;
}
velocity += Vector3.up * yVelocity;
controller.Move(velocity * Time.deltaTime);
}
}
private void OnDisable()
{
meshAnimator.SetBool("Moving", value: false);
}
private IEnumerator EnableControllerNextFrame(CharacterController controller)
{
yield return new WaitForEndOfFrame();
controller.enabled = true;
}
}
|