|
|
- 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);
-
-
-
- }
-
-
- }
-
- }
|