using LitJson; using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using System.Xml; using System.Collections; using System.Collections.Generic; public class ManaVisit { #region 变量 #region 配置 public static int Cost { get { return Cost_; } set { Cost_ = value; ManaReso.Get("C_CostLab").text = "<(金币)>" + Cost; } } public static int Cost_; public static int CoolTime; public static float FancyRate; public static float AwardRate; public static float CreateRate; public static string CostFml; public static string AwardMinFml; public static string AwardMaxFml; #endregion public static bool InVisit; public static bool Complete; public static bool LoadComplete; public static bool TweenComplete; public static string XmlStr; public static int Slot; public static int Level; public static int PageAmt; public static string Player; public static XmlNode Node; public static XmlDocument Document; public static bool OriginBird; public static bool OriginTree; public static bool OriginRainbow; public static List VisitPlantList; public static List OriginPlantList; public static List OriginElfList; #endregion public static void Initialize() { XmlAttributeCollection attribute = ManaData.GetVisitConfig(); CostFml = attribute[5].Value; Cost = Mathf.FloorToInt((float)Auxiliary.FmlParse(CostFml, "l", ManaCenter.Level.ToString())); AwardMinFml = attribute[2].Value; AwardMaxFml = attribute[3].Value; CoolTime = int.Parse(attribute[4].Value); FancyRate = float.Parse(attribute[7].Value); AwardRate = float.Parse(attribute[1].Value); CreateRate = float.Parse(attribute[6].Value); #region 倒计时 if (CoolTime != 0) { Text text = ManaReso.Get("C_VisitLab"); List delayList = new List(); List durationList = new List(); List pairList = new List(); List actionList = new List(); Vector3 v1 = new Vector3(0.75f, 0.75f, 0.75f); Vector3 v2 = new Vector3(0.4f, 0.4f, 0.4f); Vector3 v3 = new Vector3(0, 0, 0); for (int i = 0; i < CoolTime - 1; i++) { delayList.Add(0.5f); delayList.Add(0); } delayList.Add(0.5f); for (int i = 0; i < CoolTime; i++) { durationList.Add(0.25f); durationList.Add(0.25f); pairList.Add(new VecPair(v1, v2)); pairList.Add(new VecPair(v2, v3)); var tempInt = i; actionList.Add ( () => { text.text = (CoolTime - tempInt).ToString(); ManaAudio.PlayClip(Clip.BtnClip); } ); actionList.Add(null); } TweenRoot tween = ManaReso.Get("C_VisitLab").CreateStreamScale ( delayList, durationList, pairList, true, false, Curve.EaseOutQuad, false, actionList ); tween.OnForwardFinish += () => { ManaAudio.PlayClip(Clip.BubbleClip); }; } #endregion Complete = true; } public static void Exit() { ManaReso.Get("I_BlackMask").TweenForCG(); ManaReso.SetActive("C_Visit", true); ManaReso.SetActive("C_Coin", true); ManaReso.SetActive("C_Group1", true); ManaReso.SetActive("C_Group2", true); ManaReso.SetActive("C_Return", false); ManaReso.SetActive("C_Garden", false); ManaGarden.AwardLock = true; #region Garden ManaGarden.RetriveFlowerAll(); for (int i = 0; i < ManaGarden.PageList.Count; i++) { ManaReso.Save(ManaGarden.PageList[i]); } ManaGarden.PageList = new List(); Garden.CurPage = 0; ManaGarden.SlotList = new List(); ManaGarden.PageList = new List(); Garden.ResetPage(); for (int i = 0; i < ManaGarden.Slot / 7 + 2; i++) { ManaGarden.CreatePage(); } for (int i = 0; i < ManaGarden.SlotList.Count; i++) { if (i < ManaGarden.Slot) { ManaGarden.SlotList[i].Lock = true; ManaGarden.SlotList[i].Available = true; } else { ManaGarden.SlotList[i].Lock = false; ManaGarden.SlotList[i].Available = false; } } List> plantList = ManaData.GetPlantList(); for (int i = 0; i < plantList.Count; i++) { ManaGarden.PlantFlower(plantList[i].Key, plantList[i].Value); } #endregion #region Bird Tree Rainbow if (OriginBird) { ManaReso.Get("Bird0").GetTweenSr().InDestination = true; } else { ManaReso.Get("Bird0").GetTweenSr().InOrigin = true; } if (OriginTree) { ManaReso.Get("Tree1").GetTweenSr().InDestination = true; ManaReso.Get("Tree2").GetTweenSr().InDestination = true; } else { ManaReso.Get("Tree1").GetTweenSr().InOrigin = true; ManaReso.Get("Tree2").GetTweenSr().InOrigin = true; } if (OriginRainbow) { ManaReso.Get("Rainbow").GetTweenSr().InDestination = true; } else { ManaReso.Get("Rainbow").GetTweenSr().InOrigin = true; } #endregion #region Player ManaReso.Save(ManaPlayer.Player); ManaReso.TraDic.Remove("Player"); ManaPlayer.Instance.GetPlayer(); Garden.PlayerPos = new List(); Garden.Player = ManaReso.Get("Player"); Garden.PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos1"].position); Garden.PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos2"].position); #endregion ManaGarden.ElfList = new List(OriginElfList); InVisit = false; } public static void Enter() { if (!LoadComplete || !TweenComplete) { return; } ManaReso.Get("I_BlackMask").TweenForCG(); Document = new XmlDocument(); Document.LoadXml(XmlStr); Node = Document.SelectSingleNode("PlayerConfig"); Player = Node.SelectSingleNode("Player").Attributes[0].Value; ManaReso.SetActive("C_Coin", false); ManaReso.SetActive("C_Group1", false); ManaReso.SetActive("C_Group2", false); ManaReso.SetActive("C_Garden", true); if (!InVisit) { for (int i = 0; i < ManaGarden.StarList.Count; i++) { ManaReso.Save(ManaGarden.StarList[i]); } ManaGarden.StarList = new List(); } ManaReso.SetActive("C_Return", true); ManaGarden.AwardLock = false; #region Bird Tree Rainbow if (!InVisit) { if (ManaReso.Get("Bird0").gameObject.activeSelf) { OriginBird = true; } if (ManaReso.Get("Tree1").gameObject.activeSelf) { OriginTree = true; } if (ManaReso.Get("Rainbow").gameObject.activeSelf) { OriginRainbow = true; } } ManaReso.SetActive("Bird0", false); ManaReso.SetActive("Tree1", false); ManaReso.SetActive("Tree2", false); ManaReso.SetActive("Rainbow", false); #endregion #region Ability Slot = 1; if (!InVisit) { OriginElfList = new List(ManaGarden.ElfList); } ManaGarden.ElfList = new List(); List attributeList = ManaData.GetSkillList(Node); for (int i = 0; i < attributeList.Count; i++) { if (!attributeList[i][0].Value.Contains("Ability")) { continue; } if (attributeList[i][0].Value == "Ability1") { Level = int.Parse(attributeList[i][3].Value); ManaReso.SetText("C_GardenLab", Language.GetStr("UI", "C_GardenLab") + Level); continue; } if (int.Parse(attributeList[i][3].Value) == 0) { continue; } if (attributeList[i][0].Value == "Ability2") { ManaReso.Get("Rainbow").GetTweenSr().InDestination = true; } else if (attributeList[i][0].Value == "Ability3") { ManaReso.Get("Tree1").GetTweenSr().InDestination = true; ManaReso.Get("Tree2").GetTweenSr().InDestination = true; } else if (attributeList[i][0].Value == "Ability4") { ManaReso.Get("Bird0").GetTweenSr().InDestination = true; } else if (attributeList[i][0].Value == "Ability5") { ManaGarden.ElfList.Add(ObjType.BeeYellow); } else if (attributeList[i][0].Value == "Ability6") { Slot++; ManaGarden.ElfList.Add(ObjType.BeePurple); } else if (attributeList[i][0].Value == "Ability7") { Slot++; ManaGarden.ElfList.Add(ObjType.BeeBlue); } else if (attributeList[i][0].Value == "Ability8") { Slot++; ManaGarden.ElfList.Add(ObjType.BeeRed); } else if (attributeList[i][0].Value == "Ability9") { Slot++; ManaGarden.ElfList.Add(ObjType.BeeWhite); } else if (attributeList[i][0].Value == "Ability10") { Slot++; ManaGarden.ElfList.Add(ObjType.ButterflyYellow); } else if (attributeList[i][0].Value == "Ability11") { Slot++; ManaGarden.ElfList.Add(ObjType.ButterflyPurple); } else if (attributeList[i][0].Value == "Ability12") { Slot++; ManaGarden.ElfList.Add(ObjType.ButterflyBlue); } else if (attributeList[i][0].Value == "Ability13") { Slot++; ManaGarden.ElfList.Add(ObjType.ButterflyRed); } else if (attributeList[i][0].Value == "Ability14") { Slot++; ManaGarden.ElfList.Add(ObjType.ButterflyWhite); } } #endregion #region Garden if (!InVisit) { OriginPlantList = new List(ManaGarden.PlantList); ManaData.SavePlantList(); } ManaGarden.RetriveFlowerAll(); for (int i = 0; i < ManaGarden.PageList.Count; i++) { ManaReso.Save(ManaGarden.PageList[i]); } ManaGarden.PageList = new List(); Garden.CurPage = 0; ManaGarden.SlotList = new List(); ManaGarden.PageList = new List(); Garden.ResetPage(); for (int i = 0; i < Slot/7 + 2; i++) { ManaGarden.CreatePage(); } for (int i = 0; i < ManaGarden.SlotList.Count; i++) { if (i < Slot) { ManaGarden.SlotList[i].Lock = true; ManaGarden.SlotList[i].Available = true; } else { ManaGarden.SlotList[i].Lock = false; ManaGarden.SlotList[i].Available = false; } } List> plantList = ManaData.GetPlantList(Node); for (int i = 0; i < plantList.Count; i++) { ManaGarden.PlantFlower(plantList[i].Key, plantList[i].Value); } #endregion #region Player ManaReso.Save(ManaPlayer.Player); ManaReso.TraDic.Remove("Player"); ManaPlayer.Instance.GetPlayer(Player); Garden.PlayerPos = new List(); Garden.Player = ManaReso.Get("Player"); Garden.PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos1"].position); Garden.PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos2"].position); #endregion #region Award if (ManaTutorial.TutorialC || Random.Range(0f,1f) <= AwardRate) { if (ManaTutorial.TutorialC) { ManaTutorial.EndC(); } if (ManaGarden.PlantList.Count > 0) { ManaGarden.PlantList.Random().Flower.Award = true; } } #endregion InVisit = true; } public static void UpdateCost() { if (Complete) { Cost = Mathf.FloorToInt((float)Auxiliary.FmlParse(CostFml, "l", ManaCenter.Level.ToString())); } } public static void DataReverse() { if (InVisit) { VisitPlantList = new List(ManaGarden.PlantList); ManaGarden.PlantList = OriginPlantList; } } public static void DataRecover() { if (InVisit) { ManaGarden.PlantList = VisitPlantList; } } public static void GetArchive() { if (Random.Range(0f, 1f) <= CreateRate) { LoadComplete = true; XmlStr = WriteArchive(); Enter(); } else { ManaServer.RandomLoad ( (jsonData) => { LoadComplete = true; if (jsonData.Inst_Object.ContainsKey("l")) { XmlStr = jsonData["l"].ToString(); } else { LoadComplete = true; XmlStr = WriteArchive(); } Enter(); } ); } } public static string WriteArchive() { XmlDocument doc = new XmlDocument(); doc.LoadXml(ManaData.PlayerDoc.OuterXml); bool fancy; if (Random.Range(0f, 1f) < FancyRate) { fancy = true; } else { fancy = false; } int slot = 1; int newLevel = Random.Range(1, 300); XmlNodeList nodeList = doc.SelectSingleNode("PlayerConfig").SelectSingleNode("SkillList").ChildNodes; for (int i = 0; i < nodeList.Count; i++) { SkillType type = nodeList[i].Attributes[1].Value.ToEnum(); if (type == SkillType.Ability) { Ability ability = (Ability) ManaCenter.SkillDic[nodeList[i].Attributes[0].Value]; int unlockLevel = ability.UnlockLv; if (newLevel >= unlockLevel) { if (ability.ID_ >= 6) { slot++; } nodeList[i].Attributes[2].Value = "Upgrade"; nodeList[i].Attributes[3].Value = newLevel.ToString(); } else { nodeList[i].Attributes[2].Value = "Lock"; nodeList[i].Attributes[3].Value = "0"; } } } List flowerList = new List(); for (int i = 2; i < 28; i++) { flowerList.Add(i); } int slotIndex = 0; string plantList = ""; for (int i = 0; i < slot; i++) { if (fancy || Random.Range(0f, 1f) >= 0.35f) { int flowerID = slotIndex + 1; plantList += string.Format("{0},{1} ", flowerID, slotIndex); slotIndex++; } } plantList = plantList.TrimEnd(' '); doc.SelectSingleNode("PlayerConfig").SelectSingleNode("PlantList").Attributes[0].Value = plantList; float rate = Random.Range(0f, 1f); if (rate < 0.33f) { doc.SelectSingleNode("PlayerConfig").SelectSingleNode("Player").Attributes[0].Value = "PlayerPink"; } else if (rate < 0.66f) { doc.SelectSingleNode("PlayerConfig").SelectSingleNode("Player").Attributes[0].Value = "PlayerBlond"; } else { doc.SelectSingleNode("PlayerConfig").SelectSingleNode("Player").Attributes[0].Value = "PlayerBrown"; } return doc.OuterXml; } }