150 lines
5.4 KiB
C#
Executable File
150 lines
5.4 KiB
C#
Executable File
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;
|
||
// }
|
||
// }
|
||
} |