ManaAchieve.cs 13 KB

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