using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
public class BoatController : MonoBehaviour
|
|
{
|
|
private Rigidbody rigidBody;
|
|
|
|
[SerializeField]
|
|
private float ForwardFactor = 1f;
|
|
[SerializeField]
|
|
private float RotationFactor = 1f;
|
|
[SerializeField]
|
|
private float BrakeFactor = 1f;
|
|
|
|
[SerializeField]
|
|
private float ObstacleBounce = 2f;
|
|
|
|
[SerializeField]
|
|
private bool m_usedebugkeys;
|
|
|
|
void Awake()
|
|
{
|
|
rigidBody = GetComponent<Rigidbody>();
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
if (!m_usedebugkeys)
|
|
return;
|
|
|
|
//get input
|
|
if (Input.GetKeyDown(KeyCode.A))
|
|
{
|
|
RowLeft();
|
|
}
|
|
if (Input.GetKeyDown(KeyCode.D))
|
|
{
|
|
RowRight();
|
|
}
|
|
if (Input.GetKeyDown(KeyCode.S))
|
|
{
|
|
Brake();
|
|
}
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
//print(transform.rotation.eulerAngles.y);
|
|
//constrain rotation
|
|
if (transform.rotation.eulerAngles.y > 180 && transform.rotation.eulerAngles.y < 270)
|
|
{
|
|
print("under");
|
|
transform.rotation = Quaternion.Euler(new Vector3(0f, 270f, 0f));
|
|
rigidBody.angularVelocity = Vector3.zero;
|
|
}
|
|
|
|
//constrain rotation
|
|
if (transform.rotation.eulerAngles.y < 180 && transform.rotation.eulerAngles.y > 90f)
|
|
{
|
|
print("over");
|
|
transform.rotation = Quaternion.Euler(new Vector3(0f, 90f, 0f));
|
|
rigidBody.angularVelocity = Vector3.zero;
|
|
}
|
|
}
|
|
|
|
public void RowLeft()
|
|
{
|
|
rigidBody.AddForce(transform.forward * ForwardFactor, ForceMode.Acceleration);
|
|
rigidBody.AddTorque(transform.up * -RotationFactor);
|
|
}
|
|
|
|
public void RowLeft(float velocity)
|
|
{
|
|
rigidBody.AddForce(transform.forward * ForwardFactor * velocity, ForceMode.Acceleration);
|
|
rigidBody.AddTorque(transform.up * -RotationFactor * velocity);
|
|
}
|
|
|
|
public void RowRight()
|
|
{
|
|
rigidBody.AddForce(transform.forward * ForwardFactor, ForceMode.Acceleration);
|
|
rigidBody.AddTorque(transform.up * RotationFactor);
|
|
}
|
|
|
|
public void RowRight(float velocity)
|
|
{
|
|
rigidBody.AddForce(transform.forward * ForwardFactor * velocity, ForceMode.Acceleration);
|
|
rigidBody.AddTorque(transform.up * RotationFactor * velocity);
|
|
}
|
|
|
|
public void Brake()
|
|
{
|
|
rigidBody.AddForce(rigidBody.velocity * - BrakeFactor);
|
|
rigidBody.AddTorque(rigidBody.angularVelocity * -BrakeFactor);
|
|
}
|
|
|
|
public void OnCollisionEnter(Collision collision)
|
|
{
|
|
if (collision.gameObject.CompareTag("Obstacle"))
|
|
{
|
|
|
|
Debug.Log($"Hitting: {collision.gameObject} Foce: {collision.impulse * ObstacleBounce}");
|
|
|
|
rigidBody.AddForce(collision.impulse * ObstacleBounce, ForceMode.Impulse);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|