using UnityEngine; using UnityEngine.InputSystem; public class Movement : MonoBehaviour { [SerializeField] InputAction thrust; [SerializeField] InputAction rotate; [SerializeField] float thrustStrength = 10f; [SerializeField] float rotationSpeed = 100f; [SerializeField] float fuelConsumptionRate = 1f; Rigidbody rb; AudioSource audioSource; PlayerStats playerStats; void Start() { rb = GetComponent(); audioSource = GetComponent(); playerStats = GetComponent(); } void OnEnable() { thrust.Enable(); rotate.Enable(); } void FixedUpdate() { ProcessThrust(); ProcessRotation(); } private void ProcessThrust() { if (thrust.IsPressed()) { rb.AddRelativeForce(Vector3.up * thrustStrength * Time.fixedDeltaTime); playerStats.UseFuel(fuelConsumptionRate); if (!audioSource.isPlaying) { audioSource.Play(); } } else { audioSource.Stop(); } } private void ProcessRotation() { float rotationInput = rotate.ReadValue(); if(rotationInput < 0) { ApplyRotation(rotationSpeed); } else if(rotationInput > 0) { ApplyRotation(-rotationSpeed); } } private void ApplyRotation(float rotationThisFrame) { rb.freezeRotation = true; // freezing rotation so we can manually rotate transform.Rotate(Vector3.forward * rotationThisFrame * Time.fixedDeltaTime); rb.freezeRotation = false; // unfreezing rotation so the physics system can take over } }