DanceMain.cs 26 KB

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