54 lines
1.5 KiB
C#
54 lines
1.5 KiB
C#
using UnityEngine;
|
|
|
|
public partial class OrbitalBehaviour : MonoBehaviour
|
|
{
|
|
[Header("Orbital Information")]
|
|
[SerializeField] private int m_AttachedRing;
|
|
[SerializeField] private float m_DistanceAlongCircumference;
|
|
[SerializeField] private float m_ObjectRadius = 0.1f;
|
|
[SerializeField] private float m_SpinSpeed = 0.1f;
|
|
|
|
[SerializeField] private float m_DistanceFromCentre;
|
|
|
|
[field: SerializeField] protected float ObjectRadiusMultiplier { get; set; } = 1.0f;
|
|
[field: SerializeField] protected bool IsAttachedToRings { get; set; } = true;
|
|
|
|
protected void RegisterObject(OrbitalInitializer init)
|
|
{
|
|
BehaviourManager.RegisterOrbitalInstance(this);
|
|
|
|
m_DistanceAlongCircumference = init.DistanceAlongCircumference;
|
|
m_ObjectRadius = init.ObjectRadius;
|
|
m_SpinSpeed = init.SpinSpeed;
|
|
}
|
|
|
|
public Vector3 TranslateToVector3() => new
|
|
(
|
|
x: m_DistanceFromCentre * Mathf.Cos(m_DistanceAlongCircumference),
|
|
y: m_DistanceFromCentre * Mathf.Sin(m_DistanceAlongCircumference),
|
|
z: 0
|
|
);
|
|
|
|
protected virtual void OnOrbitalCollision(OrbitalBehaviour other) { }
|
|
|
|
protected virtual void OnSimulationRestart() { }
|
|
protected virtual void OnReachCentre() { }
|
|
|
|
protected void AdvanceRing()
|
|
{
|
|
m_AttachedRing++;
|
|
}
|
|
}
|
|
|
|
public class OrbitalInitializer
|
|
{
|
|
public float DistanceAlongCircumference { get; set; }
|
|
public float ObjectRadius { get; set; }
|
|
public float SpinSpeed { get; set; }
|
|
}
|
|
|
|
public class Ring : MonoBehaviour
|
|
{
|
|
public int m_ID;
|
|
}
|