ManaAchieve.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.Events;
  4. using System;
  5. using System.Xml;
  6. using System.Text;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using Object = UnityEngine.Object;
  10. public enum AchieveType
  11. {
  12. AD,
  13. Skill,
  14. Sign,
  15. Share,
  16. Flower,
  17. Person,
  18. Garden,
  19. ElfLevel,
  20. TotalCoin,
  21. MiniGame,
  22. FlowerCoin,
  23. CurrentCoin,
  24. }
  25. public class Achieve
  26. {
  27. public bool Regist
  28. {
  29. get { return _Regist; }
  30. set
  31. {
  32. _Regist = value;
  33. if (_Regist)
  34. {
  35. AchieveItem = ManaReso.GetAchieveItem();
  36. RegistValue();
  37. }
  38. }
  39. }
  40. public string ID
  41. {
  42. get
  43. {
  44. return "Achieve" + _ID;
  45. }
  46. }
  47. public string Desc
  48. {
  49. get
  50. {
  51. return Language.GetStr("AchieveDescription", ID);
  52. }
  53. }
  54. public string Name
  55. {
  56. get
  57. {
  58. return Language.GetStr("AchieveName", ID);
  59. }
  60. }
  61. public List<Achieve> PostAchieveList
  62. {
  63. get
  64. {
  65. if (_PostAchieveList == null)
  66. {
  67. _PostAchieveList = new List<Achieve>();
  68. }
  69. return _PostAchieveList;
  70. }
  71. set { _PostAchieveList = value; }
  72. }
  73. public int _ID;
  74. public bool _Regist;
  75. public List<Achieve> _PostAchieveList;
  76. public int Index;
  77. public int Parent;
  78. public bool Valid;
  79. public bool Finish;
  80. public bool Delete;
  81. public float Person;
  82. public float CoinPerson;
  83. public float DiamondOnce;
  84. public string Icon;
  85. public double Value;
  86. public AchieveType Type;
  87. public Text Tit;
  88. public Text Lab;
  89. public Text BtnLab;
  90. public Slider Slider;
  91. public Image Image;
  92. public Button Button;
  93. public Transform AchieveItem;
  94. public Achieve(XmlAttributeCollection attribute)
  95. {
  96. Valid = true;
  97. Icon = attribute[11].Value;
  98. Type = TypeParse(attribute[4].Value);
  99. Value = double.Parse(attribute[5].Value);
  100. Delete = Convert.ToBoolean(int.Parse(attribute[7].Value));
  101. Parent = ParentParse(attribute[6].Value);
  102. _ID = int.Parse(attribute[0].Value);
  103. Index = int.Parse(attribute[1].Value);
  104. Person = AwardParse(attribute[10].Value);
  105. CoinPerson = AwardParse(attribute[9].Value);
  106. DiamondOnce = AwardParse(attribute[8].Value);
  107. ManaAchieve.AchieveDic.Add(_ID, this);
  108. if (Parent != -1)
  109. {
  110. ManaAchieve.AchieveDic[Parent].PostAchieveList.Add(this);
  111. }
  112. }
  113. public void GetAward()
  114. {
  115. Valid = false;
  116. ManaAchieve.DeleDic[Type] = null;
  117. ManaData.Diamond += DiamondOnce;
  118. ManaData.SkillPerson += Person;
  119. ManaData.SkillCoinPerson += CoinPerson;
  120. ManaDebug.Log(string.Format("获得钻石<color=red>{0}</color> 参观人次+<color=red>{1}</color> 每人次金币+<color=red>{2}</color>", DiamondOnce, Person, CoinPerson));
  121. if (Delete)
  122. {
  123. ManaReso.Save(AchieveItem);
  124. if (PostAchieveList.Count > 0)
  125. {
  126. PostAchieveList[0].Regist = true;
  127. PostAchieveList.RemoveAt(0);
  128. }
  129. }
  130. else
  131. {
  132. UpdateStatus();
  133. }
  134. }
  135. public void RegistValue()
  136. {
  137. Dictionary<string, Transform> dic = new Dictionary<string, Transform>();
  138. Auxiliary.CompileDic(AchieveItem, dic);
  139. Tit = dic["Tit"].GetComponent<Text>();
  140. Lab = dic["Lab"].GetComponent<Text>();
  141. Slider = dic["Slider"].GetComponent<Slider>();
  142. Image = dic["Icon"].GetComponent<Image>();
  143. Button = dic["Btn"].GetComponent<Button>();
  144. BtnLab = dic["BtnLab"].GetComponent<Text>();
  145. ManaText.Add(Tit, new LanStr("AchieveName", ID));
  146. ManaText.Add(Lab, new LanStr("AchieveDescription", ID));
  147. Image.sprite = ManaReso.Load<Sprite>(Icon, Folder.UI);
  148. Button.onClick.RemoveAllListeners();
  149. Button.onClick.AddListener(GetAward);
  150. AchieveItem.SetSiblingIndex(Index - 1);
  151. UpdateValue();
  152. UpdateStatus();
  153. ManaAchieve.DeleDic[Type] += UpdateValue;
  154. }
  155. public void UpdateValue()
  156. {
  157. double value;
  158. if (Type == AchieveType.AD)
  159. {
  160. value = ManaData.AD;
  161. }
  162. else if (Type == AchieveType.Skill)
  163. {
  164. value = ManaData.Skill;
  165. }
  166. else if (Type == AchieveType.Sign)
  167. {
  168. value = ManaData.Sign;
  169. }
  170. else if (Type == AchieveType.Share)
  171. {
  172. value = ManaData.Share;
  173. }
  174. else if (Type == AchieveType.Flower)
  175. {
  176. value = ManaGarden.MyFlower;
  177. }
  178. else if (Type == AchieveType.Person)
  179. {
  180. value = ManaData.Person;
  181. }
  182. else if (Type == AchieveType.ElfLevel)
  183. {
  184. value = ManaData.ElfLevel;
  185. }
  186. else if (Type == AchieveType.TotalCoin)
  187. {
  188. value = ManaData.TotalCoin;
  189. }
  190. else if (Type == AchieveType.MiniGame)
  191. {
  192. value = ManaData.MiniGame;
  193. }
  194. else if (Type == AchieveType.FlowerCoin)
  195. {
  196. value = ManaData.FlowerCoin;
  197. }
  198. else if (Type == AchieveType.CurrentCoin)
  199. {
  200. value = ManaData.Coin;
  201. }
  202. else if (Type == AchieveType.Garden)
  203. {
  204. value = ManaData.Level;
  205. }
  206. else
  207. {
  208. throw new Exception();
  209. }
  210. Slider.value = (float)(value / Value);
  211. if (value >= Value)
  212. {
  213. Finish = true;
  214. }
  215. }
  216. public void UpdateValue(double value)
  217. {
  218. if (Valid == false)
  219. {
  220. return;
  221. }
  222. Slider.value = (float)(value/Value);
  223. if (value >= Value)
  224. {
  225. Finish = true;
  226. UpdateStatus();
  227. }
  228. }
  229. public void UpdateStatus()
  230. {
  231. if (Finish == false)
  232. {
  233. StatusProcess();
  234. }
  235. else
  236. {
  237. if (Valid)
  238. {
  239. StatusAvailible();
  240. }
  241. else
  242. {
  243. StausComplete();
  244. }
  245. }
  246. }
  247. public void StatusProcess()
  248. {
  249. List<object> objList = new List<object>();
  250. objList.Add(new LanStr("Object", "AchieveItem_BtnLab0"));
  251. objList.Add("\n");
  252. if (Math.Abs(DiamondOnce) > 0.0005f)
  253. {
  254. objList.Add("<(钻石)>" + DiamondOnce.ToString("0"));
  255. }
  256. if (Math.Abs(CoinPerson) > 0.0005f)
  257. {
  258. objList.Add(new LanStr("Common", "CoinPerson"));
  259. objList.Add("+");
  260. objList.Add(CoinPerson.ToString("0") + " ");
  261. }
  262. if (Math.Abs(Person) > 0.0005f)
  263. {
  264. objList.Add(new LanStr("Common", "Person"));
  265. objList.Add("+");
  266. objList.Add(Person.ToString("0") + " ");
  267. }
  268. Button.interactable = false;
  269. Button.image.material = ManaReso.Load<Material>("GrayMat", Folder.Shader);
  270. ManaText.Add(BtnLab, objList.ToArray());
  271. }
  272. public void StatusAvailible()
  273. {
  274. List<object> objList = new List<object>();
  275. objList.Add(new LanStr("Object", "AchieveItem_BtnLab1"));
  276. objList.Add("\n");
  277. if (Math.Abs(DiamondOnce) > 0.0005f)
  278. {
  279. objList.Add("<(钻石)>" + DiamondOnce.ToString("0"));
  280. }
  281. if (Math.Abs(CoinPerson) > 0.0005f)
  282. {
  283. objList.Add(new LanStr("Common", "CoinPerson"));
  284. objList.Add("+");
  285. objList.Add(CoinPerson.ToString("0") + " ");
  286. }
  287. if (Math.Abs(Person) > 0.0005f)
  288. {
  289. objList.Add(new LanStr("Common", "Person"));
  290. objList.Add("+");
  291. objList.Add(Person.ToString("0") + " ");
  292. }
  293. Button.interactable = true;
  294. Button.image.material = null;
  295. ManaText.Add(BtnLab, objList.ToArray());
  296. }
  297. public void StausComplete()
  298. {
  299. Button.interactable = false;
  300. Button.image.material = null;
  301. ManaText.Add(BtnLab, new LanStr("Object", "AchieveItem_BtnLab2"));
  302. }
  303. public int ParentParse(string str)
  304. {
  305. if (string.IsNullOrEmpty(str))
  306. {
  307. return -1;
  308. }
  309. else
  310. {
  311. return int.Parse(str);
  312. }
  313. }
  314. public float AwardParse(string str)
  315. {
  316. if (string.IsNullOrEmpty(str))
  317. {
  318. return 0;
  319. }
  320. else
  321. {
  322. return float.Parse(str);
  323. }
  324. }
  325. public AchieveType TypeParse(string str)
  326. {
  327. int integer = int.Parse(str);
  328. if (integer == 1)
  329. {
  330. return AchieveType.Garden;
  331. }
  332. else if (integer == 2)
  333. {
  334. return AchieveType.CurrentCoin;
  335. }
  336. else if (integer == 3)
  337. {
  338. return AchieveType.TotalCoin;
  339. }
  340. else if (integer == 4)
  341. {
  342. return AchieveType.ElfLevel;
  343. }
  344. else if (integer == 5)
  345. {
  346. return AchieveType.Flower;
  347. }
  348. else if (integer == 6)
  349. {
  350. return AchieveType.Person;
  351. }
  352. else if (integer == 7)
  353. {
  354. return AchieveType.Skill;
  355. }
  356. else if (integer == 8)
  357. {
  358. return AchieveType.AD;
  359. }
  360. else if (integer == 9)
  361. {
  362. return AchieveType.Sign;
  363. }
  364. else if (integer == 10)
  365. {
  366. return AchieveType.Share;
  367. }
  368. else if (integer == 11)
  369. {
  370. return AchieveType.MiniGame;
  371. }
  372. else if (integer == 12)
  373. {
  374. return AchieveType.FlowerCoin;
  375. }
  376. else
  377. {
  378. throw new Exception();
  379. }
  380. }
  381. }
  382. public class ManaAchieve : Regist
  383. {
  384. #region 变量
  385. public static Dictionary<int, Achieve> AchieveDic
  386. {
  387. get
  388. {
  389. if (_AchieveDic == null)
  390. {
  391. _AchieveDic = new Dictionary<int, Achieve>();
  392. }
  393. return _AchieveDic;
  394. }
  395. set { _AchieveDic = value; }
  396. }
  397. public static Dictionary<AchieveType, UnityAction<double>> DeleDic
  398. {
  399. get
  400. {
  401. if (_DeleDic == null)
  402. {
  403. _DeleDic = new Dictionary<AchieveType, UnityAction<double>>();
  404. _DeleDic.Add(AchieveType.AD, AD);
  405. _DeleDic.Add(AchieveType.Skill, Skill);
  406. _DeleDic.Add(AchieveType.Sign, Sign);
  407. _DeleDic.Add(AchieveType.Share, Share);
  408. _DeleDic.Add(AchieveType.Flower, Flower);
  409. _DeleDic.Add(AchieveType.Person, Person);
  410. _DeleDic.Add(AchieveType.ElfLevel, ElfLevel);
  411. _DeleDic.Add(AchieveType.TotalCoin, TotalCoin);
  412. _DeleDic.Add(AchieveType.MiniGame, MiniGame);
  413. _DeleDic.Add(AchieveType.FlowerCoin, FlowerCoin);
  414. _DeleDic.Add(AchieveType.CurrentCoin, CurrentCoin);
  415. _DeleDic.Add(AchieveType.Garden, Garden);
  416. }
  417. return _DeleDic;
  418. }
  419. set { _DeleDic = value; }
  420. }
  421. public static Dictionary<int, Achieve> _AchieveDic;
  422. public static Dictionary<AchieveType, UnityAction<double>> _DeleDic;
  423. public static UnityAction<double> AD;
  424. public static UnityAction<double> Skill;
  425. public static UnityAction<double> Sign;
  426. public static UnityAction<double> Share;
  427. public static UnityAction<double> Flower;
  428. public static UnityAction<double> Person;
  429. public static UnityAction<double> Garden;
  430. public static UnityAction<double> ElfLevel;
  431. public static UnityAction<double> TotalCoin;
  432. public static UnityAction<double> MiniGame;
  433. public static UnityAction<double> FlowerCoin;
  434. public static UnityAction<double> CurrentCoin;
  435. #endregion
  436. public override void Instantiate()
  437. {
  438. List<XmlAttributeCollection> attributeList = Data.GetAchieveConfig();
  439. for (int i = 0; i < attributeList.Count; i++)
  440. {
  441. new Achieve(attributeList[i]);
  442. }
  443. List<int> achieveList = Data.GetAchieveList();
  444. for (int i = 0; i < achieveList.Count; i++)
  445. {
  446. AchieveDic[achieveList[i]].Valid = false;
  447. AchieveDic[achieveList[i]].Finish = true;
  448. }
  449. foreach (var kv in AchieveDic)
  450. {
  451. if (kv.Value.Valid)
  452. {
  453. if (kv.Value.Parent == -1 || !AchieveDic[kv.Value.Parent].Valid)
  454. {
  455. kv.Value.Regist = true;
  456. }
  457. }
  458. else
  459. {
  460. if (kv.Value.Delete == false)
  461. {
  462. kv.Value.Regist = true;
  463. kv.Value.Slider.value = 1;
  464. }
  465. }
  466. }
  467. }
  468. public static void UpdateStatus(AchieveType type, double value)
  469. {
  470. UnityAction<double> action = DeleDic[type];
  471. if (action != null)
  472. {
  473. action.Invoke(value);
  474. }
  475. }
  476. }