12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System;
- using UnityEngine;
- namespace SicknessReduction.Visual
- {
- public class VirtualNose : MonoBehaviour
- {
- public GameObject prefabToSpawn;
- public Vector3 padding;
- public bool adjustToIpd = true;
- public Vector3 scaleAt58;
- public Vector3 scaleAt68;
- 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");
- }
- if (adjustToIpd) 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)
- {
- var ipdMm = Mathf.Round(ipdMeters / 1000f);
- nose.transform.localScale = Vector3.Lerp(scaleAt58, scaleAt68, (ipdMm - 58f) / 10f);
- /*Debug.Log($"Scaling nose with factor {ipdMeters * ipdFactor}");
- var newScale = initalLocalScale * (ipdMeters * ipdFactor * ipdFactor);
- nose.transform.localScale = newScale;*/
- }
- private void OnDisable()
- {
- ipdInfo.onIpdChanged -= AdjustToIpd;
- if (nose == null) return;
- Destroy(nose);
- }
- }
- }
|