Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

71 lines
1.6 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class ArtificialGravity : MonoBehaviour
{
[SerializeField]
private RotationController Ship;
[SerializeField]
private float m_correlusMultiplier = 1;
private Rigidbody rb;
private void OnEnable()
{
rb = GetComponent<Rigidbody>();
rb.useGravity = false;
if (Ship == null)
Ship = FindObjectOfType<RotationController>();
}
private void FixedUpdate()
{
ApplyGravity();
}
private void ApplyGravity()
{
if (Ship.RotationPeriod <= 0)
return;
Vector3 direction = Ship.getDownDirection(transform.position, false);
float distance = direction.magnitude;
float force = distance * Mathf.Pow(2 * Mathf.PI / Ship.RotationPeriod, 2);
Debug.DrawRay(transform.position, transform.position + direction);
rb.AddForce(direction.normalized * force * Time.fixedDeltaTime, ForceMode.Acceleration);
if (!IsGrounded())
{
direction = Ship.getPerpendicularDirection(transform.position);
rb.AddForce(direction * Ship.CorrelusStrength * m_correlusMultiplier * Time.fixedDeltaTime * distance, ForceMode.Acceleration);
Debug.DrawRay(transform.position, direction, Color.blue);
}
}
private bool IsGrounded()
{
Ray ray = new Ray(transform.position, Ship.getDownDirection(transform.position));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 0.25f)){
return true;
}
return false;
}
}