using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using UnityEngine.EventSystems; using System; using System.Xml; using System.Linq; using System.Collections; using System.Collections.Generic; using Random = UnityEngine.Random; public struct KV { public T1 Key; public T2 Value; public KV(T1 key, T2 value) { Key = key; Value = value; } } public class ManaGarden : Regist { #region 变量 public static int MyFlower { get { return _MyFlower; } set { _MyFlower = value; ManaAchieve.UpdateStatus(AchieveType.Flower, _MyFlower); ManaReso.SetText("F_FlowerLab", string.Format("{0}", MyFlower)); ManaReso.SetText("G_CollectLab1", string.Format("{0}/{1}", MyFlower, TotalFlower)); } } public static int MyFlowerSpec { get { return _MyFlowerSpec; } set { _MyFlowerSpec = value; MyFlower = _MyFlowerSpec + _MyFlowerRegu; } } public static int MyFlowerRegu { get { return _MyFlowerRegu; } set { _MyFlowerRegu = value; MyFlower = _MyFlowerSpec + _MyFlowerRegu; } } public static int TotalFlower { get { return _TotalFlower; } set { _TotalFlower = value; } } public static int TotalFlowerSpec { get { return _TotalFlowerSpec; } set { _TotalFlowerSpec = value; TotalFlower = _TotalFlowerSpec + _TotalFlowerRegu; } } public static int TotalFlowerRegu { get { return _TotalFlowerRegu; } set { _TotalFlowerRegu = value; TotalFlower = _TotalFlowerSpec + _TotalFlowerRegu; } } public static List AnimList { get { if (_AnimList == null) { _AnimList = new List(); } return _AnimList; } set { _AnimList = value; } } private static int _MyFlower; private static int _MyFlowerSpec; private static int _MyFlowerRegu; private static int _TotalFlower; private static int _TotalFlowerSpec; private static int _TotalFlowerRegu; private static List _AnimList; public static bool Award; public static bool AwardLock; public static float AnimTimer; public static float AwardTimer; public static Slot SeleSlot; public static FlowerInfo SeleFlowerInfo; public static List SlotList; public static List PlantList; public static List FlowerInfoList; #endregion public void FixedUpdate() { if (Initializer.Tutorial) { TutorialFixedUpdate(); } else { RegularFixedUpdate(); } } private void TutorialFixedUpdate() { } private void RegularFixedUpdate() { AnimThread(); AwardThread(); } public void AnimThread() { AnimTimer -= Time.fixedDeltaTime; if (AnimTimer < 0) { AnimTimer = Random.Range(0f, 30f); if (AnimList.Count > 0 && PlantList.Count > 0) { PlantList.Random().Flower.PlayAnim(AnimList.Random()); } } } public void AwardThread() { if (Award && !AwardLock) { AwardTimer -= Time.fixedDeltaTime; if (AwardTimer <= 0) { List spareList = new List(); for (int i = 0; i < PlantList.Count; i++) { if (PlantList[i].Flower.Award == false) { spareList.Add(PlantList[i].Flower); } } if (spareList.Count == 0) { return; } if (spareList.Count == 1) { Award = false; spareList[0].Award = true; AwardTimer = Random.Range(20, 60); } else { spareList.Random().Award = true; AwardTimer = Random.Range(20, 60); } } } } public override void Instantiate() { ManaReso.Get("Garden", Folder.Garden, true, transform, true).AddScript(); #region 生成FlowerItem PlantList = new List(); FlowerInfoList = new List(); List attributeList = Data.GetFlowerConfig(); for (int i = 0; i < attributeList.Count; i++) { FlowerInfo flowerInfo = new FlowerInfo(attributeList[i]); if (flowerInfo.Special) { TotalFlowerSpec++; } else { TotalFlowerRegu++; } FlowerInfoList.Add(flowerInfo); } #endregion } public override void RegistValueA() { Award = true; AwardLock = false; AnimTimer = Random.Range(0f, 30f); AwardTimer = Random.Range(20f, 60f); SlotList = new List() { ManaReso.Get("SlotA1").AddComponent(), ManaReso.Get("SlotA2").AddComponent(), ManaReso.Get("SlotA3").AddComponent(), ManaReso.Get("SlotA4").AddComponent(), ManaReso.Get("SlotA5").AddComponent(), ManaReso.Get("SlotA6").AddComponent(), ManaReso.Get("SlotA7").AddComponent(), ManaReso.Get("SlotA8").AddComponent(), ManaReso.Get("SlotA9").AddComponent(), ManaReso.Get("SlotB1").AddComponent(), ManaReso.Get("SlotB2").AddComponent(), ManaReso.Get("SlotB3").AddComponent(), ManaReso.Get("SlotB4").AddComponent(), ManaReso.Get("SlotB5").AddComponent(), ManaReso.Get("SlotB6").AddComponent(), ManaReso.Get("SlotB7").AddComponent(), ManaReso.Get("SlotB8").AddComponent(), ManaReso.Get("SlotB9").AddComponent(), }; } public static void UnlockSlot() { for (int i = 0; i < SlotList.Count; i++) { if (SlotList[i].Valid == false) { ManaData.Slot++; SlotList[i].Valid = true; SlotList[i].Available = true; return; } } ManaDebug.Log("所有土地已解锁"); } public static void SetFlowerCard(FlowerInfo flowerInfo) { SeleFlowerInfo = flowerInfo; ManaText.Add(ManaReso.Get("H_Lab"), new LanStr("FlowerName", flowerInfo._Name)); Image image = ManaReso.Get("H_Icon2"); image.sprite = flowerInfo.Sprite; Vector2 newSize = flowerInfo.Sprite.rect.size; newSize.x *= 0.65f; newSize.y *= 0.65f; image.rectTransform.sizeDelta = newSize; } public static void ShowPlantCard(Slot slot, FlowerInfo flowerInfo) { ManaReso.Get("H_FlowerCard").TweenForCG(); ManaReso.SetActive("H_Grid", true); ManaReso.SetActive("H_Prev", true); ManaReso.SetActive("H_Next", true); ManaReso.SetActive("H_Place", true); ManaReso.SetActive("H_Icon1", false); ManaReso.SetActive("H_Retrieve", false); SeleSlot = slot; SetFlowerCard(flowerInfo); } public static void ShowRetrieveCard(FlowerInfo flowerInfo) { SeleSlot = flowerInfo.Slot; SetFlowerCard(flowerInfo); ManaReso.SetActive("H_Grid", false); ManaReso.SetActive("H_Prev", false); ManaReso.SetActive("H_Next", false); ManaReso.SetActive("H_Place", false); ManaReso.SetActive("H_Icon1", true); ManaReso.SetActive("H_Retrieve", true); ManaReso.Get("H_FlowerCard").TweenForCG(); } public static void RetriveFlower() { SeleSlot.Retrieve(); if (PlantList.Count == 0) { Award = false; } } public static void RetriveFlowerAll() { for (int i = 0; i < PlantList.Count; i++) { PlantList[i].Retrieve(); i--; } Award = false; } public static void PlantFlower() { SeleSlot.Plant(SeleFlowerInfo, true); } public static void PlantFlower(FlowerInfo flowerInfo) { if (flowerInfo.Plant) { ShowRetrieveCard(flowerInfo); } else { Slot slot = null; for (int i = 0; i < SlotList.Count; i++) { if (SlotList[i].Available) { slot = SlotList[i]; break; } } if (slot == null) { ManaDebug.Log("已经没有空地了"); } else { slot.Plant(flowerInfo, true); } } } public static void PlantFlower(int id, string parName) { Slot slot = ManaReso.Get(parName); FlowerInfo flowerInfo = FlowerInfoList[id]; slot.Plant(flowerInfo, false); } }