YotogiStage.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEngine;
  5. using wf;
  6. public static class YotogiStage
  7. {
  8. public static int Count
  9. {
  10. get
  11. {
  12. YotogiStage.CreateData();
  13. return YotogiStage.commonIdManager.idMap.Count;
  14. }
  15. }
  16. public static bool Contains(string name)
  17. {
  18. YotogiStage.CreateData();
  19. return YotogiStage.commonIdManager.nameMap.ContainsKey(name);
  20. }
  21. public static bool Contains(int id)
  22. {
  23. YotogiStage.CreateData();
  24. return YotogiStage.commonIdManager.idMap.ContainsKey(id);
  25. }
  26. public static int uniqueNameToId(string name)
  27. {
  28. YotogiStage.CreateData();
  29. NDebug.Assert(YotogiStage.commonIdManager.nameMap.ContainsKey(name), "夜伽ステージ\nユニーク名[" + name + "]をIDに変換できませんでした");
  30. return YotogiStage.commonIdManager.nameMap[name];
  31. }
  32. public static string IdToUniqueName(int id)
  33. {
  34. YotogiStage.CreateData();
  35. NDebug.Assert(YotogiStage.commonIdManager.idMap.ContainsKey(id), "夜伽ステージ\nID[" + id + "]をユニーク名に変換できませんでした");
  36. return YotogiStage.commonIdManager.idMap[id].Key;
  37. }
  38. public static YotogiStage.Data GetData(int id)
  39. {
  40. YotogiStage.CreateData();
  41. NDebug.Assert(YotogiStage.basicDatas.ContainsKey(id), "夜伽ステージ\nID[" + id + "]のデータは存在しません");
  42. return YotogiStage.basicDatas[id];
  43. }
  44. public static YotogiStage.Data GetData(string uniqueName)
  45. {
  46. return YotogiStage.GetData(YotogiStage.uniqueNameToId(uniqueName));
  47. }
  48. public static bool IsEnabled(string uniqueName)
  49. {
  50. YotogiStage.CreateData();
  51. return YotogiStage.commonIdManager.enabledIdList.Contains(YotogiStage.uniqueNameToId(uniqueName));
  52. }
  53. public static bool IsEnabled(int id)
  54. {
  55. YotogiStage.CreateData();
  56. return YotogiStage.commonIdManager.enabledIdList.Contains(id);
  57. }
  58. public static List<YotogiStage.Data> GetAllDatas(bool onlyEnabled)
  59. {
  60. YotogiStage.CreateData();
  61. List<YotogiStage.Data> list = new List<YotogiStage.Data>();
  62. foreach (KeyValuePair<int, KeyValuePair<string, string>> keyValuePair in YotogiStage.commonIdManager.idMap)
  63. {
  64. if (!onlyEnabled || YotogiStage.commonIdManager.enabledIdList.Contains(keyValuePair.Key))
  65. {
  66. list.Add(YotogiStage.basicDatas[keyValuePair.Key]);
  67. }
  68. }
  69. return list;
  70. }
  71. public static void CreateData()
  72. {
  73. if (YotogiStage.commonIdManager != null)
  74. {
  75. return;
  76. }
  77. YotogiStage.commonIdManager = new CsvCommonIdManager("yotogi_stage", "夜伽ステージ", CsvCommonIdManager.Type.IdAndUniqueName, null);
  78. YotogiStage.basicDatas = new Dictionary<int, YotogiStage.Data>();
  79. string[] array = new string[]
  80. {
  81. "list"
  82. };
  83. KeyValuePair<AFileBase, CsvParser>[] array2 = new KeyValuePair<AFileBase, CsvParser>[array.Length];
  84. for (int i = 0; i < array2.Length; i++)
  85. {
  86. string text = "yotogi_stage_" + array[i] + ".nei";
  87. AFileBase afileBase = GameUty.FileSystem.FileOpen(text);
  88. CsvParser csvParser = new CsvParser();
  89. bool condition = csvParser.Open(afileBase);
  90. NDebug.Assert(condition, text + "\nopen failed.");
  91. array2[i] = new KeyValuePair<AFileBase, CsvParser>(afileBase, csvParser);
  92. }
  93. foreach (KeyValuePair<int, KeyValuePair<string, string>> keyValuePair in YotogiStage.commonIdManager.idMap)
  94. {
  95. YotogiStage.basicDatas.Add(keyValuePair.Key, new YotogiStage.Data(keyValuePair.Key, array2[0].Value));
  96. }
  97. foreach (KeyValuePair<AFileBase, CsvParser> keyValuePair2 in array2)
  98. {
  99. keyValuePair2.Value.Dispose();
  100. keyValuePair2.Key.Dispose();
  101. }
  102. }
  103. private const string csvTopCommonName = "yotogi_stage";
  104. private const string typeNameForErrorLog = "夜伽ステージ";
  105. public const string termRootText = "SceneYotogi/背景タイプ/";
  106. private static CsvCommonIdManager commonIdManager;
  107. private static Dictionary<int, YotogiStage.Data> basicDatas;
  108. public class Data : IComparable, IComparable<YotogiStage.Data>
  109. {
  110. public Data(int id, CsvParser basicCsv)
  111. {
  112. List<int> list = new List<int>();
  113. for (int i = 1; i < basicCsv.max_cell_y; i++)
  114. {
  115. if (basicCsv.IsCellToExistData(0, i) && basicCsv.GetCellAsInteger(0, i) == id)
  116. {
  117. this.id = id;
  118. int num = 1;
  119. string text = string.Empty;
  120. this.uniqueName = basicCsv.GetCellAsString(num++, i);
  121. this.drawName = basicCsv.GetCellAsString(num++, i);
  122. this.sortId = basicCsv.GetCellAsInteger(num++, i);
  123. this.drawClubGrade = basicCsv.GetCellAsInteger(num++, i);
  124. this.requestClubGrade = basicCsv.GetCellAsInteger(num++, i);
  125. this.requestFacilityIds = new int[0];
  126. text = basicCsv.GetCellAsString(num++, i);
  127. if (!string.IsNullOrEmpty(text))
  128. {
  129. string[] array = text.Split(new char[]
  130. {
  131. ','
  132. });
  133. this.requestFacilityIds = new int[array.Length];
  134. for (int j = 0; j < array.Length; j++)
  135. {
  136. this.requestFacilityIds[j] = int.Parse(array[j].Trim());
  137. }
  138. }
  139. this.prefabName = new string[2];
  140. this.thumbnailName = new string[2];
  141. for (int k = 0; k < this.prefabName.Length; k++)
  142. {
  143. this.prefabName[k] = basicCsv.GetCellAsString(num++, i);
  144. this.thumbnailName[k] = Path.ChangeExtension(basicCsv.GetCellAsString(num++, i), ".tex");
  145. }
  146. this.bgmFileName = Path.ChangeExtension(basicCsv.GetCellAsString(num++, i), ".ogg");
  147. string cellAsString = basicCsv.GetCellAsString(num++, i);
  148. string[] array2 = cellAsString.Split(new char[]
  149. {
  150. ','
  151. });
  152. NDebug.Assert(array2.Length == 6, "ステージカメラ設定が不正です\nLine : " + i.ToString());
  153. Vector3 center = new Vector3(float.Parse(array2[0]), float.Parse(array2[1]), float.Parse(array2[2]));
  154. float radius = float.Parse(array2[3]);
  155. Vector2 v = new Vector2(float.Parse(array2[4]), float.Parse(array2[5]));
  156. this.stageSelectCameraData = new YotogiStage.Data.Camera(center, v, radius);
  157. cellAsString = basicCsv.GetCellAsString(num++, i);
  158. array2 = cellAsString.Split(new char[]
  159. {
  160. ','
  161. });
  162. NDebug.Assert(array2.Length == 6, "カス子位置情報が不正です\nLine : " + i.ToString());
  163. Vector3 position = new Vector3(float.Parse(array2[0]), float.Parse(array2[1]), float.Parse(array2[2]));
  164. Vector3 rotation = new Vector3(float.Parse(array2[3]), float.Parse(array2[4]), float.Parse(array2[5]));
  165. cellAsString = basicCsv.GetCellAsString(num++, i);
  166. array2 = cellAsString.Split(new char[]
  167. {
  168. ','
  169. });
  170. NDebug.Assert(array2.Length == 2, "スキル選択時カメラデータが不正です\nLine : " + i.ToString());
  171. Vector2 cameraAngle = new Vector2(float.Parse(array2[0]), float.Parse(array2[1]));
  172. this.skillSelectcharacterData = new YotogiStage.Data.Character(position, rotation, cameraAngle);
  173. string cellAsString2 = basicCsv.GetCellAsString(num++, i);
  174. string[] array3 = cellAsString2.Split(new char[]
  175. {
  176. ','
  177. });
  178. NDebug.Assert(array3.Length == 4, "スキル選択時ライトデータが不正です\nLine : " + i.ToString());
  179. Vector3 position2 = new Vector3(float.Parse(array3[0]), float.Parse(array3[1]), float.Parse(array3[2]));
  180. float intensity = float.Parse(array3[3]);
  181. this.skillSelectLightData = new YotogiStage.Data.Light(position2, intensity);
  182. break;
  183. }
  184. }
  185. }
  186. public int CompareTo(YotogiStage.Data other)
  187. {
  188. return this.sortId.CompareTo(other.sortId);
  189. }
  190. public int CompareTo(object other)
  191. {
  192. return this.sortId.CompareTo(((YotogiStage.Data)other).sortId);
  193. }
  194. public bool isYotogiPlayable(int clubGrade, bool checkFacility)
  195. {
  196. if (clubGrade < this.requestClubGrade)
  197. {
  198. return false;
  199. }
  200. bool flag = this.requestFacilityIds.Length == 0;
  201. FacilityManager facilityMgr = GameMain.Instance.FacilityMgr;
  202. foreach (int facilityTypeID in this.requestFacilityIds)
  203. {
  204. if (checkFacility)
  205. {
  206. flag |= facilityMgr.IsExistTypeFacility(facilityTypeID);
  207. }
  208. else
  209. {
  210. flag |= facilityMgr.IsFacilityBuildFlag(facilityTypeID);
  211. }
  212. }
  213. return flag;
  214. }
  215. public string termName
  216. {
  217. get
  218. {
  219. return "SceneYotogi/背景タイプ/" + this.uniqueName;
  220. }
  221. }
  222. public readonly int id;
  223. public readonly string uniqueName;
  224. public readonly string drawName;
  225. public readonly int drawClubGrade;
  226. public readonly int sortId;
  227. public readonly int requestClubGrade;
  228. public readonly int[] requestFacilityIds;
  229. public readonly string[] prefabName;
  230. public readonly string[] thumbnailName;
  231. public readonly string bgmFileName;
  232. public readonly YotogiStage.Data.Camera stageSelectCameraData;
  233. public readonly YotogiStage.Data.Light skillSelectLightData;
  234. public readonly YotogiStage.Data.Character skillSelectcharacterData;
  235. public class Camera
  236. {
  237. public Camera(Vector3 center, Vector3 angle, float radius)
  238. {
  239. this.center = center;
  240. this.angle = angle;
  241. this.radius = radius;
  242. }
  243. public void Apply(CameraMain camera)
  244. {
  245. camera.SetFromScriptOnTarget(this.center, this.radius, this.angle);
  246. }
  247. public void Apply()
  248. {
  249. this.Apply(GameMain.Instance.MainCamera);
  250. }
  251. public readonly Vector3 center;
  252. public readonly Vector2 angle;
  253. public readonly float radius;
  254. }
  255. public class Light
  256. {
  257. public Light(Vector3 position, float intensity)
  258. {
  259. this.position = position;
  260. this.intensity = intensity;
  261. }
  262. public void Apply(LightMain light)
  263. {
  264. light.SetRotation(this.position);
  265. light.SetIntensity(this.intensity);
  266. }
  267. public void Apply()
  268. {
  269. this.Apply(GameMain.Instance.MainLight);
  270. }
  271. public readonly Vector3 position;
  272. public readonly float intensity;
  273. }
  274. public class Character
  275. {
  276. public Character(Vector3 position, Vector3 rotation, Vector2 cameraAngle)
  277. {
  278. this.position = position;
  279. this.rotation = rotation;
  280. this.cameraAngle = cameraAngle;
  281. }
  282. public void Apply(CharacterMgr charaMgr)
  283. {
  284. charaMgr.SetCharaAllPos(this.position);
  285. charaMgr.SetCharaAllRot(this.rotation);
  286. }
  287. public void Apply()
  288. {
  289. this.Apply(GameMain.Instance.CharacterMgr);
  290. }
  291. public readonly Vector3 position;
  292. public readonly Vector3 rotation;
  293. public readonly Vector2 cameraAngle;
  294. }
  295. }
  296. }