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