ManaReso.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.Events;
  4. using System;
  5. using System.Collections;
  6. using System.Linq.Expressions;
  7. using System.ComponentModel;
  8. using System.Collections.Generic;
  9. using Object = UnityEngine.Object;
  10. using Component = UnityEngine.Component;
  11. public enum Folder
  12. {
  13. Skill,
  14. Object,
  15. Shader,
  16. Garden,
  17. SpriteUI,
  18. PrefabUI,
  19. Character,
  20. }
  21. public enum ObjType
  22. {
  23. Null,
  24. Flower,
  25. HudText,
  26. FlowerItem,
  27. }
  28. public class ManaReso : MonoBehaviour
  29. {
  30. #region 变量
  31. public static Dictionary<string, Object> ObjDic;
  32. public static Dictionary<string, Transform> TraDic;
  33. public static Dictionary<ObjType, List<Transform>> ObjectPool;
  34. #endregion
  35. private void Awake()
  36. {
  37. TraDic = new Dictionary<string, Transform>();
  38. ObjDic = new Dictionary<string, Object>();
  39. ObjectPool = new Dictionary<ObjType, List<Transform>>();
  40. Transform objPool = new GameObject("ObjPool").transform;
  41. objPool.parent = transform;
  42. objPool.SetActive(false);
  43. TraDic.Add(objPool.name, objPool);
  44. }
  45. public static T Load<T>(string goName, Folder folder, ObjType objType = ObjType.Null) where T : Object
  46. {
  47. Object obj;
  48. if (ObjDic.TryGetValue(goName, out obj))
  49. {
  50. return (T)obj;
  51. }
  52. else
  53. {
  54. T t;
  55. if (folder == Folder.Skill)
  56. {
  57. t = Resources.Load<T>(@"Sprite\SpriteUI\Skill\" + goName);
  58. }
  59. else if (folder == Folder.Object)
  60. {
  61. t = Resources.Load<T>(@"Prefab\Object\" + goName);
  62. }
  63. else if (folder == Folder.Garden)
  64. {
  65. t = Resources.Load<T>(@"Sprite\Garden\" + goName);
  66. }
  67. else if (folder == Folder.SpriteUI)
  68. {
  69. t = Resources.Load<T>(@"Sprite\SpriteUI\" + goName);
  70. }
  71. else if (folder == Folder.Shader)
  72. {
  73. t = Resources.Load<T>(@"Shader\" + goName);
  74. }
  75. else if (folder == Folder.PrefabUI)
  76. {
  77. t = Resources.Load<T>(@"Prefab\PrefabUI\" + goName);
  78. }
  79. else if (folder == Folder.Character)
  80. {
  81. t = Resources.Load<T>(@"Sprite\Character\" + goName);
  82. }
  83. else
  84. {
  85. throw new Exception();
  86. }
  87. if (t == null)
  88. {
  89. throw new Exception(goName);
  90. }
  91. ObjDic.Add(goName, t);
  92. if (objType != ObjType.Null)
  93. {
  94. ObjectPool.Add(objType, new List<Transform>());
  95. }
  96. return t;
  97. }
  98. }
  99. public static Transform Get(string goName, Folder folder, bool compile, Transform par, Vector3 pos, ObjType objType = ObjType.Null)
  100. {
  101. Transform tra = Get(objType);
  102. if (tra != null)
  103. {
  104. tra.SetParent(par);
  105. tra.position = pos;
  106. return tra;
  107. }
  108. else
  109. {
  110. GameObject go = Load<GameObject>(goName, folder, objType);
  111. go = Instantiate(go, pos, Quaternion.identity, par);
  112. go.name = go.name.Replace("(Clone)", "");
  113. if (compile)
  114. {
  115. Auxiliary.CompileDic(go.transform, TraDic);
  116. }
  117. return go.transform;
  118. }
  119. }
  120. public static Transform Get(string goName, Folder folder, bool compile, Transform par, bool worldSpace, ObjType objType = ObjType.Null)
  121. {
  122. Transform tra = Get(objType);
  123. if (tra == null)
  124. {
  125. GameObject go = Load<GameObject>(goName, folder, objType);
  126. go = Instantiate(go, par, worldSpace);
  127. go.name = go.name.Replace("(Clone)", "");
  128. if (compile)
  129. {
  130. Auxiliary.CompileDic(go.transform, TraDic);
  131. }
  132. return go.transform;
  133. }
  134. else
  135. {
  136. tra.SetParent(par);
  137. return tra;
  138. }
  139. }
  140. public static Flower GetFlower(int id, bool collider, Transform parTra)
  141. {
  142. Transform tra = Get("Flower", Folder.Object, false, parTra, false, ObjType.Flower);
  143. Flower flower = tra.GetComponent<Flower>();
  144. if (flower == null)
  145. {
  146. flower = tra.AddComponent<Flower>();
  147. flower.ObjType = ObjType.Flower;
  148. flower.LocalPos = flower.transform.localPosition;
  149. }
  150. else
  151. {
  152. flower.transform.localPosition = flower.LocalPos;
  153. }
  154. flower.Id = id;
  155. flower.ParTra = parTra;
  156. flower.SetCollider(collider);
  157. return flower;
  158. }
  159. public static HudText GetHudText(string str, Color color, int size, Transform posTra, Transform parTra, bool scene)
  160. {
  161. Vector3 pos;
  162. if (scene)
  163. {
  164. pos = Camera.main.WorldToScreenPoint(posTra.position);
  165. }
  166. else
  167. {
  168. pos = posTra.position;
  169. }
  170. Transform tra = Get("HudText", Folder.PrefabUI, false, parTra, pos, ObjType.HudText);
  171. HudText hudText = tra.GetComponent<HudText>();
  172. if (hudText == null)
  173. {
  174. hudText = tra.AddComponent<HudText>();
  175. hudText.ObjType = ObjType.HudText;
  176. }
  177. hudText.Show(str, color, size);
  178. return hudText;
  179. }
  180. public static Transform GetSkillItem(SkillRoot skillRoot)
  181. {
  182. Transform tra;
  183. if (skillRoot.SkillTab == SkillTab.Elf)
  184. {
  185. tra = Get("SkillItem", Folder.PrefabUI, false, Get("Fd_Grid"), false);
  186. }
  187. else if (skillRoot.SkillTab == SkillTab.Store)
  188. {
  189. tra = Get("SkillItem", Folder.PrefabUI, false, Get("Fc_Grid"), false);
  190. }
  191. else if (skillRoot.SkillTab == SkillTab.Magic)
  192. {
  193. tra = Get("SkillItem", Folder.PrefabUI, false, Get("Fb_Grid"), false);
  194. }
  195. else if (skillRoot.SkillTab == SkillTab.Garden)
  196. {
  197. tra = Get("SkillItem", Folder.PrefabUI, false, Get("Fa_Grid"), false);
  198. }
  199. else
  200. {
  201. throw new Exception();
  202. }
  203. skillRoot.SkillItem = tra;
  204. return tra;
  205. }
  206. public static Transform GetFlowerItemH()
  207. {
  208. Transform tra = Get("FlowerItemH", Folder.PrefabUI, false, Get("H_Grid"), false, ObjType.FlowerItem);
  209. ObjRoot objRoot = tra.GetComponent<ObjRoot>();
  210. if (objRoot == null)
  211. {
  212. objRoot = tra.AddComponent<ObjRoot>();
  213. }
  214. objRoot.ObjType = ObjType.FlowerItem;
  215. return objRoot.transform;
  216. }
  217. #region TraDic
  218. public static T Get<T>(string goName)
  219. {
  220. Transform tra;
  221. if (TraDic.TryGetValue(goName, out tra))
  222. {
  223. T t = tra.GetComponent<T>();
  224. if (t == null)
  225. {
  226. throw new Exception();
  227. }
  228. return t;
  229. }
  230. else
  231. {
  232. throw new Exception(goName);
  233. }
  234. }
  235. public static Transform Get(string goName)
  236. {
  237. Transform tra;
  238. if (TraDic.TryGetValue(goName, out tra))
  239. {
  240. return tra;
  241. }
  242. else
  243. {
  244. throw new Exception(goName);
  245. }
  246. }
  247. #endregion
  248. #region ObjPool
  249. public static void Save<T>(T t) where T : Component
  250. {
  251. Transform tra = t.transform;
  252. ObjRoot objRoot = tra.GetComponent<ObjRoot>();
  253. if (objRoot == null)
  254. {
  255. throw new Exception();
  256. }
  257. List<Transform> traList;
  258. if (ObjectPool.TryGetValue(objRoot.ObjType, out traList))
  259. {
  260. if (traList.Contains(tra))
  261. {
  262. throw new Exception();
  263. }
  264. tra.SetActive(false);
  265. traList.Add(tra);
  266. tra.transform.SetParent(Get("ObjPool"));
  267. }
  268. else
  269. {
  270. throw new Exception();
  271. }
  272. }
  273. public static void Save(GameObject go)
  274. {
  275. ObjRoot objRoot = go.GetComponent<ObjRoot>();
  276. if (objRoot == null)
  277. {
  278. throw new Exception();
  279. }
  280. List<Transform> traList;
  281. if (ObjectPool.TryGetValue(objRoot.ObjType, out traList))
  282. {
  283. if (traList.Contains(go.transform))
  284. {
  285. throw new Exception();
  286. }
  287. go.SetActive(false);
  288. traList.Add(go.transform);
  289. go.transform.SetParent(Get("ObjPool"));
  290. }
  291. else
  292. {
  293. throw new Exception();
  294. }
  295. }
  296. public static void SaveUI<T>(T t) where T : Component
  297. {
  298. Transform tra = t.transform;
  299. ObjRoot objRoot = tra.GetComponent<ObjRoot>();
  300. if (objRoot == null)
  301. {
  302. throw new Exception();
  303. }
  304. List<Transform> traList;
  305. if (ObjectPool.TryGetValue(objRoot.ObjType, out traList))
  306. {
  307. if (traList.Contains(tra))
  308. {
  309. throw new Exception();
  310. }
  311. tra.SetActive(false);
  312. traList.Add(tra);
  313. tra.transform.SetParent(Get("J_ObjPool"));
  314. }
  315. else
  316. {
  317. throw new Exception();
  318. }
  319. }
  320. public static void SaveUI(GameObject go)
  321. {
  322. ObjRoot objRoot = go.GetComponent<ObjRoot>();
  323. if (objRoot == null)
  324. {
  325. throw new Exception();
  326. }
  327. List<Transform> traList;
  328. if (ObjectPool.TryGetValue(objRoot.ObjType, out traList))
  329. {
  330. if (traList.Contains(go.transform))
  331. {
  332. throw new Exception();
  333. }
  334. go.SetActive(false);
  335. traList.Add(go.transform);
  336. go.transform.SetParent(Get("J_ObjPool"));
  337. }
  338. else
  339. {
  340. throw new Exception();
  341. }
  342. }
  343. public static Transform Get(ObjType objType)
  344. {
  345. List<Transform> traList;
  346. if (ObjectPool.TryGetValue(objType, out traList))
  347. {
  348. if (traList.Count > 0)
  349. {
  350. Transform tra = traList[0];
  351. tra.SetActive(true);
  352. traList.RemoveAt(0);
  353. return tra.transform;
  354. }
  355. }
  356. return null;
  357. }
  358. #endregion
  359. #region ShortCut
  360. public static void SetText(string goName)
  361. {
  362. Text text = Get<Text>(goName);
  363. text.text = Language.GetStr("UI", goName);
  364. }
  365. public static void SetText(string goName, string str)
  366. {
  367. Text text = Get<Text>(goName);
  368. text.text = str;
  369. }
  370. public static void SetSprite(string goName, Sprite sprite)
  371. {
  372. Image image = Get<Image>(goName);
  373. image.sprite = sprite;
  374. }
  375. public static void SetActive(string goName, bool active)
  376. {
  377. Get(goName).SetActive(active);
  378. }
  379. public static void SetButtonEvent(string goName, params UnityAction[] onClicks)
  380. {
  381. Button button = Get<Button>(goName);
  382. button.onClick = new Button.ButtonClickedEvent();
  383. for (int i = 0; i < onClicks.Length; i++)
  384. {
  385. button.onClick.AddListener(onClicks[i]);
  386. }
  387. }
  388. public static void AddButtonEvent(string goName, params UnityAction[] onClicks)
  389. {
  390. Button button = Get<Button>(goName);
  391. for (int i = 0; i < onClicks.Length; i++)
  392. {
  393. button.onClick.AddListener(onClicks[i]);
  394. }
  395. }
  396. #endregion
  397. }