Files
spacerace/Assets/ShipControls.cs
T
2023-06-26 23:45:55 +10:00

150 lines
5.4 KiB
C#
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
public class ShipControls : MonoBehaviour {
enum ModeSwitching { Start, Impulse, Acceleration, Force, VelocityChange };
ModeSwitching m_ModeSwitching;
Vector3 m_StartPos;
Vector3 m_StartForce;
Vector3 m_Thrust;
float m_thrustBase;
float m_stabliseMag;
Rigidbody m_Rigidbody;
public GameObject ship;
public Camera camera;
void Start() {
m_Rigidbody = GetComponent<Rigidbody>();
m_Thrust = new Vector3(0.0f, 0.0f, 0.0f);
m_StartPos = camera.transform.position;
m_StartForce = m_Rigidbody.transform.forward;
m_thrustBase = 10.0f;
m_stabliseMag = 75.0f;
Cursor.lockState = CursorLockMode.Locked;
}
void Update() {
// update the thrust vector every frame
m_Thrust = camera.transform.forward;
// do everything else input related on every frame too
processInput();
}
void FixedUpdate() {
float thrustMag = getThrustMagnitude();
m_Rigidbody.AddForce(m_Thrust * thrustMag, ForceMode.Acceleration);
// stablise ship towards camera position
float step = m_stabliseMag * Time.fixedDeltaTime;
m_Rigidbody.rotation = Quaternion.RotateTowards(transform.rotation, camera.transform.rotation, step);
}
float getThrustMagnitude() {
if (Input.GetMouseButton(0))
return 1.0f * m_thrustBase;
if (Input.GetMouseButton(1))
return -1.0f * m_thrustBase;
return 0.0f;
}
void processInput() {
if (Input.GetKey(KeyCode.Space))
Respawn();
}
void Respawn() {
m_Thrust = new Vector3(0.0f, 0.0f, 0.0f);
transform.position = m_StartPos;
m_Rigidbody.transform.forward = m_StartForce;
}
// {
// //If the current mode is not the starting mode (or the GameObject is not reset), the force can change
// if (m_ModeSwitching != ModeSwitching.Start)
// {
// //The force changes depending what you input into the text fields
// m_NewForce = camera.transform.position;
// }
// //Here, switching modes depend on button presses in the Game mode
// switch (m_ModeSwitching)
// {
// //This is the starting mode which resets the GameObject
// case ModeSwitching.Startt
// //This resets the GameObject and Rigidbody to their starting positions
// transform.position = m_StartPos;
// m_Rigidbody.transform.forward = m_StartForce;
// //This resets the velocity of the Rigidbody
// m_Rigidbody.velocity = new Vector3(0f, 0f, 0f);
// break;
// //These are the modes ForceMode can force on a Rigidbody
// //This is Acceleration mode
// case ModeSwitching.Acceleration:
// //Use Acceleration as the force on the Rigidbody
// break;
// //This is Force Mode, using a continuous force on the Rigidbody considering its mass
// case ModeSwitching.Force:
// //Use Force as the force on GameObject’s Rigidbody
// break;
// //This is Impulse Mode, which involves using the Rigidbody’s mass to apply an instant impulse force.
// case ModeSwitching.Impulse:
// //Use Impulse as the force on GameObject
// break;
// //This is VelocityChange which involves ignoring the mass of the GameObject and impacting it with a sudden speed change in a direction
// case ModeSwitching.VelocityChange:
// //Make a Velocity change on the Rigidbody
// break;
// }
// }
//The function outputs buttons, text fields, and other interactable UI elements to the Scene in Game view
// void OnGUI()
// {
// //Press the button to reset the GameObject and Rigidbody
// if (GUI.Button(new Rect(100, 0, 150, 30), "Reset"))
// {
// //This switches to the start/reset case
// m_ModeSwitching = ModeSwitching.Start;
// }
// //When you press the Acceleration button, switch to Acceleration mode
// if (GUI.Button(new Rect(100, 30, 150, 30), "Apply Acceleration"))
// {
// //Switch to Acceleration (apply acceleration force to GameObject)
// m_ModeSwitching = ModeSwitching.Acceleration;
// }
// //If you press the Impulse button
// if (GUI.Button(new Rect(100, 60, 150, 30), "Apply Impulse"))
// {
// //Switch to impulse (apply impulse forces to GameObject)
// m_ModeSwitching = ModeSwitching.Impulse;
// }
// //If you press the Force Button, switch to Force state
// if (GUI.Button(new Rect(100, 90, 150, 30), "Apply Force"))
// {
// //Switch to Force (apply force to GameObject)
// m_ModeSwitching = ModeSwitching.Force;
// }
// //Press the button to switch to VelocityChange state
// if (GUI.Button(new Rect(100, 120, 150, 30), "Apply Velocity Change"))
// {
// //Switch to velocity changing
// m_ModeSwitching = ModeSwitching.VelocityChange;
// }
// }
}