1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using UnityEngine;
- namespace SicknessReduction.Visual
- {
- public class VirtualNose : MonoBehaviour
- {
- public GameObject prefabToSpawn;
- public Vector3 padding;
- public bool adjustToIpd = true;
- public float ipdFactor = 15.15f;
- private Camera cam;
- private GameObject nose;
- private IpdInfo ipdInfo;
- private Vector3 initalLocalScale;
- private void OnEnable()
- {
- cam = Camera.main;
- if (cam == null)
- {
- Debug.LogError("No main camera found. Cannot place virtual nose!");
- return;
- }
- ipdInfo = GetComponentInParent<IpdInfo>();
- if (ipdInfo == null)
- {
- Debug.LogError("No IPD Info found as parent of virtual nose");
- }
- ipdInfo.onIpdChanged += AdjustToIpd;
- nose = Instantiate(prefabToSpawn, cam.transform);
- nose.transform.localPosition = Vector3.forward * cam.nearClipPlane + padding;
- initalLocalScale = nose.transform.localScale;
- }
- private void AdjustToIpd(float ipdMeters)
- {
- Debug.Log($"Scaling nose with factor {ipdMeters * ipdFactor}");
- var newScale = initalLocalScale * (ipdMeters * ipdFactor * ipdFactor);
- nose.transform.localScale = newScale;
- }
- private void OnDisable()
- {
- if (nose == null) return;
- Destroy(nose);
- }
- }
- }
|