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;
|
|
|
|
void Awake()
|
|
{
|
|
rigidBody = GetComponent<Rigidbody>();
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
//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);
|
|
}
|
|
}
|