123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Events;
- public class VRChoices : MonoBehaviour
- {
- private void Start()
- {
- this.m_EventText = GameMain.Instance.OvrMgr.OvrCamera.OvrEventText;
- NDebug.Assert(this.m_EventText != null, "EventTextが取得できませんでした。");
- }
- public void Add(string f_strText, string f_strLabel, int f_nMaidNo, VRChoices.SelectPair.Type f_type, string f_strRegionSplitOfColon, float f_fTimeOut)
- {
- ushort num = 0;
- if (!string.IsNullOrEmpty(f_strRegionSplitOfColon))
- {
- VRChoices.<Add>c__AnonStorey0 <Add>c__AnonStorey = new VRChoices.<Add>c__AnonStorey0();
- <Add>c__AnonStorey.strSplit = f_strRegionSplitOfColon.Split(new char[]
- {
- ':'
- });
- int nS;
- for (nS = 0; nS < <Add>c__AnonStorey.strSplit.Length; nS++)
- {
- int num2 = Array.FindIndex<KeyValuePair<string, VRChoices.Region>>(this.m_RegionPair, (KeyValuePair<string, VRChoices.Region> a) => a.Key == <Add>c__AnonStorey.strSplit[nS]);
- if (num2 != -1)
- {
- num |= (ushort)this.m_RegionPair[num2].Value;
- }
- else
- {
- num |= (ushort)this.m_RegionPair[0].Value;
- Debug.LogError("選択肢個所:" + <Add>c__AnonStorey.strSplit[nS] + " はありません。");
- }
- }
- if (f_nMaidNo == -1)
- {
- f_nMaidNo = 0;
- }
- }
- if (GameMain.Instance.OvrMgr.OvrCamera.IsNoHandController && f_type == VRChoices.SelectPair.Type.Touch)
- {
- f_type = VRChoices.SelectPair.Type.TouchToLook;
- }
- this.m_listPair.Add(new VRChoices.SelectPair(f_strText, f_strLabel, f_nMaidNo, f_type, num, f_fTimeOut));
- }
- public void Clear()
- {
- if (this.m_TouchMgr != null)
- {
- this.m_TouchMgr.Clear();
- }
- if (this.m_LookMgr != null)
- {
- this.m_LookMgr.Clear();
- }
- this.m_listPair.Clear();
- this.m_dicMaidLookTouch.Clear();
- this.m_TextSelectPair.Clear();
- this.TouchLookTimeCountDownStop();
- this.m_bTimeOutCounting = false;
- this.m_nBackMaidNo = -1;
- this.m_BackRegion = VRChoices.Region.Non;
- this.m_BackType = VRChoices.SelectPair.Type.Text;
- this.m_PairNow = null;
- GameMain.Instance.OvrMgr.OvrCamera.HideDummyHand(OvrCamera.DUMMY_HAND.CHOICES_TOUCH);
- if (this.m_SelectorText != null)
- {
- this.m_SelectorText.SelectFinalize(null);
- this.m_SelectorText = null;
- }
- }
- public void Show(int f_nTimeOutMS, string f_strTimeOutLabel, int f_nRandom)
- {
- System.Random random = new System.Random((int)(Time.realtimeSinceStartup * 10000f));
- if (f_nRandom != 0)
- {
- int num = this.m_listPair.Count - f_nRandom;
- for (int i = num; i > 0; i--)
- {
- this.m_listPair.RemoveAt(random.Next(0, this.m_listPair.Count - 1));
- }
- }
- this.m_SelectorText = VRSelectorMenu.CreateSelector();
- NDebug.Assert(this.m_SelectorText != null, "VR選択肢が取得できませんでした。");
- bool flag = false;
- bool flag2 = false;
- for (int j = 0; j < this.m_listPair.Count; j++)
- {
- VRChoices.SelectPair selectPair = this.m_listPair[j];
- if (selectPair.type == VRChoices.SelectPair.Type.Look || selectPair.type == VRChoices.SelectPair.Type.Touch || selectPair.type == VRChoices.SelectPair.Type.TouchToLook)
- {
- if (selectPair.nMaidNo == -1)
- {
- NDebug.Assert("VR選択肢、見る触るなのにメイド番号が指定されていません。", false);
- }
- List<VRChoices.SelectPair> list;
- if (!this.m_dicMaidLookTouch.TryGetValue(selectPair.nMaidNo, out list))
- {
- this.m_dicMaidLookTouch.Add(selectPair.nMaidNo, list = new List<VRChoices.SelectPair>());
- }
- list.Add(selectPair);
- if (selectPair.type == VRChoices.SelectPair.Type.Touch)
- {
- flag = true;
- }
- if (selectPair.type == VRChoices.SelectPair.Type.Look || selectPair.type == VRChoices.SelectPair.Type.TouchToLook)
- {
- flag2 = true;
- }
- }
- else
- {
- this.m_TextSelectPair.Add(selectPair);
- }
- }
- if (this.m_dicMaidLookTouch.Count != 0)
- {
- foreach (KeyValuePair<int, List<VRChoices.SelectPair>> keyValuePair in this.m_dicMaidLookTouch)
- {
- int key = keyValuePair.Key;
- Maid maid = GameMain.Instance.CharacterMgr.GetMaid(key);
- if (maid == null || !maid.Visible)
- {
- NDebug.Assert("VR選択肢でメイドが居ないか、有効ではありません。", false);
- }
- else if (maid.IsBusy)
- {
- NDebug.Assert("VR選択肢でメイドがBusyです。", false);
- }
- MaidColliderCollect.AddCollider(maid, MaidColliderCollect.ColliderType.Touch);
- }
- if (flag)
- {
- if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.NON)
- {
- SelectMessage_UI.Message_Start(string.Empty);
- GameMain.Instance.OvrMgr.OvrCamera.ShowUI(false);
- }
- else
- {
- this.m_SelectorText.SetSelectType(VRChoices.SelectPair.Type.Touch);
- this.m_SelectorText.SelectStart(new List<VRChoices.SelectPair>(), new UnityAction<VRChoices.SelectPair>(this.OnLookTouchDummySelected));
- }
- this.m_TouchMgr = new VRTouchMgr();
- }
- if (flag2)
- {
- if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.NON)
- {
- SelectMessage_UI.Message_Start(string.Empty);
- GameMain.Instance.OvrMgr.OvrCamera.ShowUI(false);
- }
- else
- {
- this.m_SelectorText.SetSelectType(VRChoices.SelectPair.Type.Look);
- this.m_SelectorText.SelectStart(new List<VRChoices.SelectPair>(), new UnityAction<VRChoices.SelectPair>(this.OnLookTouchDummySelected));
- }
- this.m_LookMgr = new VRLookMgr();
- }
- }
- if (this.m_TextSelectPair.Count != 0)
- {
- this.m_SelectorText.SetSelectType(VRChoices.SelectPair.Type.Text);
- this.m_SelectorText.SelectStart(this.m_TextSelectPair, new UnityAction<VRChoices.SelectPair>(this.OnTextSelected));
- }
- if (f_nTimeOutMS != 0 && !string.IsNullOrEmpty(f_strTimeOutLabel))
- {
- this.TimeOutCountDownStart(f_nTimeOutMS, f_strTimeOutLabel);
- }
- this.m_bFinalizing = false;
- }
- private void OnTextSelected(VRChoices.SelectPair f_SelectedPair)
- {
- this.Finalize(f_SelectedPair.strLabel);
- }
- private void OnLookTouchDummySelected(VRChoices.SelectPair f_SelectedPair)
- {
- }
- public void Finalize(string f_strJumpLabel)
- {
- this.m_strSelectedLabel = f_strJumpLabel;
- this.m_bFinalizing = true;
- foreach (KeyValuePair<int, List<VRChoices.SelectPair>> keyValuePair in this.m_dicMaidLookTouch)
- {
- int key = keyValuePair.Key;
- Maid maid = GameMain.Instance.CharacterMgr.GetMaid(key);
- if (maid != null)
- {
- MaidColliderCollect.RemoveColliderAll(maid);
- }
- }
- this.Clear();
- this.OnFadeEnd();
- }
- private void OnFadeEnd()
- {
- if (!string.IsNullOrEmpty(this.m_strSelectedLabel))
- {
- GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_strSelectedLabel);
- GameMain.Instance.ScriptMgr.adv_kag.Exec();
- }
- }
- private VRChoices.SelectPair GetLookTouchPos(out int f_nMaidNo, out VRChoices.Region f_region, out VRChoices.SelectPair.Type f_type)
- {
- f_nMaidNo = -1;
- f_region = VRChoices.Region.Non;
- f_type = VRChoices.SelectPair.Type.Text;
- if (this.m_TouchMgr != null)
- {
- this.m_TouchMgr.FrameStart();
- }
- if (this.m_LookMgr != null)
- {
- this.m_LookMgr.FrameStart();
- }
- foreach (KeyValuePair<int, List<VRChoices.SelectPair>> keyValuePair in this.m_dicMaidLookTouch)
- {
- int key = keyValuePair.Key;
- for (int i = 0; i < keyValuePair.Value.Count; i++)
- {
- VRChoices.SelectPair pair = keyValuePair.Value[i];
- if (pair.type == VRChoices.SelectPair.Type.Touch)
- {
- List<KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>> list = this.m_TouchPosPair.FindAll((KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region> a) => ((ushort)a.Value & pair.uRegion) != 0);
- for (int j = 0; j < list.Count; j++)
- {
- KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region> keyValuePair2 = list[j];
- if (!keyValuePair2.Equals(default(KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>)))
- {
- VRTouchMgr.ETouchPos key2 = keyValuePair2.Key;
- for (int k = 0; k <= 1; k++)
- {
- if (this.m_TouchMgr.GetBehaviorTouch((VRTouchMgr.EHand)k, key2, VRTouchMgr.ETouchBehavior.触る, key))
- {
- f_nMaidNo = key;
- f_region = keyValuePair2.Value;
- f_type = VRChoices.SelectPair.Type.Touch;
- this.m_TouchMgr.FrameEnd();
- return pair;
- }
- }
- }
- else
- {
- NDebug.Assert("Region指定が不正です。", false);
- }
- }
- }
- else if (pair.type == VRChoices.SelectPair.Type.Look || pair.type == VRChoices.SelectPair.Type.TouchToLook)
- {
- List<KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>> list2 = this.m_TouchPosPair.FindAll((KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region> a) => ((ushort)a.Value & pair.uRegion) != 0);
- for (int l = 0; l < list2.Count; l++)
- {
- KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region> keyValuePair3 = list2[l];
- if (!keyValuePair3.Equals(default(KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>)))
- {
- VRTouchMgr.ETouchPos key3 = keyValuePair3.Key;
- VRLookMgr.State state;
- if (this.m_LookMgr.GetBehaviorTouch(key3, VRLookMgr.ELookBehavior.見る, key, out state))
- {
- f_nMaidNo = key;
- f_region = keyValuePair3.Value;
- f_type = VRChoices.SelectPair.Type.Look;
- if (pair.type == VRChoices.SelectPair.Type.TouchToLook)
- {
- f_type = VRChoices.SelectPair.Type.TouchToLook;
- GameMain.Instance.OvrMgr.OvrCamera.ShowDummyHand(OvrCamera.DUMMY_HAND.CHOICES_TOUCH, state.vHitPos, false);
- }
- this.m_LookMgr.FrameEnd();
- return pair;
- }
- }
- else
- {
- NDebug.Assert("Region指定が不正です。", false);
- }
- }
- GameMain.Instance.OvrMgr.OvrCamera.HideDummyHand(OvrCamera.DUMMY_HAND.CHOICES_TOUCH);
- }
- }
- }
- if (this.m_TouchMgr != null)
- {
- this.m_TouchMgr.FrameEnd();
- }
- if (this.m_LookMgr != null)
- {
- this.m_LookMgr.FrameEnd();
- }
- return null;
- }
- private void TouchLookTimeCountDownStart(string f_strText, float f_fTimeOut)
- {
- if (f_fTimeOut < 0f)
- {
- this.m_fTouchLookNowTime = (this.m_fTouchLookMaxTime = this.m_fTouchLookDefaultMaxTime);
- }
- else
- {
- this.m_fTouchLookMaxTime = f_fTimeOut;
- this.m_fTouchLookNowTime = f_fTimeOut;
- }
- this.m_EventText.SetGaugeRate(0f);
- this.m_EventText.Show(VREventText.TYPE.CHOICES, f_strText, 0f);
- }
- private bool TouchLookTimeCountDown()
- {
- if (!this.m_bFinalizing)
- {
- this.m_fTouchLookNowTime -= Time.deltaTime;
- if (this.m_fTouchLookNowTime <= 0f)
- {
- this.m_fTouchLookNowTime = 0f;
- this.TouchLookTimeOut();
- this.m_EventText.SetGaugeRate(1f);
- return true;
- }
- this.m_EventText.SetGaugeRate(1f - this.m_fTouchLookNowTime / this.m_fTouchLookMaxTime);
- }
- return false;
- }
- private void TouchLookTimeCountDownStop()
- {
- this.m_EventText.Hide(VREventText.TYPE.CHOICES);
- }
- private void TouchLookTimeOut()
- {
- Debug.Log("VRChoices:TouchLookTimeOut");
- this.TouchLookTimeCountDownStop();
- this.Finalize(this.m_PairNow.strLabel);
- }
- private void TimeOutCountDownStart(int f_nTimeOutMS, string f_strTimeOutLabel)
- {
- this.m_strTimeOutLabel = f_strTimeOutLabel;
- this.m_fTimeOutMaxTime = (float)f_nTimeOutMS / 1000f;
- this.m_fTimeOutNowTime = this.m_fTimeOutMaxTime;
- this.m_bTimeOutCounting = true;
- }
- private bool TimeOutCountDown()
- {
- if (!this.m_bFinalizing && this.m_bTimeOutCounting)
- {
- this.m_fTimeOutNowTime -= Time.deltaTime;
- if (this.m_fTimeOutNowTime <= 0f)
- {
- Debug.Log("VRChoices:AllTimeOut");
- this.Finalize(this.m_strTimeOutLabel);
- return true;
- }
- }
- return false;
- }
- private void Update()
- {
- GameMain.Instance.OvrMgr.OvrCamera.HideDummyHand(OvrCamera.DUMMY_HAND.CHOICES_TOUCH);
- if (!this.m_bFinalizing)
- {
- if (this.m_bTimeOutCounting && this.TimeOutCountDown())
- {
- return;
- }
- int num = -1;
- VRChoices.Region region = VRChoices.Region.Non;
- VRChoices.SelectPair.Type type = VRChoices.SelectPair.Type.Text;
- this.m_PairNow = this.GetLookTouchPos(out num, out region, out type);
- if (this.m_PairNow != null)
- {
- if ((this.m_nBackMaidNo == -1 && num != -1) || this.m_nBackMaidNo != num || this.m_BackType != type || this.m_BackRegion != region)
- {
- this.TouchLookTimeCountDownStop();
- if (this.m_PairNow == null)
- {
- NDebug.Assert("VR選択肢の登録が不正です。", false);
- }
- this.TouchLookTimeCountDownStart(this.m_PairNow.strText, this.m_PairNow.fTimeOut);
- }
- else if (this.m_nBackMaidNo == num)
- {
- if (this.m_BackType == type && this.m_BackRegion == region)
- {
- if (this.TouchLookTimeCountDown())
- {
- return;
- }
- }
- else
- {
- NDebug.Assert("VR選択肢が不正です。", false);
- }
- }
- else if (this.m_nBackMaidNo != -1 && num == -1)
- {
- this.m_PairNow = null;
- this.TouchLookTimeCountDownStop();
- }
- }
- else
- {
- this.TouchLookTimeCountDownStop();
- }
- this.m_nBackMaidNo = num;
- this.m_BackRegion = region;
- this.m_BackType = type;
- }
- }
- private readonly KeyValuePair<string, VRChoices.Region>[] m_RegionPair = new KeyValuePair<string, VRChoices.Region>[]
- {
- new KeyValuePair<string, VRChoices.Region>("頭", VRChoices.Region.Head),
- new KeyValuePair<string, VRChoices.Region>("胸", VRChoices.Region.Bust),
- new KeyValuePair<string, VRChoices.Region>("尻", VRChoices.Region.Hip),
- new KeyValuePair<string, VRChoices.Region>("手", VRChoices.Region.Hand)
- };
- private readonly List<KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>> m_TouchPosPair = new List<KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>>
- {
- new KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>(VRTouchMgr.ETouchPos.頭頂部, VRChoices.Region.Head),
- new KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>(VRTouchMgr.ETouchPos.胸, VRChoices.Region.Bust),
- new KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>(VRTouchMgr.ETouchPos.お尻, VRChoices.Region.Hip),
- new KeyValuePair<VRTouchMgr.ETouchPos, VRChoices.Region>(VRTouchMgr.ETouchPos.手, VRChoices.Region.Hand)
- };
- private List<VRChoices.SelectPair> m_listPair = new List<VRChoices.SelectPair>();
- private Dictionary<int, List<VRChoices.SelectPair>> m_dicMaidLookTouch = new Dictionary<int, List<VRChoices.SelectPair>>();
- private List<VRChoices.SelectPair> m_TextSelectPair = new List<VRChoices.SelectPair>();
- private VRTouchMgr m_TouchMgr;
- private VRLookMgr m_LookMgr;
- private float m_fTouchLookDefaultMaxTime = 2f;
- private float m_fTouchLookMaxTime = 2f;
- private float m_fTouchLookNowTime;
- private VREventText m_EventText;
- private bool m_bFinalizing = true;
- private bool m_bTimeOutCounting;
- private float m_fTimeOutMaxTime;
- private float m_fTimeOutNowTime;
- private string m_strTimeOutLabel;
- private VRSelectorMenu m_SelectorText;
- private string m_strSelectedLabel;
- private int m_nBackMaidNo = -1;
- private VRChoices.Region m_BackRegion;
- private VRChoices.SelectPair.Type m_BackType;
- private VRChoices.SelectPair m_PairNow;
- public enum Region
- {
- Non,
- Head,
- Bust,
- Hip = 4,
- Hand = 8
- }
- public class SelectPair
- {
- public SelectPair(string f_strText, string f_strLabel, int f_nMaidNo, VRChoices.SelectPair.Type f_type, ushort f_sRegionFlag, float f_fTimeOut = -1f)
- {
- this.strText = f_strText;
- this.strLabel = f_strLabel;
- this.nMaidNo = f_nMaidNo;
- this.type = f_type;
- this.uRegion = f_sRegionFlag;
- this.fTimeOut = f_fTimeOut;
- }
- public string strText;
- public string strLabel;
- public VRChoices.SelectPair.Type type;
- public ushort uRegion;
- public int nMaidNo;
- public float fTimeOut;
- public enum Type
- {
- Text,
- Touch,
- Look,
- TouchToLook
- }
- }
- }
|