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(); 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); } } }