Aetheria/Assets/Scripts/Orbit.cs
hyperion51 0b46d5ee39 Database Support
Refactored almost everything, but most importantly we now integrate with RethinkDB for game data.
2020-03-22 19:05:26 +00:00

70 lines
1.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;
// TODO: USE THIS EVERYWHERE
using static Unity.Mathematics.math;
public class Orbit : MonoBehaviour
{
public Transform Target;
public float Period;
public bool ApplyOrbitRotation = false;
public float Phase;
public float Distance;
public bool CalculatePosition;
//private float _period;
// Use this for initialization
void Start ()
{
if (Target == null)
{
enabled = false;
return;
}
var diff = Target.position - transform.position;
Distance = !CalculatePosition ? Distance : diff.magnitude;
Phase = !CalculatePosition ? Phase : Mathf.Atan2(-diff.x, -diff.z);
if (Mathf.Approximately(Period,0))
{
Period = diff.sqrMagnitude / 100;
}
}
// Update is called once per frame
void Update ()
{
if (Target == null)
{
enabled = false;
Debug.Log("Orbit script updating without target. HOW DOES THIS HAPPEN?!");
return;
}
var time = Time.time;//(GameManager.Instance!=null ? GameManager.Instance.ServerTime : Time.time);
// var p = _phase + time / (Period / (Mathf.PI * 2));
var pos = OrbitInstance.Evaluate(Phase + time / Period);
transform.position = new Vector3(Target.position.x + Distance * pos.x,
transform.position.y,
Target.position.z + Distance * pos.y);
var rot = transform.localRotation.eulerAngles;
if(ApplyOrbitRotation)
transform.rotation = Quaternion.Euler(rot.x,(rot.y*Mathf.Deg2Rad-Time.fixedDeltaTime * Period) * Mathf.Rad2Deg,rot.z);
}
void Parent(Transform parent)
{
Target = parent;
}
}