DanceMain.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text.RegularExpressions;
  7. using UnityEngine;
  8. using UnityEngine.Rendering;
  9. using UnityEngine.SceneManagement;
  10. public class DanceMain : MonoBehaviour
  11. {
  12. public static string RecetJumpLabel { private get; set; }
  13. public List<Maid> DanceMaid
  14. {
  15. get
  16. {
  17. return this.m_listMaid;
  18. }
  19. }
  20. public Maid UserMaid
  21. {
  22. get
  23. {
  24. return this.m_maidUser;
  25. }
  26. }
  27. public bool IsDanceEnd { get; private set; }
  28. public Transform OvrCamTrans
  29. {
  30. get
  31. {
  32. return this.m_trOvrDummyCam;
  33. }
  34. }
  35. public float DepthFocalSize
  36. {
  37. get
  38. {
  39. return this.m_DepthFocalSize;
  40. }
  41. set
  42. {
  43. this.m_DepthFocalSize = value;
  44. if (RhythmAction_Mgr.Instance)
  45. {
  46. RhythmAction_Mgr.Instance.SetFocalSize(value);
  47. }
  48. }
  49. }
  50. public string GetFolderPathToBinaryData()
  51. {
  52. string binaryFolderName = this.BinaryFolderName;
  53. string text = Path.GetFileNameWithoutExtension(this.BinaryFolderName).ToLower();
  54. return "Assets/Resources/SceneDance/" + Path.GetFileNameWithoutExtension(this.BinaryFolderName).ToLower() + "/";
  55. }
  56. private void Awake()
  57. {
  58. this.m_boDebugDummyBody = false;
  59. NTime.Reset();
  60. string name = SceneManager.GetActiveScene().name;
  61. if (name.ToLower().Contains("_release") && !this.UseBinaryData)
  62. {
  63. Debug.LogError("ダンスシーン:" + name + " でUseBinaryDataがONになっていません。強制でONにします。");
  64. this.UseBinaryData = true;
  65. }
  66. Dictionary<string, string> tag_backup = GameMain.Instance.ScriptMgr.adv_kag.tag_backup;
  67. string strScriptLabel;
  68. if (tag_backup != null && tag_backup.TryGetValue("label", out strScriptLabel))
  69. {
  70. this.m_strScriptLabel = strScriptLabel;
  71. }
  72. NDebug.Assert(this.m_listDummyAnimChara.Count == this.m_listAnimName.Count, "m_listDummyAnimChara と m_listAnimName の数は同一でないといけません。");
  73. NDebug.Assert(this.m_AnimatorData != null, "AnimatorDataが外れています。");
  74. NDebug.Assert(this.m_listTestPreset.Count == this.m_listAnimName.Count, "プリセット数が不正です。");
  75. NDebug.Assert(!string.IsNullOrEmpty(this.m_strMasterAudioFileName), "マスター用MasterAudioFileNameが必要です。");
  76. bool flag = DanceMain.IsDanceRecet;
  77. flag |= (RhythmAction_Mgr.NowState == RhythmAction_Mgr.DanceState.Dance_Second);
  78. flag |= (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.Encore);
  79. flag |= RhythmAction_Mgr.IsVSDance;
  80. if (flag && !DanceMain.KaraokeMode)
  81. {
  82. DanceSelect.SelectMaidActive(DanceMain.SelectDanceData);
  83. DanceMain.IsDanceRecet = false;
  84. }
  85. if (this.time_line_binary_ == null)
  86. {
  87. this.maid_data_binary_ = new DanceObjectDataBinary();
  88. this.maid_item_binary_ = new DanceObjectDataBinary();
  89. this.maid_event_binary_ = new DanceObjectDataBinary();
  90. this.time_line_binary_ = new AWReadBinaryData();
  91. if (this.UseBinaryData)
  92. {
  93. string file_name = this.GetFolderPathToBinaryData() + "item_data.bytes";
  94. this.maid_item_binary_.ReadData(file_name);
  95. NDebug.Assert(this.m_listItemObject.Count == this.maid_item_binary_.datas.Length, "アイテム数がバイナリデータと不一致");
  96. this.maid_item_binary_.Restoration(false);
  97. for (int i = 0; i < this.m_listItemObject.Count; i++)
  98. {
  99. if (!(this.m_listItemObject[i] != null))
  100. {
  101. this.m_listItemObject[i] = this.maid_item_binary_.datas[i].obj;
  102. }
  103. }
  104. file_name = this.GetFolderPathToBinaryData() + "event_data.bytes";
  105. this.maid_event_binary_.ReadData(file_name);
  106. NDebug.Assert(this.m_listEventObject.Count == this.maid_event_binary_.datas.Length, "イベント数がバイナリデータと不一致");
  107. this.maid_event_binary_.Restoration(false);
  108. for (int j = 0; j < this.m_listEventObject.Count; j++)
  109. {
  110. if (!(this.m_listEventObject[j] != null))
  111. {
  112. this.m_listEventObject[j] = this.maid_event_binary_.datas[j].obj;
  113. }
  114. }
  115. file_name = this.GetFolderPathToBinaryData() + "maid_data.bytes";
  116. this.maid_data_binary_.ReadData(file_name);
  117. NDebug.Assert(this.m_listDummyAnimChara.Count == this.maid_data_binary_.datas.Length, "メイド数がバイナリデータと不一致");
  118. this.maid_data_binary_.Restoration(true);
  119. for (int k = 0; k < this.m_listDummyAnimChara.Count; k++)
  120. {
  121. if (!(this.m_listDummyAnimChara[k] != null))
  122. {
  123. this.m_listDummyAnimChara[k] = this.maid_data_binary_.datas[k].obj;
  124. this.m_listDebugObj.Add(this.m_listDummyAnimChara[k]);
  125. }
  126. }
  127. file_name = this.GetFolderPathToBinaryData() + "timeline_data.bytes";
  128. this.time_line_binary_.ReadFile(file_name);
  129. this.maid_item_binary_.AttachObject(this.m_AnimatorData.getTake(this.m_strPlayTakeName));
  130. this.maid_event_binary_.AttachObject(this.m_AnimatorData.getTake(this.m_strPlayTakeName));
  131. }
  132. }
  133. foreach (string str in this.m_listKuchiPakuFile)
  134. {
  135. TextAsset textAsset = Resources.Load("SceneDance/" + str) as TextAsset;
  136. NDebug.Assert(textAsset != null, "口パクパターンテキストファイルが開けません。" + str);
  137. string text = textAsset.text;
  138. NDebug.Assert(text.Length != 0, "口パクパターンファイル内が空です。" + str);
  139. text = Regex.Replace(text, "(\\r|\\n| )", string.Empty);
  140. this.m_listKuchiPattern.Add(text);
  141. }
  142. this.m_AnimatorData.playOnStart = null;
  143. this.m_AnimatorData.bAutoTimeUpdate = false;
  144. if (GameMain.Instance.VRMode && GameMain.Instance.CMSystem.GetTmpGenericFlag("ダンスOVRカメラタイプ") == 1)
  145. {
  146. this.m_trOvrDummyCam = new GameObject("OvrDummyDanceCam").transform;
  147. this.m_trOvrDummyCam.gameObject.AddComponent<Camera>().enabled = false;
  148. this.m_OvrCam = GameMain.Instance.OvrMgr.OvrCamera;
  149. }
  150. GameObject gameObject = GameObject.Find("RhythmAction_Mgr");
  151. if (!gameObject)
  152. {
  153. gameObject = UnityEngine.Object.Instantiate<GameObject>(Resources.Load<GameObject>("SceneDance/Rhythm_Action/Prefab/RhythmAction_Mgr"));
  154. }
  155. if (!RhythmAction_Mgr.Instance)
  156. {
  157. gameObject.GetComponent<RhythmAction_Mgr>().InstanceInit();
  158. }
  159. for (int l = 0; l < this.m_listTestPreset.Count; l++)
  160. {
  161. Maid maid = GameMain.Instance.CharacterMgr.GetMaid(l);
  162. if (maid)
  163. {
  164. if (!this.m_maidUser)
  165. {
  166. this.m_maidUser = DanceSelect.SelectTopMaid;
  167. }
  168. maid.Visible = true;
  169. }
  170. }
  171. if (!this.m_maidUser)
  172. {
  173. this.m_maidUser = GameMain.Instance.CharacterMgr.GetMaid(0);
  174. }
  175. if (DanceMain.KaraokeMode)
  176. {
  177. return;
  178. }
  179. GameMain.Instance.CharacterMgr.ResetCharaPosAll();
  180. if (DanceMain.SelectDanceData != null)
  181. {
  182. for (int m = 0; m < DanceMain.SelectDanceData.select_chara_num; m++)
  183. {
  184. RhythmAction_Mgr.Instance.FactOrderList.Add(GameMain.Instance.CharacterMgr.GetMaid(m));
  185. }
  186. }
  187. if (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.BenchMark && DanceMain.SelectDanceData != null && DanceMain.SelectDanceData.maid_order.Count > 0)
  188. {
  189. List<Maid> list = new List<Maid>();
  190. for (int n = 0; n < DanceMain.SelectDanceData.maid_order.Count; n++)
  191. {
  192. list.Add(GameMain.Instance.CharacterMgr.GetMaid(n));
  193. }
  194. GameMain.Instance.CharacterMgr.DeactivateCharaAll();
  195. GameMain.Instance.CharacterMgr.DeactivateMaid(0);
  196. for (int num = 0; num < DanceMain.SelectDanceData.maid_order.Count; num++)
  197. {
  198. int index = DanceMain.SelectDanceData.maid_order[num];
  199. if (list[index])
  200. {
  201. GameMain.Instance.CharacterMgr.SetActiveMaid(list[index], num);
  202. list[index].Visible = true;
  203. }
  204. }
  205. }
  206. if (RhythmAction_Mgr.Instance.FactOrderList.Any((Maid e) => !e) || DanceMain.SelectDanceData == null)
  207. {
  208. for (int num2 = 0; num2 < this.m_listTestPreset.Count; num2++)
  209. {
  210. Maid maid2 = GameMain.Instance.CharacterMgr.GetMaid(num2);
  211. if (!maid2)
  212. {
  213. maid2 = GameMain.Instance.CharacterMgr.AddStockMaid();
  214. GameMain.Instance.CharacterMgr.SetActiveMaid(maid2, num2);
  215. CharacterMgr.Preset preset;
  216. if (DanceMain.SelectDanceData != null && !string.IsNullOrEmpty(DanceMain.SelectDanceData.preset_name[num2]))
  217. {
  218. preset = GameMain.Instance.CharacterMgr.PresetLoadFromResources(DanceMain.SelectDanceData.preset_name[num2]);
  219. }
  220. else
  221. {
  222. preset = GameMain.Instance.CharacterMgr.PresetLoadFromResources(this.m_listTestPreset[num2]);
  223. }
  224. if (preset != null)
  225. {
  226. GameMain.Instance.CharacterMgr.PresetSet(maid2, preset);
  227. }
  228. this.m_listTempMaid.Add(maid2);
  229. maid2.Visible = true;
  230. }
  231. }
  232. if (DanceMain.SelectDanceData != null)
  233. {
  234. for (int num3 = 0; num3 < DanceMain.SelectDanceData.maid_order.Count; num3++)
  235. {
  236. int index2 = DanceMain.SelectDanceData.maid_order[num3];
  237. if (!RhythmAction_Mgr.Instance.FactOrderList[index2])
  238. {
  239. RhythmAction_Mgr.Instance.FactOrderList[index2] = GameMain.Instance.CharacterMgr.GetMaid(num3);
  240. }
  241. }
  242. }
  243. }
  244. }
  245. private void Start()
  246. {
  247. if (GameMain.Instance.VRMode)
  248. {
  249. GameObject gameObject = GameObject.Find("effect");
  250. if (gameObject != null)
  251. {
  252. ParticleSystem[] componentsInChildren = gameObject.GetComponentsInChildren<ParticleSystem>(true);
  253. foreach (ParticleSystem particleSystem in componentsInChildren)
  254. {
  255. Renderer component = particleSystem.GetComponent<Renderer>();
  256. if (component != null)
  257. {
  258. component.shadowCastingMode = ShadowCastingMode.Off;
  259. component.receiveShadows = false;
  260. }
  261. }
  262. }
  263. }
  264. if (!DanceMain.KaraokeMode)
  265. {
  266. GameMain.Instance.BgMgr.DeleteBg();
  267. }
  268. GameMain.Instance.MainLight.Reset();
  269. GameMain.Instance.SoundMgr.StopBGM(0f);
  270. GameMain.Instance.MainCamera.gameObject.SetActive(true);
  271. if (!DanceMain.KaraokeMode)
  272. {
  273. GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, false);
  274. }
  275. for (int j = 0; j < this.m_listEventObject.Count; j++)
  276. {
  277. GameObject gameObject2 = this.m_listEventObject[j];
  278. NDebug.Assert(!this.m_htEventObj.ContainsKey(gameObject2.name), "listEventObjectに複数同じObjectを追加しようとしました。" + this.m_listEventObject[j].name);
  279. this.m_htEventObj.Add(gameObject2.name, gameObject2);
  280. }
  281. this.m_takeNow = this.m_AnimatorData.getTake(this.m_strPlayTakeName);
  282. NDebug.Assert(this.m_takeNow != null, "再生するテイク名PlayTakeNameが不正です。" + this.m_strPlayTakeName);
  283. }
  284. public void SetFace(int f_nMaidNo, string f_strFace)
  285. {
  286. RhythmAction_Mgr.Instance.SetTimeLineFace(f_nMaidNo, f_strFace);
  287. Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
  288. if (RhythmAction_Mgr.Instance.GetMaidFaceStop(f_nMaidNo))
  289. {
  290. return;
  291. }
  292. maid.FaceAnime(f_strFace, 1f, 0);
  293. }
  294. public void SetFaceBlend(int f_nMaidNo, string f_strFace)
  295. {
  296. RhythmAction_Mgr.Instance.SetTimeLineFaceBlend(f_nMaidNo, f_strFace);
  297. Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
  298. if (RhythmAction_Mgr.Instance.GetMaidFaceBlendStop(f_nMaidNo))
  299. {
  300. return;
  301. }
  302. maid.FaceBlend(f_strFace);
  303. }
  304. public void SetMaidVisible(int f_nMaidNo, bool visible)
  305. {
  306. Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
  307. maid.transform.localScale = ((!visible) ? Vector3.zero : Vector3.one);
  308. }
  309. public void SwitchObject(string f_strObjName, bool bEnable)
  310. {
  311. (this.m_htEventObj[f_strObjName] as GameObject).SetActive(bEnable);
  312. }
  313. public void EyeToCam(int f_nMaidNo, string f_strType)
  314. {
  315. Maid maid = GameMain.Instance.CharacterMgr.GetMaid(f_nMaidNo);
  316. try
  317. {
  318. maid.EyeToCamera((Maid.EyeMoveType)Enum.Parse(typeof(Maid.EyeMoveType), f_strType), 0f);
  319. }
  320. catch (Exception ex)
  321. {
  322. NDebug.Assert("EyeToCam 目線タイプ " + f_strType + " は不正です。\n" + ex.Message, false);
  323. }
  324. }
  325. public void FadeOut(float f_fTime)
  326. {
  327. GameMain.Instance.MainCamera.FadeOut(f_fTime, false, null, false, default(Color));
  328. }
  329. public void FadeIn(float f_fTime)
  330. {
  331. GameMain.Instance.MainCamera.FadeIn(f_fTime, false, null, false, true, default(Color));
  332. }
  333. private void ChangeObj(AMTake f_take, string f_strOldObjName, GameObject f_goNew)
  334. {
  335. AMTranslationTrack[] array = f_take.findTranslationTrack(f_strOldObjName);
  336. for (int i = 0; i < array.Length; i++)
  337. {
  338. array[i].changeObject(f_goNew.transform);
  339. }
  340. AMRotationTrack[] array2 = f_take.findRotationTrack(f_strOldObjName);
  341. for (int j = 0; j < array2.Length; j++)
  342. {
  343. array2[j].changeObject(f_goNew.transform);
  344. }
  345. AMPropertyTrack[] array3 = f_take.findPropertyTrack(f_strOldObjName);
  346. for (int k = 0; k < array3.Length; k++)
  347. {
  348. array3[k].changeObject(f_goNew);
  349. }
  350. }
  351. public void OnDestroy()
  352. {
  353. this.Uninit();
  354. Debug.Log("DanceMain::OnDestroy");
  355. }
  356. private void Uninit()
  357. {
  358. if (this.m_bFinished)
  359. {
  360. return;
  361. }
  362. if (RhythmAction_Mgr.Instance && DanceMain.KaraokeMode)
  363. {
  364. RhythmAction_Mgr.Instance.KaraokeEnd();
  365. }
  366. Debug.Log("DanceMain::Uninit");
  367. this.m_AnimatorData.StopLoop();
  368. if (GameMain.Instance.MainLight != null)
  369. {
  370. GameMain.Instance.MainLight.Reset();
  371. }
  372. if (GameMain.Instance.MainCamera != null)
  373. {
  374. GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
  375. GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
  376. }
  377. if (GameMain.Instance.SoundMgr != null)
  378. {
  379. GameMain.Instance.SoundMgr.StopBGM(0f);
  380. }
  381. if (GameMain.Instance.CharacterMgr != null)
  382. {
  383. GameMain.Instance.CharacterMgr.ResetCharaPosAll();
  384. }
  385. for (int i = 0; i < this.m_listMaid.Count; i++)
  386. {
  387. if (this.m_listMaid[i] != null)
  388. {
  389. this.m_listMaid[i].transform.localScale = Vector3.one;
  390. this.m_listMaid[i].StopKuchipakuPattern();
  391. this.m_listMaid[i].EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
  392. this.m_listMaid[i].AllIKDetach(0f);
  393. this.m_listMaid[i].SetAutoTwist(Maid.AutoTwist.WristL, true);
  394. this.m_listMaid[i].SetAutoTwist(Maid.AutoTwist.WristR, true);
  395. }
  396. }
  397. for (int j = 0; j < this.m_listItemObject.Count; j++)
  398. {
  399. if (this.m_listItemObject[j] != null)
  400. {
  401. UnityEngine.Object.DestroyImmediate(this.m_listItemObject[j]);
  402. }
  403. }
  404. this.m_listItemObject.Clear();
  405. for (int k = 0; k < this.m_listTempMaid.Count; k++)
  406. {
  407. GameMain.Instance.CharacterMgr.BanishmentMaid(this.m_listTempMaid[k]);
  408. }
  409. if (!DanceMain.KaraokeMode)
  410. {
  411. if (this.DanceMaid.Any((Maid maid) => maid != null))
  412. {
  413. GameMain.Instance.CharacterMgr.DeactivateCharaAll();
  414. }
  415. if (this.m_maidUser != null && this.m_maidUser != GameMain.Instance.CharacterMgr.GetMaid(0))
  416. {
  417. GameMain.Instance.CharacterMgr.DeactivateMaid(0);
  418. GameMain.Instance.CharacterMgr.SetActiveMaid(this.m_maidUser, 0);
  419. }
  420. }
  421. this.m_eMode = DanceMain.Mode.Finish;
  422. this.m_bFinished = true;
  423. }
  424. private void ToFinish()
  425. {
  426. this.IsDanceEnd = !this.IsForceDanceEnd;
  427. RhythmAction_Mgr.Instance.RhythmGame_End();
  428. this.Uninit();
  429. if (!DanceMain.IsDanceRecet)
  430. {
  431. DanceSelect.SetNextDance();
  432. }
  433. else
  434. {
  435. NDebug.Assert(!string.IsNullOrEmpty(DanceMain.RecetJumpLabel), "やりなおし時に飛ぶラベルが設定されてません");
  436. }
  437. Debug.Log("Dance ToFinish Script");
  438. if (!string.IsNullOrEmpty(this.m_strScriptLabel))
  439. {
  440. if (DanceMain.IsDanceRecet)
  441. {
  442. Debug.Log("OnEndScene JumpTo " + DanceMain.RecetJumpLabel);
  443. GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(DanceMain.RecetJumpLabel);
  444. }
  445. else
  446. {
  447. if (DanceMain.SelectDanceData != null)
  448. {
  449. GameMain.Instance.ScriptMgr.EvalScript("tf['dance_scene_name'] = '" + DanceMain.SelectDanceData.scene_name + "';");
  450. }
  451. Debug.Log("OnEndScene JumpTo " + this.m_strScriptLabel);
  452. GameMain.Instance.ScriptMgr.adv_kag.JumpLabel(this.m_strScriptLabel);
  453. }
  454. GameMain.Instance.ScriptMgr.adv_kag.Exec();
  455. }
  456. Debug.Log("Dance Finish!!");
  457. }
  458. private IEnumerator LoadMotionScript()
  459. {
  460. if (this.m_AdjustScript.IndexOf(".ks") < 0)
  461. {
  462. this.m_AdjustScript += ".ks";
  463. }
  464. NDebug.Assert(!string.IsNullOrEmpty(this.m_ScriptLabel), string.Format("{0}の飛び先が未指定です。", this.m_AdjustScript));
  465. if (this.m_ScriptLabel.IndexOf("*") < 0)
  466. {
  467. this.m_ScriptLabel = "*" + this.m_ScriptLabel;
  468. }
  469. ScriptManager script_mgr = GameMain.Instance.ScriptMgr;
  470. script_mgr.StopMotionScript();
  471. script_mgr.is_motion_blend = true;
  472. script_mgr.LoadMotionScript(0, false, this.m_AdjustScript, this.m_ScriptLabel, string.Empty, string.Empty, false, true, false);
  473. float timer = 0f;
  474. while (timer <= this.m_LoadScriptTime)
  475. {
  476. timer += Time.deltaTime;
  477. yield return null;
  478. }
  479. script_mgr.StopMotionScript();
  480. this.m_eMode = DanceMain.Mode.LoadAnim;
  481. yield break;
  482. }
  483. private void Update()
  484. {
  485. if (this.m_eMode == DanceMain.Mode.ActiveCam)
  486. {
  487. if (GameMain.Instance.MainCamera.gameObject.activeSelf)
  488. {
  489. GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
  490. GameMain.Instance.MainCamera.SetCameraType(CameraMain.CameraType.Free);
  491. GameMain.Instance.MainCamera.SetControl(false);
  492. if (this.m_camDummyCamera != null)
  493. {
  494. if (!GameMain.Instance.VRMode)
  495. {
  496. AMTranslationTrack amtranslationTrack = this.m_takeNow.findTranslationTrack(this.m_camDummyCamera.gameObject.transform);
  497. amtranslationTrack.obj = GameMain.Instance.MainCamera.gameObject.transform;
  498. foreach (AMAction amaction in amtranslationTrack.cache)
  499. {
  500. AMTranslationAction amtranslationAction = (AMTranslationAction)amaction;
  501. amtranslationAction.obj = GameMain.Instance.MainCamera.gameObject.transform;
  502. }
  503. AMRotationTrack amrotationTrack = this.m_takeNow.findRotationTrack(this.m_camDummyCamera.gameObject.transform);
  504. amrotationTrack.obj = GameMain.Instance.MainCamera.gameObject.transform;
  505. foreach (AMAction amaction2 in amrotationTrack.cache)
  506. {
  507. AMRotationAction amrotationAction = (AMRotationAction)amaction2;
  508. amrotationAction.obj = GameMain.Instance.MainCamera.gameObject.transform;
  509. }
  510. }
  511. else if (GameMain.Instance.CMSystem.GetTmpGenericFlag("ダンスOVRカメラタイプ") != 0)
  512. {
  513. AMTranslationTrack amtranslationTrack2 = this.m_takeNow.findTranslationTrack(this.m_camDummyCamera.gameObject.transform);
  514. amtranslationTrack2.obj = this.m_trOvrDummyCam;
  515. foreach (AMAction amaction3 in amtranslationTrack2.cache)
  516. {
  517. AMTranslationAction amtranslationAction2 = (AMTranslationAction)amaction3;
  518. amtranslationAction2.obj = this.m_trOvrDummyCam;
  519. }
  520. AMRotationTrack amrotationTrack2 = this.m_takeNow.findRotationTrack(this.m_camDummyCamera.gameObject.transform);
  521. amrotationTrack2.obj = this.m_trOvrDummyCam;
  522. foreach (AMAction amaction4 in amrotationTrack2.cache)
  523. {
  524. AMRotationAction amrotationAction2 = (AMRotationAction)amaction4;
  525. amrotationAction2.obj = this.m_trOvrDummyCam;
  526. }
  527. }
  528. this.m_camDummyCamera.gameObject.SetActive(false);
  529. }
  530. if (!GameMain.Instance.VRMode)
  531. {
  532. this.ChangeObj(this.m_takeNow, "CameraMain", GameMain.Instance.MainCamera.gameObject);
  533. }
  534. else if (GameMain.Instance.CMSystem.GetTmpGenericFlag("ダンスOVRカメラタイプ") == 0)
  535. {
  536. if (!DanceMain.KaraokeMode)
  537. {
  538. GameMain.Instance.MainCamera.SetTargetPos(new Vector3(0f, 1.16f, 0f), true);
  539. GameMain.Instance.MainCamera.SetAroundAngle(new Vector2(180f, 0f), true);
  540. GameMain.Instance.MainCamera.SetDistance(5f, true);
  541. }
  542. }
  543. else
  544. {
  545. GameObject y = GameObject.Find("__GameMain__/Camera/CameraMain/CameraMain");
  546. AMBinaryDataBaseObject[] binary_data_list = this.time_line_binary_.binary_data_list;
  547. if (binary_data_list != null)
  548. {
  549. for (int i = 0; i < binary_data_list.Length; i++)
  550. {
  551. if (binary_data_list[i].obj == y)
  552. {
  553. binary_data_list[i].SetGameObject(this.m_trOvrDummyCam.gameObject);
  554. }
  555. }
  556. }
  557. }
  558. this.ChangeObj(this.m_takeNow, "MainDirectionalLight", GameMain.Instance.MainLight.gameObject);
  559. if (DanceMain.SelectDanceData == null || string.IsNullOrEmpty(DanceMain.SelectDanceData.bgm_file_name))
  560. {
  561. GameMain.Instance.SoundMgr.PlayDanceBGM(this.m_strMasterAudioFileName, 0f, true);
  562. }
  563. else
  564. {
  565. GameMain.Instance.SoundMgr.PlayDanceBGM(DanceMain.SelectDanceData.bgm_file_name + ".ogg", 0f, true);
  566. }
  567. AudioSource audioSourceBgm = GameMain.Instance.SoundMgr.GetAudioSourceBgm();
  568. audioSourceBgm.Stop();
  569. AMAudioTrack[] array = this.m_takeNow.findAudioTrack(this.m_strDummyAudioObjectName);
  570. foreach (AMAudioTrack amaudioTrack in array)
  571. {
  572. amaudioTrack.ChangeAudioSource(audioSourceBgm);
  573. }
  574. this.m_audioNew = audioSourceBgm;
  575. if (!this.m_boDebugDummyBody)
  576. {
  577. for (int k = 0; k < this.m_listAnimName.Count; k++)
  578. {
  579. this.m_listMaid.Add(GameMain.Instance.CharacterMgr.GetMaid(k));
  580. }
  581. for (int l = 0; l < this.m_listMaid.Count; l++)
  582. {
  583. this.m_listMaid[l].EyeToCamera(Maid.EyeMoveType.目だけ向ける, 0f);
  584. }
  585. NDebug.Assert(this.m_listKuchiPattern.Count == this.m_listMaid.Count, "メイド数と口パクパターン数が異なります。");
  586. for (int m = 0; m < this.m_listMaid.Count; m++)
  587. {
  588. this.m_listMaid[m].StartKuchipakuPattern(0f, this.m_listKuchiPattern[m], true);
  589. }
  590. }
  591. this.m_eMode = DanceMain.Mode.LoadChara;
  592. }
  593. }
  594. else if (this.m_eMode == DanceMain.Mode.LoadChara)
  595. {
  596. if (!GameMain.Instance.CharacterMgr.IsBusy() || this.m_listMaid.Count == 0)
  597. {
  598. if (!this.m_boDebugDummyBody)
  599. {
  600. int num = 1;
  601. for (;;)
  602. {
  603. string arg = "f";
  604. AMAnimationTrack amanimationTrack = this.m_takeNow.findAnimationTrack(arg + num);
  605. if (amanimationTrack == null)
  606. {
  607. break;
  608. }
  609. int num2 = num - 1;
  610. Maid maid = GameMain.Instance.CharacterMgr.GetMaid(num2);
  611. string name = maid.CrossFade(this.m_listAnimName[num2] + ".anm", false, false, false, 0f, 1f);
  612. Animation component = maid.body0.m_Bones.GetComponent<Animation>();
  613. component.Stop();
  614. amanimationTrack.obj = maid.body0.m_Bones;
  615. NDebug.Assert(amanimationTrack.cache.Count == 1, "キャラアニメーショントラックにはアクションを一つしか使えません。(開始と終了キーひとつのみ)");
  616. foreach (AMAction amaction5 in amanimationTrack.cache)
  617. {
  618. AMAnimationAction amanimationAction = (AMAnimationAction)amaction5;
  619. amanimationAction.amClip = component.GetClip(name);
  620. amanimationAction.obj = maid.body0.m_Bones;
  621. }
  622. if (this.UseFloorHitY)
  623. {
  624. maid.body0.SetBoneHitHeightY(this.m_fFloorY);
  625. }
  626. num++;
  627. }
  628. for (int n = 0; n < this.m_listDummyAnimChara.Count; n++)
  629. {
  630. Maid maid2 = GameMain.Instance.CharacterMgr.GetMaid(n);
  631. for (int num3 = 0; num3 < this.m_listItemObject.Count; num3++)
  632. {
  633. Transform transform = CMT.SearchObjObj(this.m_listDummyAnimChara[n].transform, this.m_listItemObject[num3].transform);
  634. if (transform != null)
  635. {
  636. Transform transform2 = transform;
  637. string name2 = transform2.parent.name;
  638. Transform parent = CMT.SearchObjName(maid2.gameObject.transform, name2, true);
  639. transform2.SetParent(parent, false);
  640. }
  641. }
  642. }
  643. for (int num4 = 0; num4 < this.m_listDebugObj.Count; num4++)
  644. {
  645. UnityEngine.Object.DestroyImmediate(this.m_listDebugObj[num4]);
  646. }
  647. this.m_listDebugObj.Clear();
  648. }
  649. if (string.IsNullOrEmpty(this.m_AdjustScript))
  650. {
  651. this.m_eMode = DanceMain.Mode.LoadAnim;
  652. }
  653. else
  654. {
  655. base.StartCoroutine(this.LoadMotionScript());
  656. this.m_eMode = DanceMain.Mode.LoadScript;
  657. }
  658. }
  659. }
  660. else if (this.m_eMode == DanceMain.Mode.LoadAnim)
  661. {
  662. this.m_AnimatorData.Play(this.m_takeNow.name, true, 0f, false, this.time_line_binary_.GetTrackIDList());
  663. this.m_fTakeStartRealTime = Time.realtimeSinceStartup;
  664. this.m_fNowRealTime = this.m_fTakeStartRealTime;
  665. this.m_eMode = DanceMain.Mode.Exec;
  666. }
  667. else if (this.m_eMode == DanceMain.Mode.Exec)
  668. {
  669. if (!RhythmAction_Mgr.Instance.IsPause)
  670. {
  671. float num5 = RhythmAction_Mgr.Instance.DanceDeltaTime;
  672. if (this.m_audioNew != null && this.m_audioNew.isPlaying)
  673. {
  674. float time = this.m_audioNew.time;
  675. for (int num6 = 0; num6 < this.m_listMaid.Count; num6++)
  676. {
  677. this.m_listMaid[num6].FoceKuchipakuUpdate(time);
  678. }
  679. if (this.m_bAudioFirst)
  680. {
  681. float num7 = time;
  682. num5 = Time.realtimeSinceStartup - this.m_fTakeStartRealTime;
  683. this.m_bAudioFirst = false;
  684. this.m_fOffsetTime = num7 - num5;
  685. RhythmAction_Mgr.Instance.RhythmGame_Start();
  686. }
  687. }
  688. this.m_fNowRealTime += num5;
  689. }
  690. if (this.IsForceDanceEnd || this.m_AnimatorData.takeName == null || this.IsDanceSkip || (DanceMain.KaraokeMode && Input.GetKeyDown(KeyCode.Return)))
  691. {
  692. this.ToFinish();
  693. }
  694. }
  695. else if (this.m_eMode == DanceMain.Mode.Finish)
  696. {
  697. }
  698. if (this.m_AnimatorData.takeName != null)
  699. {
  700. NTime.UpdateNowTime(this.m_fNowRealTime - this.m_fTakeStartRealTime + this.m_fOffsetTime);
  701. this.time_line_binary_.Update(NTime.time);
  702. }
  703. if (GameMain.Instance.VRMode && this.m_trOvrDummyCam != null && this.m_OvrCam != null)
  704. {
  705. this.m_OvrCam.SetPos(this.m_trOvrDummyCam.position);
  706. this.m_OvrCam.SetRotation(this.m_trOvrDummyCam.rotation.eulerAngles);
  707. }
  708. }
  709. private const string m_RhythmMgr_Path = "SceneDance/Rhythm_Action/Prefab/RhythmAction_Mgr";
  710. public static bool IsDanceRecet;
  711. public static DanceData SelectDanceData;
  712. public static bool KaraokeMode;
  713. private DanceMain.Mode m_eMode;
  714. public bool m_boDebugDummyBody;
  715. public Camera m_camDummyCamera;
  716. public List<GameObject> m_listDebugObj;
  717. public AnimatorData m_AnimatorData;
  718. public List<GameObject> m_listDummyAnimChara;
  719. public List<string> m_listAnimName;
  720. public List<GameObject> m_listEventObject;
  721. private Hashtable m_htEventObj = new Hashtable();
  722. public List<string> m_listTestPreset;
  723. public List<GameObject> m_listItemObject = new List<GameObject>();
  724. public List<string> m_listKuchiPakuFile = new List<string>();
  725. private List<string> m_listKuchiPattern = new List<string>();
  726. private List<Maid> m_listMaid = new List<Maid>();
  727. public string m_strDummyAudioObjectName;
  728. private AudioSource m_audioNew;
  729. public string m_strMasterAudioFileName;
  730. public string m_strPlayTakeName = "Take1";
  731. private AMTake m_takeNow;
  732. private string m_strScriptLabel = string.Empty;
  733. private List<Maid> m_listTempMaid = new List<Maid>();
  734. private Maid m_maidUser;
  735. [HideInInspector]
  736. public bool IsForceDanceEnd;
  737. [HideInInspector]
  738. public bool IsDanceSkip;
  739. private OvrCamera m_OvrCam;
  740. private Transform m_trOvrDummyCam;
  741. public bool UseBinaryData;
  742. public string BinaryFolderName;
  743. private DanceObjectDataBinary maid_data_binary_;
  744. private DanceObjectDataBinary maid_item_binary_;
  745. private DanceObjectDataBinary maid_event_binary_;
  746. private AWReadBinaryData time_line_binary_;
  747. [Header("物理境界を変更するか?")]
  748. public bool UseFloorHitY;
  749. public float m_fFloorY;
  750. [SerializeField]
  751. [Header("被写界深度の焦点")]
  752. private float m_DepthFocalSize = 1.2f;
  753. [SerializeField]
  754. [Header("マイク位置調整等に使うモーションスクリプト名")]
  755. private string m_AdjustScript = string.Empty;
  756. [SerializeField]
  757. private string m_ScriptLabel = string.Empty;
  758. [SerializeField]
  759. [Header("AdjustScript読み込みに要する時間")]
  760. private float m_LoadScriptTime = 3f;
  761. private bool m_bFinished;
  762. private float m_fNowRealTime;
  763. private float m_fTakeStartRealTime;
  764. private float m_fOffsetTime;
  765. private bool m_bAudioFirst = true;
  766. private enum Mode
  767. {
  768. ActiveCam,
  769. LoadChara,
  770. LoadAnim,
  771. Exec,
  772. Finish,
  773. LoadScript
  774. }
  775. }