123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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");
- }
- 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)
- {
- 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);
- }
- }
- }
|