123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- using System;
- using System.Collections;
- using UnityEngine;
- public class OvrTablet : MonoBehaviour
- {
- public float Size
- {
- get
- {
- return base.transform.localScale.x;
- }
- set
- {
- if (GameMain.Instance.VRDeviceTypeID != GameMain.VRDeviceType.NON)
- {
- float num = Mathf.Clamp(value, 0.5f, 3f);
- base.transform.localScale = new Vector3(num, num, num);
- }
- }
- }
- public bool IsRotDown
- {
- get
- {
- return this.m_bRotDown;
- }
- }
- public bool IsSideBack
- {
- get
- {
- return this.m_bSideBack;
- }
- }
- public bool UIStickyHead
- {
- get
- {
- return this.m_bUIStickyHead;
- }
- set
- {
- this.m_bUIStickyHead = value;
- }
- }
- private void Awake()
- {
- this.m_trScreen = base.transform.Find("Screen");
- NDebug.Assert(this.m_trScreen != null, "OvrTablet Screenが見つかりません。");
- this.m_vScaleBackup = base.transform.localScale;
- this.m_vScaleNow = this.m_vScaleBackup;
- this.m_trButton = base.transform.Find("Button");
- NDebug.Assert(this.m_trButton != null, "OvrTablet Buttonが見つかりません。");
- this.m_trTabletFrame = base.transform.Find("Tablet");
- NDebug.Assert(this.m_trTabletFrame != null, "OvrTablet Tabletが見つかりません。");
- }
- public void Init(GameObject f_goCenterEye)
- {
- this.m_trOvrUiTabletResetParent = UTY.GetChildObject(f_goCenterEye, "TabletUIResetParent", false).transform;
- this.m_trOvrUiTabletResetPos = UTY.GetChildObject(this.m_trOvrUiTabletResetParent.gameObject, "TabletUIResetPos", false).transform;
- }
- private void OnEnable()
- {
- this.SetVisible(true);
- }
- private void OnDisable()
- {
- this.SetVisible(false);
- }
- public void SetVisible(bool f_bVisible)
- {
- Renderer[] componentsInChildren = base.GetComponentsInChildren<Renderer>(true);
- for (int i = 0; i < componentsInChildren.Length; i++)
- {
- componentsInChildren[i].enabled = f_bVisible;
- }
- Collider[] componentsInChildren2 = base.GetComponentsInChildren<Collider>(true);
- for (int j = 0; j < componentsInChildren2.Length; j++)
- {
- componentsInChildren2[j].enabled = f_bVisible;
- }
- this.m_bVisible = f_bVisible;
- this.AvoidFloorAndChara();
- }
- public bool IsVisible
- {
- get
- {
- return this.m_bVisible;
- }
- }
- public bool IsHitPointerArea(Vector3 f_vWorldPoint)
- {
- if (!this.IsVisible)
- {
- return false;
- }
- Vector3 vector = base.transform.InverseTransformPoint(f_vWorldPoint);
- float num = this.m_vHitArea.x * 0.5f;
- float num2 = this.m_vHitArea.z * 0.5f;
- float num3 = this.m_vHitArea.y * 0.5f;
- if (-num <= vector.x && vector.x <= num && -num2 <= vector.z && vector.z <= num2 && -num3 <= vector.y && vector.y <= num3)
- {
- Debug.DrawLine(f_vWorldPoint, base.transform.TransformPoint(vector.x, 0f, vector.z), Color.green);
- return true;
- }
- Debug.DrawLine(f_vWorldPoint, base.transform.TransformPoint(vector.x, 0f, vector.z), Color.gray);
- return false;
- }
- public void UIPosReset(float f_fOffsetRotY = 0f)
- {
- if (!base.enabled || !base.gameObject.activeInHierarchy)
- {
- return;
- }
- if (GameMain.Instance.VRDeviceTypeID != GameMain.VRDeviceType.NON)
- {
- base.StartCoroutine(this.CoUIPosReset(f_fOffsetRotY));
- }
- }
- private IEnumerator CoUIPosReset(float f_fOffsetRotY = 0f)
- {
- bool bSticky = true;
- float timeBack = Time.realtimeSinceStartup;
- if (bSticky)
- {
- Transform trHead = GameMain.Instance.OvrMgr.OvrCamera.GetRealHeadTransform();
- if (!(trHead == null))
- {
- Vector3 vHeadEuler = trHead.rotation.eulerAngles;
- this.m_trOvrUiTabletResetParent.rotation = Quaternion.Euler(vHeadEuler.x, vHeadEuler.y + f_fOffsetRotY, 0f);
- base.transform.position = this.m_trOvrUiTabletResetPos.position;
- base.transform.rotation = this.m_trOvrUiTabletResetPos.rotation;
- this.AvoidFloorAndChara();
- yield return null;
- }
- }
- this.m_vWorldPos = base.transform.position;
- yield break;
- }
- public void AvoidFloorAndChara()
- {
- if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.NON)
- {
- return;
- }
- bool flag = false;
- float num = 0.15f;
- float num2 = 0.25f * base.transform.localScale.x;
- Ray ray = new Ray(base.transform.position, Vector3.down);
- float num3 = 0f;
- RaycastHit raycastHit;
- if (Physics.Raycast(ray, out raycastHit, float.PositiveInfinity, 512))
- {
- num3 = Vector3.Distance(raycastHit.point, base.transform.position);
- }
- else
- {
- ray.origin = new Vector3(base.transform.position.x, 100f, base.transform.position.z);
- ray.direction = Vector3.down;
- if (Physics.Raycast(ray, out raycastHit, float.PositiveInfinity, 512))
- {
- num3 = Vector3.Distance(raycastHit.point, base.transform.position);
- }
- }
- if (raycastHit.collider != null && num3 < num2 + 0.1f)
- {
- base.transform.position = new Vector3(base.transform.position.x, raycastHit.point.y + num2 + 0.1f, base.transform.position.z);
- flag = true;
- }
- if (GameMain.Instance.OvrMgr != null && GameMain.Instance.OvrMgr.OvrCamera != null)
- {
- Transform realHeadTransform = GameMain.Instance.OvrMgr.OvrCamera.GetRealHeadTransform();
- int maidCount = GameMain.Instance.CharacterMgr.GetMaidCount();
- for (int i = 0; i < maidCount; i++)
- {
- Maid maid = GameMain.Instance.CharacterMgr.GetMaid(i);
- if (maid != null && maid.Visible && maid.body0 != null && maid.body0.isLoadedBody)
- {
- foreach (Transform transform in new Transform[]
- {
- maid.body0.trsHead,
- maid.body0.Spine,
- maid.body0.Spine0a,
- maid.body0.Spine1a,
- maid.body0.UpperArmL,
- maid.body0.UpperArmR
- })
- {
- if (!(transform == null))
- {
- if (Vector3.Distance(base.transform.position, transform.position) < num + num2)
- {
- Vector3 normalized = (realHeadTransform.position - transform.position).normalized;
- Vector3 normalized2 = Vector3.Reflect(-normalized, Vector3.up).normalized;
- Vector3 normalized3 = Vector3.Cross(normalized, normalized2).normalized;
- Vector3 a = base.transform.position - normalized3 * (num + num2 + 0.1f);
- float angle = Vector3.Angle((transform.position - realHeadTransform.position).normalized, (a - realHeadTransform.position).normalized);
- base.transform.RotateAround(realHeadTransform.position, Vector3.up, angle);
- flag = true;
- }
- }
- }
- }
- }
- if (flag)
- {
- base.transform.LookAt(realHeadTransform.position);
- base.transform.Rotate(-90f, 180f, 0f, Space.Self);
- }
- }
- this.m_vWorldPos = base.transform.position;
- }
- private void Update()
- {
- if (!this.IsVisible)
- {
- return;
- }
- if (this.m_bUIStickyHead)
- {
- Transform realHeadTransform = GameMain.Instance.OvrMgr.OvrCamera.GetRealHeadTransform();
- float num = (this.m_vWorldPos - realHeadTransform.position).magnitude;
- Vector3 normalized = (this.m_vWorldPos - realHeadTransform.position).normalized;
- bool flag = false;
- if (num < 0.1f || 0.5f < num)
- {
- if (0.5f < num)
- {
- flag = true;
- }
- num = Mathf.Clamp(num, 0.1f, 0.5f);
- this.m_vWorldPos = realHeadTransform.position + normalized * num;
- }
- Vector3 normalized2 = GameMain.Instance.OvrMgr.OvrCamera.EyeRay.GetRay().direction.normalized;
- float num2 = Vector3.Angle(normalized2, normalized);
- if (num2 > 60f)
- {
- Vector3 normalized3 = Vector3.RotateTowards(normalized, normalized2, 1f - 60f / num2, 0f).normalized;
- this.m_vWorldPos = realHeadTransform.position + normalized3 * num;
- flag = true;
- }
- base.transform.position = this.m_vWorldPos;
- if (flag)
- {
- base.transform.LookAt(GameMain.Instance.OvrMgr.OvrCamera.GetRealHeadTransform().position);
- base.transform.Rotate(new Vector3(-90f, 0f, 0f), Space.Self);
- }
- }
- Vector3 forward = base.transform.forward;
- if (GameMain.Instance.OvrMgr != null && GameMain.Instance.OvrMgr.OvrCamera != null)
- {
- Transform realHeadTransform2 = GameMain.Instance.OvrMgr.OvrCamera.GetRealHeadTransform();
- if (Vector3.Dot((realHeadTransform2.position - base.transform.position).normalized, base.transform.up) < 0f)
- {
- this.m_bSideBack = true;
- }
- else
- {
- this.m_bSideBack = false;
- }
- }
- if (GameMain.Instance.VRDeviceTypeID != GameMain.VRDeviceType.NON)
- {
- if (Vector3.Dot(forward, Vector3.down) < 0f)
- {
- this.m_trScreen.localRotation = Quaternion.Euler(90f, 0f, 0f);
- this.m_bRotDown = false;
- }
- else
- {
- this.m_trScreen.localRotation = Quaternion.Euler(-90f, 0f, 0f);
- this.m_bRotDown = true;
- }
- }
- else
- {
- this.m_trScreen.localRotation = Quaternion.Euler(90f, 0f, 0f);
- this.m_bRotDown = false;
- }
- float vrcameraFov = GameMain.Instance.CMSystem.VRCameraFov;
- if (this.m_fBackFOV != vrcameraFov)
- {
- float num3 = (vrcameraFov - 30f) / 30f;
- float num4 = this.m_fTabletScaleMin + (this.m_fTabletScaleMax - this.m_fTabletScaleMin) * num3;
- this.m_vScaleNow = new Vector3(num4, num4, num4);
- this.m_fBackFOV = vrcameraFov;
- }
- if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.NON)
- {
- float num5 = (float)Screen.width / (float)Screen.height;
- if (num5 < 1.7777f)
- {
- float num6 = this.m_vScaleNow.x * (num5 / 1.7777f);
- base.transform.localScale = new Vector3(num6, num6, num6);
- }
- else
- {
- base.transform.localScale = this.m_vScaleNow;
- }
- }
- bool isVisibleMessageViewer = GameMain.Instance.MsgWnd.IsVisibleMessageViewer;
- if (this.m_bBackVisibleMessageViewer != isVisibleMessageViewer)
- {
- if (GameMain.Instance.CMSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible)
- {
- this.m_trTabletFrame.gameObject.SetActive(!isVisibleMessageViewer);
- this.m_trButton.gameObject.SetActive(!isVisibleMessageViewer);
- }
- else
- {
- this.m_trTabletFrame.gameObject.SetActive(true);
- this.m_trButton.gameObject.SetActive(true);
- }
- this.m_bBackVisibleMessageViewer = isVisibleMessageViewer;
- }
- }
- public Vector3 m_vHitArea = new Vector3(1.3f, 1f, 1f);
- public Transform m_trOvrUiTabletResetParent;
- public Transform m_trOvrUiTabletResetPos;
- private Transform m_trScreen;
- private bool m_bRotDown;
- private bool m_bSideBack;
- private bool m_bVisible = true;
- private bool m_bUIStickyHead;
- private Vector3 m_vWorldPos;
- private Vector3 m_vScaleBackup;
- private Vector3 m_vScaleNow;
- private float m_fDistance = 1f;
- private float m_fBackFOV;
- private float m_fTabletScaleMin = 0.1543127f;
- private float m_fTabletScaleMax = 0.3287759f;
- private bool m_bBackVisibleMessageViewer;
- private Transform m_trButton;
- private Transform m_trTabletFrame;
- }
|