SceneData.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System;
  5. public class SceneData
  6. {
  7. public const int SCENE_TYPE_COMMON = 1;//普通本
  8. private int mCurrentLevelTurn = 1; //当前通关的场景
  9. private bool mbDisposed = false;
  10. private List<SceneItem> mSceneItems = new List<SceneItem>();
  11. private Dictionary<int, bool> mDictGotSceneFlags = new Dictionary<int, bool>();
  12. private SceneItem m_CurSceneItem;
  13. public SceneItem CurSceneItem
  14. {
  15. get
  16. {
  17. return m_CurSceneItem;
  18. }
  19. set
  20. {
  21. m_CurSceneItem = value;
  22. }
  23. }
  24. public SceneData()
  25. {
  26. }
  27. public void Dispose()
  28. {
  29. if (mbDisposed)
  30. return;
  31. if (m_CurSceneItem != null)
  32. {
  33. m_CurSceneItem.Dispose();
  34. m_CurSceneItem = null;
  35. }
  36. if (mSceneItems != null)
  37. {
  38. for (int idx = 0; idx < mSceneItems.Count; idx++)
  39. {
  40. if (mSceneItems[idx] != null)
  41. {
  42. mSceneItems[idx].Dispose();
  43. mSceneItems[idx] = null;
  44. }
  45. mSceneItems.Clear();
  46. }
  47. }
  48. if (mDictGotSceneFlags != null) {
  49. mDictGotSceneFlags.Clear ();
  50. mDictGotSceneFlags = null;
  51. }
  52. mbDisposed = true;
  53. }
  54. public void ClearDict()
  55. {
  56. mSceneItems.Clear();
  57. }
  58. public SceneItem GetSceneItem(int type, int id)
  59. {
  60. List<SceneItem> scenes = GetSceneItemsByType(type);
  61. if (scenes == null) return null;
  62. for (int i = 0; i < scenes.Count; ++i)
  63. {
  64. if (scenes[i].MapId == id) return scenes[i];
  65. }
  66. return null;
  67. }
  68. /// <summary>
  69. /// use for common dungeon
  70. /// </summary>
  71. /// <param name="id"></param>
  72. /// <returns></returns>
  73. public LevelItem GetLevelByID(int id)
  74. {
  75. for (int i = 0; i < mSceneItems.Count; i++)
  76. {
  77. for (int n = 0; n < mSceneItems[i].LevelItems.Length; n++)
  78. {
  79. if (mSceneItems[i].LevelItems[n].LevelId == id)
  80. return mSceneItems[i].LevelItems[n];
  81. }
  82. }
  83. return null;
  84. }
  85. public string GetSceneTypeDes(int type)
  86. {
  87. string result = "";
  88. return result;
  89. }
  90. public List<SceneItem> GetSceneItemsByType(int type)
  91. {
  92. return mSceneItems;
  93. }
  94. public void ResetDictGotSceneFlags(int type)
  95. {
  96. if(mDictGotSceneFlags.ContainsKey(type))
  97. {
  98. mDictGotSceneFlags[type]=false;
  99. }
  100. }
  101. public int GetSceneCount(int type)
  102. {
  103. return mSceneItems.Count;
  104. }
  105. public int GetPassLevelCount(int type)
  106. {
  107. int count = 0;
  108. for (int i = 0; i < mSceneItems.Count; i++)
  109. {
  110. LevelItem[] mCurrentSceneDungeons = mSceneItems[i].LevelItems;
  111. for (int j = 0; j < mCurrentSceneDungeons.Length; j++)
  112. {
  113. if (mCurrentSceneDungeons[j].HasPassed)
  114. {
  115. count++;
  116. }
  117. }
  118. }
  119. return count;
  120. }
  121. public bool IsGotSceneList(int type)
  122. {
  123. bool bGot = false;
  124. if (mDictGotSceneFlags.TryGetValue(type, out bGot))
  125. {
  126. return bGot;
  127. }
  128. return false;
  129. }
  130. public SceneItem GetSceneFromConfig(int sceneID)
  131. {
  132. return new SceneItem(sceneID);
  133. }
  134. }
  135. public class SceneItem : IComparable<SceneItem>
  136. {
  137. #region fields
  138. private int mMapId = 0;
  139. public int MapId
  140. {
  141. get { return mMapId; }
  142. }
  143. private string mName = "";
  144. public string Name
  145. {
  146. get { return mName; }
  147. }
  148. private string mDesciption = "";
  149. public string Description
  150. {
  151. get { return mDesciption; }
  152. }
  153. private string mMusicName = "";
  154. public string MusicName
  155. {
  156. get { return mMusicName; }
  157. }
  158. private string mAssetPath = "";
  159. public string AssetPath
  160. {
  161. get { return mAssetPath; }
  162. }
  163. private string mPath = "";
  164. public string Path
  165. {
  166. get { return mPath; }
  167. }
  168. //关卡数目
  169. private int mLevelNum = 0;
  170. public int LevelNum
  171. {
  172. get { return mLevelNum; }
  173. }
  174. bool mbDisposed = false;
  175. private LevelItem[] mLevelItems = null;
  176. private LevelItem mCurrentLevelItem = null;
  177. public LevelItem[] LevelItems
  178. {
  179. get
  180. {
  181. return mLevelItems == null ? new LevelItem[0]: mLevelItems;
  182. }
  183. }
  184. public LevelItem CurrentLevelItem
  185. {
  186. get { return mCurrentLevelItem; }
  187. set { mCurrentLevelItem = value; }
  188. }
  189. #endregion
  190. public SceneItem(int id)
  191. {
  192. this.mMapId = id;
  193. ReadLevelFromConfig();
  194. }
  195. ///// <summary>
  196. ///// 获得下一关
  197. ///// </summary>
  198. ///// <param name="index"></param>
  199. ///// <returns></returns>
  200. //public LevelItem TryGetNextFightLevel(int levelId,out int index)
  201. //{
  202. // for (int i = 0; i < mLevelItems.Count; i++)
  203. // {
  204. // if (mLevelItems[i].LevelId == levelId)
  205. // {
  206. // index = i;
  207. // return mLevelItems[i];
  208. // }
  209. // }
  210. // index = 0;
  211. // return null;
  212. //}
  213. public int CompareTo(SceneItem other)
  214. {
  215. if (this.MapId < other.MapId)
  216. return -1;
  217. else if (this.MapId == other.MapId)
  218. return 0;
  219. else
  220. return 1;
  221. }
  222. public void Dispose()
  223. {
  224. if (mbDisposed)
  225. return;
  226. if (mLevelItems != null) {
  227. for (int i = 0; i < mLevelItems.Length; ++i) {
  228. if (mLevelItems [i] != null) {
  229. mLevelItems [i].Dispose ();
  230. mLevelItems [i] = null;
  231. }
  232. }
  233. mLevelItems = null;
  234. }
  235. mCurrentLevelItem = null;
  236. mbDisposed = true;
  237. }
  238. ////整个地图是否通过
  239. //public bool HasPassed
  240. //{
  241. // get
  242. // {
  243. // return LevelItems[LevelItems.Length - 1].HasPassed;
  244. // }
  245. //}
  246. public int GetLevelIndex(int id)
  247. {
  248. for (int i = 0; i < LevelItems.Length; i++)
  249. {
  250. if (LevelItems[i].LevelId == id)
  251. {
  252. return i;
  253. }
  254. }
  255. return 0;
  256. }
  257. //public LevelItem GetLevelByTurn(int leveId)
  258. //{
  259. // for (int i = 0; i < LevelItems.Length; i++)
  260. // {
  261. // if (LevelItems[i].LevelId == leveId)
  262. // {
  263. // return LevelItems[i];
  264. // }
  265. // }
  266. // return null;
  267. //}
  268. //public int GetCurLevelIndex()
  269. //{
  270. // int id = CurrentLevelItem.LevelId;
  271. // for (int i = 0; i < LevelItems.Length; i++)
  272. // {
  273. // if (LevelItems[i].LevelId == id)
  274. // {
  275. // return i;
  276. // }
  277. // }
  278. // return 0;
  279. //}
  280. public LevelItem GetLevelItem(int id)
  281. {
  282. LevelItem item = null;
  283. for (int i = 0, len = mLevelItems.Length; i < len; ++i)
  284. {
  285. if (mLevelItems[i] != null && mLevelItems[i].LevelId == id)
  286. {
  287. item = mLevelItems[i];
  288. break;
  289. }
  290. }
  291. return item;
  292. }
  293. ////判断是否为最后一关
  294. //public bool IsLastLevel(int levelId)
  295. //{
  296. // return mLevelItems[mLevelItems.Count - 1].LevelId == levelId;
  297. //}
  298. void ReadLevelFromConfig()
  299. {
  300. List<LevelItem> levelList = new List<LevelItem>();
  301. Dictionary<string, string> dic = ConfigMgr.Instance.getLine(MapId,Config.MapCfgName);
  302. if (dic != null)
  303. {
  304. int levelId = 1;
  305. while (ConfigUtil.HasLevel(this.MapId, levelId))
  306. {
  307. LevelItem li = new LevelItem(this.MapId, levelId);
  308. levelList.Add(li);
  309. levelId++;
  310. }
  311. mLevelNum = levelList.Count;
  312. }
  313. mLevelItems = levelList.ToArray();
  314. }
  315. }