Added basic orbital spinning
This commit is contained in:
18
Assets/Scripts/GlobalOrbitalUpdater.cs
Normal file
18
Assets/Scripts/GlobalOrbitalUpdater.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class GlobalOrbitalUpdater : MonoBehaviour
|
||||
{
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/GlobalOrbitalUpdater.cs.meta
Normal file
11
Assets/Scripts/GlobalOrbitalUpdater.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c730cd22059933a4f89df9280cb3216d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: -1100
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
69
Assets/Scripts/OrbitalPosition.cs
Normal file
69
Assets/Scripts/OrbitalPosition.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class OrbitalPosition : MonoBehaviour
|
||||
{
|
||||
public float DistanceFromCentre = 0;
|
||||
public float RadiusDistance = 0;
|
||||
|
||||
public Vector3 TranslateToVec3() => new
|
||||
(
|
||||
x: DistanceFromCentre * Mathf.Cos(RadiusDistance),
|
||||
y: DistanceFromCentre * Mathf.Sin(RadiusDistance)
|
||||
);
|
||||
}
|
||||
|
||||
public class GlobalOrbitalPositionManager : MonoBehaviour
|
||||
{
|
||||
static GlobalOrbitalPositionManager s_Instance = null;
|
||||
|
||||
List<OrbitalPosition> m_ObjectInstances = new();
|
||||
|
||||
[SerializeField, Range(0f, 1f)] float m_RadiusSpeed = 0.5f;
|
||||
[SerializeField, Range(0f, 1f)] float m_DistanceSpeed = 0.5f;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
|
||||
private static void OnApplicationStart()
|
||||
{
|
||||
GameObject manager = new("GLOBAL ORBITAL MANAGER");
|
||||
DontDestroyOnLoad(manager);
|
||||
|
||||
s_Instance = manager.AddComponent<GlobalOrbitalPositionManager>();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
foreach (OrbitalPosition orbitalPosition in m_ObjectInstances)
|
||||
{
|
||||
orbitalPosition.DistanceFromCentre = Mathf.Clamp(orbitalPosition.DistanceFromCentre - (m_DistanceSpeed * Time.deltaTime * m_DistanceSpeed), 0f, float.PositiveInfinity);
|
||||
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (m_RadiusSpeed * Time.deltaTime * m_RadiusSpeed)) % (Mathf.PI * 2);
|
||||
|
||||
orbitalPosition.gameObject.transform.position = orbitalPosition.TranslateToVec3();
|
||||
}
|
||||
}
|
||||
|
||||
public static void RegisterOrbitalPositionInstance(OrbitalPosition newInstance) =>
|
||||
s_Instance.m_ObjectInstances.Add(newInstance);
|
||||
|
||||
public static void UnregisterOrbitalPositionInstance(OrbitalPosition removedInstance) =>
|
||||
s_Instance.m_ObjectInstances.Remove(removedInstance);
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(OrbitalPosition))]
|
||||
public abstract class OrbitalPositionBehaviour : MonoBehaviour
|
||||
{
|
||||
protected OrbitalPosition m_OrbitalPosition = null;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
m_OrbitalPosition = GetComponent<OrbitalPosition>();
|
||||
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
|
||||
|
||||
OnStart();
|
||||
}
|
||||
|
||||
private void OnDestroy() =>
|
||||
GlobalOrbitalPositionManager.UnregisterOrbitalPositionInstance(m_OrbitalPosition);
|
||||
|
||||
public abstract void OnStart();
|
||||
}
|
||||
11
Assets/Scripts/OrbitalPosition.cs.meta
Normal file
11
Assets/Scripts/OrbitalPosition.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a035e66fabb459f48aa8f152b3d4f339
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
11
Assets/Scripts/PlayerController.cs
Normal file
11
Assets/Scripts/PlayerController.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class PlayerController : OrbitalPositionBehaviour
|
||||
{
|
||||
public override void OnStart()
|
||||
{
|
||||
m_OrbitalPosition.DistanceFromCentre = 10;
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/PlayerController.cs.meta
Normal file
11
Assets/Scripts/PlayerController.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2895addc317815345b19503bab859a6a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user