Opening.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. using Photon.Pun;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnityEngine;
  6. using UnityEngine.EventSystems;
  7. using UnityEngine.UI;
  8. using UnityEngine.Events;
  9. using System;
  10. using System.Threading.Tasks;
  11. public class Opening : MonoBehaviour
  12. {
  13. [Header("読み込み中表示オブジェクト")]
  14. public LoadingObject LoadingObject;
  15. [Header("読み込み中表示オブジェクト(明るい)")]
  16. public LoadingObject LoadingObject_light;
  17. [Header("読み込み中表示オブジェクト_アンロード")]
  18. public LoadingObject LoadingObject_Unload;
  19. [Header("ホーム")]
  20. public HomeMode home;
  21. [Header("デッキ")]
  22. public DeckMode deck;
  23. [Header("バトル")]
  24. public BattleMode battle;
  25. [Header("クリック時エフェクト")]
  26. public GameObject OnClickEffect;
  27. [Header("キャンバス")]
  28. public RectTransform canvasRect;
  29. [Header("YesNoオブジェクト")]
  30. [SerializeField] List<YesNoObject> YesNoObjects = new List<YesNoObject>();
  31. [Header("Background Particle effects")]
  32. [SerializeField] List<ParticleSystem> _backgroundParticles = new List<ParticleSystem>();
  33. [SerializeField] CardImagePanel _cardImagePanel;
  34. public CheckUpdate checkUpdate;
  35. public static Opening instance = null;
  36. public Text VerText;
  37. public OptionPanel optionPanel;
  38. public PatchNotes patchNotesPanel;
  39. public GameObject ModeButtons;
  40. public Vector3 DeckInfoPrefabStartScale;
  41. public Vector3 DeckInfoPrefabExpandScale;
  42. [SerializeField] Transform camerasParent;
  43. public Title title;
  44. [Header("背景Image")]
  45. public List<Image> BackgroundImages = new List<Image>();
  46. public GameObject openingObject;
  47. [Header("TitleButtonSE")]
  48. public AudioClip TitleButtonSE;
  49. [Header("DrawSE")]
  50. public AudioClip DrawSE;
  51. [Header("MoveSE")]
  52. public AudioClip MoveSE;
  53. [Header("DecisionSE")]
  54. public AudioClip DecisionSE;
  55. [Header("CancelSE")]
  56. public AudioClip CancelSE;
  57. [Header("BGM")]
  58. public AudioClip bgm;
  59. [Header("BGMObject")]
  60. public BGMObject OpeningBGM;
  61. private void Awake()
  62. {
  63. instance = this;
  64. if (openingCameras.Count >= 1)
  65. {
  66. MainCamera = openingCameras[0];
  67. }
  68. }
  69. int count = 0;
  70. int UpdateFrame = 5;
  71. private void Update()
  72. {
  73. #region 数フレームに一度だけ更新
  74. count++;
  75. if (count < UpdateFrame)
  76. {
  77. return;
  78. }
  79. else
  80. {
  81. count = 0;
  82. }
  83. #endregion
  84. GetRayCast();
  85. if (ContinuousController.instance != null)
  86. {
  87. foreach (ParticleSystem particleSystem in _backgroundParticles)
  88. {
  89. if (particleSystem != null)
  90. {
  91. particleSystem.gameObject.SetActive(ContinuousController.instance.showBackgroundParticle);
  92. }
  93. }
  94. }
  95. }
  96. YesNoObject ActiveYesNoObject()
  97. {
  98. foreach (YesNoObject yesNoObject in YesNoObjects)
  99. {
  100. if (!yesNoObject.gameObject.activeSelf)
  101. {
  102. return yesNoObject;
  103. }
  104. }
  105. if (YesNoObjects.Count >= 1)
  106. {
  107. return YesNoObjects[0];
  108. }
  109. return null;
  110. }
  111. public void OffYesNoObjects()
  112. {
  113. foreach (YesNoObject yesNoObject in YesNoObjects)
  114. {
  115. yesNoObject.Close_(false);
  116. }
  117. }
  118. public void SetUpActiveYesNoObject(List<UnityAction> OnClickActions, List<string> CommandTexts, string _InfoText, bool CanClose)
  119. {
  120. YesNoObject activeYesNoObject = ActiveYesNoObject();
  121. if (activeYesNoObject != null)
  122. {
  123. activeYesNoObject.Off();
  124. activeYesNoObject.transform.parent.gameObject.SetActive(true);
  125. activeYesNoObject.transform.SetSiblingIndex(activeYesNoObject.transform.parent.childCount - 1);
  126. activeYesNoObject.SetUpYesNoObject(OnClickActions, CommandTexts, _InfoText, CanClose);
  127. }
  128. }
  129. void GetRayCast()
  130. {
  131. if (GManager.instance != null)
  132. {
  133. return;
  134. }
  135. if (ContinuousController.instance == null)
  136. {
  137. return;
  138. }
  139. //bool isRay = false;
  140. List<RaycastResult> results = new List<RaycastResult>();
  141. PointerEventData pointer = new PointerEventData(EventSystem.current);
  142. // マウスポインタの位置にレイ飛ばし、ヒットしたものを保存
  143. pointer.position = Input.mousePosition;
  144. EventSystem.current.RaycastAll(pointer, results);
  145. // ヒットしたUIの名前
  146. //isRay = true;
  147. CardPrefab_CreateDeck cardPrefab = null;
  148. foreach (RaycastResult target in results)
  149. {
  150. if (target.gameObject.CompareTag("CardPrefab_CreateDeck_CardImage"))
  151. {
  152. cardPrefab = target.gameObject.transform.parent.parent.parent.GetComponent<CardPrefab_CreateDeck>();
  153. /*
  154. if (cardPrefab != null)
  155. {
  156. if (Opening.instance.deck.trialDraw.gameObject.activeSelf)
  157. {
  158. if (cardPrefab.transform.parent != Opening.instance.deck.trialDraw.CardScroll.content)
  159. {
  160. cardPrefab = null;
  161. }
  162. }
  163. else if (Opening.instance.deck.deckListPanel.gameObject.activeSelf)
  164. {
  165. if (cardPrefab.transform.parent != Opening.instance.deck.deckListPanel.DeckScroll.content)
  166. {
  167. cardPrefab = null;
  168. }
  169. }
  170. }
  171. */
  172. if (cardPrefab != null)
  173. {
  174. break;
  175. }
  176. }
  177. }
  178. //isRay = cardPrefab != null;
  179. if (cardPrefab != null)
  180. {
  181. if (deck.editDeck.isDragging)
  182. {
  183. cardPrefab = null;
  184. }
  185. else
  186. {
  187. foreach (RaycastResult target in results)
  188. {
  189. if (target.gameObject.layer == LayerMask.NameToLayer("IgnoreCardPrefabRaycast"))
  190. {
  191. if (DropArea.IsChild(Opening.instance.deck.trialDraw.gameObject, target.gameObject))
  192. {
  193. if (cardPrefab.transform.parent == Opening.instance.deck.trialDraw.CardScroll.content)
  194. {
  195. continue;
  196. }
  197. }
  198. else if (DropArea.IsChild(Opening.instance.deck.deckListPanel.gameObject, target.gameObject))
  199. {
  200. if (cardPrefab.transform.parent == Opening.instance.deck.deckListPanel.DeckScroll.content)
  201. {
  202. continue;
  203. }
  204. if (cardPrefab.transform.parent == Opening.instance.deck.trialDraw.CardScroll.content)
  205. {
  206. continue;
  207. }
  208. }
  209. cardPrefab = null;
  210. break;
  211. }
  212. }
  213. }
  214. }
  215. if (cardPrefab != null)
  216. {
  217. if (Opening.instance.deck.editDeck.gameObject.activeSelf && Opening.instance.deck.editDeck.isEditting && !Opening.instance.deck.editDeck.isDragging)
  218. {
  219. for (int i = 0; i < Opening.instance.deck.editDeck.CardPoolCardPrefabs_CreateDeck.Count; i++)
  220. {
  221. if (Opening.instance.deck.editDeck.CardPoolCardPrefabs_CreateDeck[i] != cardPrefab)
  222. {
  223. Opening.instance.deck.editDeck.CardPoolCardPrefabs_CreateDeck[i]._OnExit();
  224. }
  225. }
  226. for (int i = 0; i < Opening.instance.deck.editDeck.DeckScroll.content.childCount; i++)
  227. {
  228. if (Opening.instance.deck.editDeck.DeckScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>() != cardPrefab)
  229. {
  230. Opening.instance.deck.editDeck.DeckScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>()._OnExit();
  231. }
  232. }
  233. }
  234. if (Opening.instance.deck.deckListPanel.gameObject.activeSelf)
  235. {
  236. for (int i = 0; i < Opening.instance.deck.deckListPanel.DeckScroll.content.childCount; i++)
  237. {
  238. if (Opening.instance.deck.deckListPanel.DeckScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>() != cardPrefab)
  239. {
  240. Opening.instance.deck.deckListPanel.DeckScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>()._OnExit();
  241. }
  242. }
  243. }
  244. if (Opening.instance.deck.trialDraw.gameObject.activeSelf)
  245. {
  246. for (int i = 0; i < Opening.instance.deck.trialDraw.CardScroll.content.childCount; i++)
  247. {
  248. if (Opening.instance.deck.trialDraw.CardScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>() != cardPrefab)
  249. {
  250. Opening.instance.deck.trialDraw.CardScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>()._OnExit();
  251. }
  252. }
  253. }
  254. cardPrefab.OnEnter();
  255. }
  256. //if (!isRay)
  257. else
  258. {
  259. if (Opening.instance.deck.editDeck.gameObject.activeSelf && Opening.instance.deck.editDeck.isEditting)
  260. {
  261. for (int i = 0; i < Opening.instance.deck.editDeck.CardPoolCardPrefabs_CreateDeck.Count; i++)
  262. {
  263. Opening.instance.deck.editDeck.CardPoolCardPrefabs_CreateDeck[i]._OnExit();
  264. }
  265. for (int i = 0; i < Opening.instance.deck.editDeck.DeckScroll.content.childCount; i++)
  266. {
  267. Opening.instance.deck.editDeck.DeckScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>()._OnExit();
  268. }
  269. }
  270. if (Opening.instance.deck.deckListPanel.gameObject.activeSelf)
  271. {
  272. for (int i = 0; i < Opening.instance.deck.deckListPanel.DeckScroll.content.childCount; i++)
  273. {
  274. Opening.instance.deck.deckListPanel.DeckScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>()._OnExit();
  275. }
  276. }
  277. if (Opening.instance.deck.trialDraw.gameObject.activeSelf)
  278. {
  279. for (int i = 0; i < Opening.instance.deck.trialDraw.CardScroll.content.childCount; i++)
  280. {
  281. Opening.instance.deck.trialDraw.CardScroll.content.GetChild(i).GetComponent<CardPrefab_CreateDeck>()._OnExit();
  282. }
  283. }
  284. }
  285. }
  286. public void OpenRuleBook()
  287. {
  288. OpenURL openURL = GetComponent<OpenURL>();
  289. openURL.Open();
  290. }
  291. public List<Camera> openingCameras
  292. {
  293. get
  294. {
  295. List<Camera> openingCameras = new List<Camera>();
  296. for (int i = 0; i < camerasParent.childCount; i++)
  297. {
  298. Camera camera = camerasParent.GetChild(i).GetComponent<Camera>();
  299. if (camera != null)
  300. {
  301. openingCameras.Add(camera);
  302. }
  303. }
  304. return openingCameras;
  305. }
  306. }
  307. public Camera MainCamera { get; set; }
  308. public void PlayDecisionSE()
  309. {
  310. ContinuousController.instance.PlaySE(Opening.instance.DecisionSE);
  311. }
  312. public void PlayCancelSE()
  313. {
  314. ContinuousController.instance.PlaySE(Opening.instance.CancelSE);
  315. }
  316. public void OffModeButtons()
  317. {
  318. ModeButtons.SetActive(false);
  319. }
  320. public void OnModeButtons()
  321. {
  322. ModeButtons.SetActive(true);
  323. }
  324. public void CreateOnClickEffect()
  325. {
  326. GameObject effect = Instantiate(OnClickEffect, canvasRect.transform);
  327. var mousePos = Input.mousePosition;
  328. var magnification = canvasRect.sizeDelta.x / Screen.width;
  329. mousePos.x = mousePos.x * magnification - canvasRect.sizeDelta.x / 2;
  330. mousePos.y = mousePos.y * magnification - canvasRect.sizeDelta.y / 2;
  331. mousePos.z = 0;// -0.5f;// transform.localPosition.z;
  332. effect.transform.localPosition = mousePos;
  333. effect.transform.localRotation = Quaternion.EulerAngles(new Vector3(77, 0, 0));
  334. StartCoroutine(Effects.DeleteCoroutine(effect, null));
  335. }
  336. private void Start()
  337. {
  338. foreach (YesNoObject yesNoObject in YesNoObjects)
  339. {
  340. yesNoObject.Close_(false);
  341. }
  342. ChangeBackground();
  343. home.OffHome();
  344. deck.OffDeck();
  345. battle.OffBattle();
  346. _cardImagePanel.Close_(false);
  347. StartCoroutine(Init());
  348. }
  349. async void ChangeBackground()
  350. {
  351. Sprite backgroundSprite = await StreamingAssetsUtility.GetSprite("Background_home");
  352. if (backgroundSprite != null)
  353. {
  354. foreach (Image BackgroundImage in BackgroundImages)
  355. {
  356. BackgroundImage.sprite = backgroundSprite;
  357. }
  358. }
  359. }
  360. public IEnumerator Init()
  361. {
  362. OpeningBGM.StopPlayBGM();
  363. yield return StartCoroutine(LoadingObject.StartLoading("Now Loading"));
  364. LoadingObject_light.gameObject.SetActive(false);
  365. LoadingObject_Unload.gameObject.SetActive(false);
  366. yield return StartCoroutine(ContinuousController.LoadCoroutine());
  367. yield return new WaitWhile(() => ContinuousController.instance == null);
  368. // ContinuousController.instance.LoadVolume();
  369. home.OffHome();
  370. optionPanel.Init();
  371. patchNotesPanel.Init();
  372. yield return StartCoroutine(deck.editDeck.InitEditDeck());
  373. if (PhotonNetwork.IsConnected)
  374. {
  375. PhotonNetwork.Disconnect();
  376. while (PhotonNetwork.IsConnected)
  377. {
  378. yield return null;
  379. }
  380. }
  381. yield return new WaitForSeconds(0.1f);
  382. VerText.text = $"Ver{ContinuousController.instance.GameVerString}";
  383. deck.SetUpDeckMode();
  384. deck.OffDeck();
  385. title.SetUpTitle();
  386. LoadCardImages();
  387. yield return new WaitForSeconds(0.15f);
  388. yield return StartCoroutine(LoadingObject.EndLoading());
  389. }
  390. async void LoadCardImages()
  391. {
  392. #if UNITY_EDITOR
  393. foreach (CEntity_Base cEntity_Base in ContinuousController.instance.CardList)
  394. {
  395. cEntity_Base.HasLoadStarted = false;
  396. }
  397. #endif
  398. foreach (DeckData deckData in ContinuousController.instance.DeckDatas)
  399. {
  400. CEntity_Base keyCard = deckData.KeyCard;
  401. if (keyCard != null)
  402. {
  403. keyCard.HasLoadStarted = false;
  404. await keyCard.LoadCardImage();
  405. }
  406. }
  407. }
  408. }