ManaAchieve.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  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. TotalPerson,
  13. ElfLevel,
  14. GardenLevel,
  15. AdAmt,
  16. SkillAmt,
  17. SignAmt,
  18. ShareAmt,
  19. FlowerAmt,
  20. MiniGameAmt,
  21. TotalCoin,
  22. FlowerCoin,
  23. CurrentCoin,
  24. }
  25. public class Achieve
  26. {
  27. #region 变量
  28. public string ID
  29. {
  30. get
  31. {
  32. return "Achieve" + ID_;
  33. }
  34. }
  35. public string Desc
  36. {
  37. get
  38. {
  39. return Language.GetStr("AchieveDesc", ID);
  40. }
  41. }
  42. public string Name
  43. {
  44. get
  45. {
  46. return Language.GetStr("AchieveName", ID);
  47. }
  48. }
  49. public Sprite Icon
  50. {
  51. get { return ManaReso.Load<Sprite>(Icon_, Folder.UI); }
  52. }
  53. public int ID_;
  54. public bool Available = true;
  55. public string Icon_;
  56. public int Index;
  57. public int Parent;
  58. public bool Delete;
  59. public float Person;
  60. public float CoinPerson;
  61. public float DiamondOnce;
  62. public double Value;
  63. public AchieveType Type;
  64. public List<Achieve> PostAchieveList = new List<Achieve>();
  65. public Text Tit;
  66. public Text Lab;
  67. public Text BtnLab;
  68. public Slider Slider;
  69. public Image Image;
  70. public Button Button;
  71. public Transform AchieveItem;
  72. #endregion
  73. public Achieve(XmlAttributeCollection attribute)
  74. {
  75. Icon_ = attribute[11].Value;
  76. Type = TypeParse(attribute[4].Value);
  77. Delete = Auxiliary.BoolParse(attribute[7].Value, false);
  78. Parent = Auxiliary.IntParse(attribute[6].Value, -1);
  79. ID_ = int.Parse(attribute[0].Value);
  80. Index = int.Parse(attribute[1].Value);
  81. Value = double.Parse(attribute[5].Value);
  82. Person = Auxiliary.FloatParse(attribute[10].Value, 0);
  83. CoinPerson = Auxiliary.FloatParse(attribute[9].Value, 0);
  84. DiamondOnce = Auxiliary.FloatParse(attribute[8].Value, 0);
  85. ManaAchieve.AchieveDic.Add(ID_, this);
  86. if (Parent != -1)
  87. {
  88. ManaAchieve.AchieveDic[Parent].PostAchieveList.Add(this);
  89. }
  90. }
  91. public void GetAward()
  92. {
  93. ManaDebug.Log(string.Format("获得钻石<color=red>{0}</color> 参观人次+<color=red>{1}</color> 每人次金币+<color=red>{2}</color>", DiamondOnce, Person, CoinPerson));
  94. ManaData.Diamond += DiamondOnce;
  95. ManaData.SkillPerson += Person;
  96. ManaData.SkillCoinPerson += CoinPerson;
  97. Available = false;
  98. ManaAchieve.DeleDic[Type] -= UpdateValue;
  99. if (Delete)
  100. {
  101. ManaReso.Save(AchieveItem);
  102. if (PostAchieveList.Count > 0)
  103. {
  104. PostAchieveList[0].Regist();
  105. }
  106. }
  107. else
  108. {
  109. ToComplete();
  110. }
  111. }
  112. public void Regist()
  113. {
  114. AchieveItem = ManaReso.GetAchieveItem();
  115. Dictionary<string, Transform> dic = new Dictionary<string, Transform>();
  116. Auxiliary.CompileDic(AchieveItem, dic);
  117. Tit = dic["Tit"].GetComponent<Text>();
  118. Lab = dic["Lab"].GetComponent<Text>();
  119. Slider = dic["Slider"].GetComponent<Slider>();
  120. Image = dic["Icon"].GetComponent<Image>();
  121. Button = dic["Btn"].GetComponent<Button>();
  122. BtnLab = dic["BtnLab"].GetComponent<Text>();
  123. ManaLan.Add(Tit, new LanStr("AchieveName", ID));
  124. ManaLan.Add(Lab, new LanStr("AchieveDesc", ID));
  125. Image.sprite = Icon;
  126. AchieveItem.SetSiblingIndex(Index - 1);
  127. Button.onClick.RemoveAllListeners();
  128. Button.onClick.AddListener(GetAward);
  129. if (Available)
  130. {
  131. UpdateValue();
  132. ManaAchieve.DeleDic[Type] += UpdateValue;
  133. }
  134. else
  135. {
  136. ToComplete();
  137. }
  138. }
  139. public void UpdateValue()
  140. {
  141. double value;
  142. if (Type == AchieveType.AdAmt)
  143. {
  144. value = ManaData.AD;
  145. }
  146. else if (Type == AchieveType.SkillAmt)
  147. {
  148. value = ManaData.Skill;
  149. }
  150. else if (Type == AchieveType.SignAmt)
  151. {
  152. value = ManaData.SignAmt;
  153. }
  154. else if (Type == AchieveType.ShareAmt)
  155. {
  156. value = ManaData.Share;
  157. }
  158. else if (Type == AchieveType.FlowerAmt)
  159. {
  160. value = ManaGarden.MyFlower;
  161. }
  162. else if (Type == AchieveType.TotalPerson)
  163. {
  164. value = ManaData.TotalPerson;
  165. }
  166. else if (Type == AchieveType.ElfLevel)
  167. {
  168. value = ManaData.Elf;
  169. }
  170. else if (Type == AchieveType.TotalCoin)
  171. {
  172. value = ManaData.TotalCoin;
  173. }
  174. else if (Type == AchieveType.MiniGameAmt)
  175. {
  176. value = ManaData.MiniGameAmt;
  177. }
  178. else if (Type == AchieveType.FlowerCoin)
  179. {
  180. value = ManaData.FlowerCoin;
  181. }
  182. else if (Type == AchieveType.CurrentCoin)
  183. {
  184. value = ManaData.Coin;
  185. }
  186. else if (Type == AchieveType.GardenLevel)
  187. {
  188. value = ManaData.Level;
  189. }
  190. else
  191. {
  192. throw new Exception();
  193. }
  194. UpdateValue(value);
  195. }
  196. public void UpdateValue(double value)
  197. {
  198. Slider.value = (float)(value / Value);
  199. if (value >= Value)
  200. {
  201. ToAvailible();
  202. }
  203. else
  204. {
  205. ToProcess(value);
  206. }
  207. }
  208. public void ToProcess(double value)
  209. {
  210. List<object> objList = new List<object>();
  211. objList.Add(new LanStr("Object", "AchieveItem_BtnLab0"));
  212. objList.Add("\n");
  213. if (Math.Abs(DiamondOnce) > 0.0005f)
  214. {
  215. objList.Add("<(钻石)>" + DiamondOnce.ToString("0"));
  216. }
  217. if (Math.Abs(CoinPerson) > 0.0005f)
  218. {
  219. objList.Add(new LanStr("Common", "CoinPerson"));
  220. objList.Add("+");
  221. objList.Add(CoinPerson.ToString("0") + " ");
  222. }
  223. if (Math.Abs(Person) > 0.0005f)
  224. {
  225. objList.Add(new LanStr("Common", "Person"));
  226. objList.Add("+");
  227. objList.Add(Person.ToString("0") + " ");
  228. }
  229. Button.image.material = ManaReso.Load<Material>("GrayMat", Folder.Shader);
  230. Button.interactable = false;
  231. ManaLan.Add(BtnLab, objList.ToArray());
  232. }
  233. public void ToAvailible()
  234. {
  235. List<object> objList = new List<object>();
  236. objList.Add(new LanStr("Object", "AchieveItem_BtnLab1"));
  237. objList.Add("\n");
  238. if (Math.Abs(DiamondOnce) > 0.0005f)
  239. {
  240. objList.Add("<(钻石)>" + DiamondOnce.ToString("0"));
  241. }
  242. if (Math.Abs(CoinPerson) > 0.0005f)
  243. {
  244. objList.Add(new LanStr("Common", "CoinPerson"));
  245. objList.Add("+");
  246. objList.Add(CoinPerson.ToString("0") + " ");
  247. }
  248. if (Math.Abs(Person) > 0.0005f)
  249. {
  250. objList.Add(new LanStr("Common", "Person"));
  251. objList.Add("+");
  252. objList.Add(Person.ToString("0") + " ");
  253. }
  254. Button.image.material = null;
  255. Button.interactable = true;
  256. ManaLan.Add(BtnLab, objList.ToArray());
  257. }
  258. public void ToComplete()
  259. {
  260. Slider.value = 1;
  261. Button.image.material = null;
  262. Button.interactable = false;
  263. ManaLan.Add(BtnLab, new LanStr("Object", "AchieveItem_BtnLab2"));
  264. }
  265. public AchieveType TypeParse(string str)
  266. {
  267. int integer = int.Parse(str);
  268. if (integer == 1)
  269. {
  270. return AchieveType.GardenLevel;
  271. }
  272. else if (integer == 2)
  273. {
  274. return AchieveType.CurrentCoin;
  275. }
  276. else if (integer == 3)
  277. {
  278. return AchieveType.TotalCoin;
  279. }
  280. else if (integer == 4)
  281. {
  282. return AchieveType.ElfLevel;
  283. }
  284. else if (integer == 5)
  285. {
  286. return AchieveType.FlowerAmt;
  287. }
  288. else if (integer == 6)
  289. {
  290. return AchieveType.TotalPerson;
  291. }
  292. else if (integer == 7)
  293. {
  294. return AchieveType.SkillAmt;
  295. }
  296. else if (integer == 8)
  297. {
  298. return AchieveType.AdAmt;
  299. }
  300. else if (integer == 9)
  301. {
  302. return AchieveType.SignAmt;
  303. }
  304. else if (integer == 10)
  305. {
  306. return AchieveType.ShareAmt;
  307. }
  308. else if (integer == 11)
  309. {
  310. return AchieveType.MiniGameAmt;
  311. }
  312. else if (integer == 12)
  313. {
  314. return AchieveType.FlowerCoin;
  315. }
  316. else
  317. {
  318. throw new Exception();
  319. }
  320. }
  321. }
  322. public class ManaAchieve : Regist
  323. {
  324. #region 变量
  325. public static UnityAction<double> Elf;
  326. public static UnityAction<double> AD;
  327. public static UnityAction<double> Skill;
  328. public static UnityAction<double> Sign;
  329. public static UnityAction<double> Share;
  330. public static UnityAction<double> Flower;
  331. public static UnityAction<double> Garden;
  332. public static UnityAction<double> TotalCoin;
  333. public static UnityAction<double> MiniGame;
  334. public static UnityAction<double> FlowerCoin;
  335. public static UnityAction<double> TotalPerson;
  336. public static UnityAction<double> CurrentCoin;
  337. public static Dictionary<int, Achieve> AchieveDic = new Dictionary<int, Achieve>();
  338. public static Dictionary<AchieveType, UnityAction<double>> DeleDic = new Dictionary<AchieveType, UnityAction<double>>();
  339. #endregion
  340. public override void RegistValueA()
  341. {
  342. DeleDic.Add(AchieveType.ElfLevel, Elf);
  343. DeleDic.Add(AchieveType.AdAmt, AD);
  344. DeleDic.Add(AchieveType.SkillAmt, Skill);
  345. DeleDic.Add(AchieveType.SignAmt, Sign);
  346. DeleDic.Add(AchieveType.ShareAmt, Share);
  347. DeleDic.Add(AchieveType.FlowerAmt, Flower);
  348. DeleDic.Add(AchieveType.TotalPerson, TotalPerson);
  349. DeleDic.Add(AchieveType.GardenLevel, Garden);
  350. DeleDic.Add(AchieveType.TotalCoin, TotalCoin);
  351. DeleDic.Add(AchieveType.MiniGameAmt, MiniGame);
  352. DeleDic.Add(AchieveType.FlowerCoin, FlowerCoin);
  353. DeleDic.Add(AchieveType.CurrentCoin, CurrentCoin);
  354. List<XmlAttributeCollection> attributeList = Data.GetAchieveConfig();
  355. for (int i = 0; i < attributeList.Count; i++)
  356. {
  357. new Achieve(attributeList[i]);
  358. }
  359. List<int> achieveList = Data.GetAchieveList();
  360. for (int i = 0; i < achieveList.Count; i++)
  361. {
  362. AchieveDic[achieveList[i]].Available = false;
  363. }
  364. foreach (var kv in AchieveDic)
  365. {
  366. if (kv.Value.Available)
  367. {
  368. if (kv.Value.Parent == -1 || !AchieveDic[kv.Value.Parent].Available)
  369. {
  370. kv.Value.Regist();
  371. }
  372. }
  373. else
  374. {
  375. if (kv.Value.Delete == false)
  376. {
  377. kv.Value.Regist();
  378. }
  379. }
  380. }
  381. }
  382. public static void UpdateStatus(AchieveType type, double value)
  383. {
  384. DeleDic[type].SafeInvoke(value);
  385. }
  386. }