zoom zoom

This commit is contained in:
ntr committed 2023-06-26 23:45:55 +10:00
1 parent 8fd4fb9fd6
commit 384ed9870d
12 files changed
+1049 -195

No files matched your search

+129 -99
View File
@@ -1,120 +1,150 @@
using UnityEngine;
public class ShipControls : MonoBehaviour
{
//Use to switch between Force Modes
public class ShipControls : MonoBehaviour {
enum ModeSwitching { Start, Impulse, Acceleration, Force, VelocityChange };
ModeSwitching m_ModeSwitching;
Vector3 m_StartPos, m_StartForce;
Vector3 m_NewForce;
Vector3 m_StartPos;
Vector3 m_StartForce;
Vector3 m_Thrust;
float m_thrustBase;
float m_stabliseMag;
Rigidbody m_Rigidbody;
public float m_ForceAmp;
public GameObject ship;
public Camera camera;
void Start()
{
//You get the Rigidbody component you attach to the GameObject
void Start() {
m_Rigidbody = GetComponent<Rigidbody>();
//This starts at first mode (nothing happening yet)
m_ModeSwitching = ModeSwitching.Start;
//Initialising the force which is used on GameObject in various ways
m_NewForce = new Vector3(-5.0f, 1.0f, 0.0f);
//The GameObject's starting position and Rigidbody position
m_StartPos = transform.position;
m_StartForce = m_Rigidbody.transform.position;
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 FixedUpdate()
{
//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 = ship.transform.forward * m_ForceAmp;
}
void Update() {
// update the thrust vector every frame
m_Thrust = camera.transform.forward;
//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.Start:
//This resets the GameObject and Rigidbody to their starting positions
transform.position = m_StartPos;
m_Rigidbody.transform.position = 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
m_Rigidbody.AddForce(m_NewForce, ForceMode.Acceleration);
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
m_Rigidbody.AddForce(m_NewForce, ForceMode.Force);
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
m_Rigidbody.AddForce(m_NewForce, ForceMode.Impulse);
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
m_Rigidbody.AddForce(m_NewForce, ForceMode.VelocityChange);
break;
}
// 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;
}
// 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;
}
// //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 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;
}
// //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;
}
}
// //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;
// }
// }
}