first track yeehaw cowboy

This commit is contained in:
ntr committed 2023-06-29 23:30:13 +10:00
1 parent b23668e1e0
commit b009d4fe5a
19 files changed
+38710 -370

No files matched your search

+92 -110
View File
@@ -1,150 +1,132 @@
using UnityEngine;
public class ShipControls : MonoBehaviour {
enum ModeSwitching { Start, Impulse, Acceleration, Force, VelocityChange };
ModeSwitching m_ModeSwitching;
public Camera m_camera;
Vector3 m_StartPos;
Vector3 m_StartForce;
Vector3 m_Thrust;
float m_thrustBase;
Rigidbody m_ridigBody;
Vector3 m_initialPosition;
Vector3 m_initialForce;
Vector3 m_thrust;
Vector3 m_strafe;
float m_strafeMag;
float m_thrustMag;
float m_stabliseMag;
ForceMode m_forceMode;
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;
m_ridigBody = GetComponent<Rigidbody>();
m_initialPosition = m_ridigBody.transform.position;
m_initialForce = Vector3.zero;
m_thrust = Vector3.zero;
m_strafe = Vector3.zero;
m_thrustMag = 50.0f;
m_strafeMag = 25.0f;
m_stabliseMag = 75.0f;
m_forceMode = ForceMode.Acceleration;
}
void Update() {
// update the thrust vector every frame
m_Thrust = camera.transform.forward;
// update the movement vectors every frame
m_thrust = getThrust();
m_strafe = getStrafe();
Debug.Log(m_thrust);
// do everything else input related on every frame too
processInput();
}
void FixedUpdate() {
float thrustMag = getThrustMagnitude();
m_Rigidbody.AddForce(m_Thrust * thrustMag, ForceMode.Acceleration);
// // the ship being propelled forward
m_ridigBody.AddForce(m_thrust, m_forceMode);
// moving side to side
m_ridigBody.AddForce(m_strafe, m_forceMode);
// stablise ship towards camera position
// add relative force?
// rotating towards the camera's orientation
// not being done by a force because of strange behaviour
// needs investigation
float step = m_stabliseMag * Time.fixedDeltaTime;
m_Rigidbody.rotation = Quaternion.RotateTowards(transform.rotation, camera.transform.rotation, step);
m_ridigBody.rotation = Quaternion.RotateTowards(transform.rotation, m_camera.transform.rotation, step);
}
float getThrustMagnitude() {
Vector3 getThrust() {
// thrust
if (Input.GetMouseButton(0))
return 1.0f * m_thrustBase;
return m_camera.transform.TransformDirection(Vector3.forward) * m_thrustMag;
// brake
if (Input.GetMouseButton(1))
return -1.0f * m_thrustBase;
return m_camera.transform.TransformDirection(Vector3.back) * m_thrustMag;
return 0.0f;
return Vector3.zero;
}
// 2D strafing
// TODO add multiplier
// combine
Vector3 getStrafe() {
Vector3 strafe = new Vector3(0.0f, 0.0f, 0.0f);
if (Input.GetKey(KeyCode.W))
strafe += m_strafeMag * m_camera.transform.TransformDirection(Vector3.up);
if (Input.GetKey(KeyCode.S))
strafe += m_strafeMag * m_camera.transform.TransformDirection(Vector3.down);
if (Input.GetKey(KeyCode.A))
strafe += m_strafeMag * m_camera.transform.TransformDirection(Vector3.left);
if (Input.GetKey(KeyCode.D))
strafe += m_strafeMag * m_camera.transform.TransformDirection(Vector3.right);
return strafe;
}
void processInput() {
if (Input.GetKey(KeyCode.Space))
Respawn();
if (Input.GetKey(KeyCode.Alpha1))
m_forceMode = ForceMode.Acceleration;
if (Input.GetKey(KeyCode.Alpha2))
m_forceMode = ForceMode.Impulse;
if (Input.GetKey(KeyCode.Alpha3))
m_forceMode = ForceMode.Force;
if (Input.GetKey(KeyCode.Alpha4))
m_forceMode = ForceMode.VelocityChange;
}
void Respawn() {
m_Thrust = new Vector3(0.0f, 0.0f, 0.0f);
transform.position = m_StartPos;
m_Rigidbody.transform.forward = m_StartForce;
m_thrust = new Vector3(0.0f, 0.0f, 0.0f);
transform.position = m_initialPosition;
m_ridigBody.transform.forward = m_initialForce;
m_ridigBody.velocity = new Vector3(0f, 0f, 0f);
m_camera.transform.eulerAngles = Vector3.forward;
}
// {
// //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;
// }
void OnDrawGizmosSelected() {
Gizmos.color = Color.red;
Vector3 direction = m_camera.transform.TransformDirection(Vector3.up) * 10;
Gizmos.DrawRay(transform.position, direction);
// //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;
Gizmos.color = Color.green;
Vector3 right = m_camera.transform.TransformDirection(Vector3.right) * 10;
Gizmos.DrawRay(transform.position, right);
// //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;
// }
// }
Gizmos.color = Color.yellow;
Vector3 forward = m_camera.transform.TransformDirection(Vector3.forward) * 10;
Gizmos.DrawRay(transform.position, forward);
}
}