using UnityEngine; using UnityEngine.UI; using UnityEngine.Serialization; using System; using System.Xml; using System.Text; using System.Collections; using System.Collections.Generic; using Random = UnityEngine.Random; public class Award { #region 变量 public static int BonusCoin; public static int BonusDiamond; public static string Info; public int DiamondMin; public int DiamondMax; public string CoinFml; public string FlowerFml; public string DiamondFml; public List Odds = new List(); public List Standard = new List(); #endregion public void GetAward(int score) { #region 获得奖励 #region Rate int rate; if (score < Standard[1]) { rate = 0; } else if (score < Standard[2]) { rate = 1; } else { rate = 2; } #endregion #region Reset bool flowerFlag = false; bool diamondFlag = false; #endregion StringBuilder sb = new StringBuilder(); #region Coin int coin = (int)Auxiliary.FmlParse(CoinFml, "s", score.ToString(), "l", Mathf.Clamp(ManaCenter.Level, 1, 9999).ToString()); coin = (int)(coin * (1 + ManaCenter.SkillPlus) + BonusCoin); ManaCenter.Coin += coin; sb.AppendFormat("{0}{1}{2} ", Language.GetStr("UI", "J_Info0"), "<(金币)>", coin); #endregion #region Diamond int diamond = 0; float diamondRate = (float)Auxiliary.FmlParse(DiamondFml, "l", Mathf.Clamp(ManaCenter.Level, 1, 1000).ToString()); if (Random.Range(0, 1f) <= diamondRate) { diamondFlag = true; diamond = (int)(Mathf.Lerp(DiamondMin, DiamondMax, Random.Range(0, 1f)) + BonusDiamond); ManaCenter.Diamond += diamond; ManaReso.SetActive("Da_Diamond", true); sb.AppendFormat("{0}{1}{2} ", Language.GetStr("UI", "J_Info0"), "<(钻石)>", diamond); } else { if (BonusDiamond > 0) { diamondFlag = true; diamond = BonusDiamond; ManaCenter.Diamond += diamond; ManaReso.SetActive("Da_Diamond", true); sb.AppendFormat("{0}{1}{2} ", Language.GetStr("UI", "J_Info0"), "<(钻石)>", diamond); } } #endregion #region Flower if (ManaTutorial.TutorialA) { flowerFlag = true; FlowerInfo flowerInfo = ManaGarden.FlowerInfoDic[1]; ManaReso.Get("Da_FlowerIcon").sprite = flowerInfo.Icon; ManaReso.Get("Da_FlowerIcon").Resize(0.2f, 0.2f); ManaReso.SetText("Da_FlowerLab", flowerInfo.Name); sb.AppendFormat("{0}{1}{2}", Language.GetStr("UI", "J_Info0"), "<(花朵)>", flowerInfo.Name); } else { float flowerRate = (float)Auxiliary.FmlParse(DiamondFml, "l", ManaCenter.Level.ToString(), "f", ManaGarden.MyFlower.ToString()); if (Random.Range(0, 1f) <= flowerRate) { if (Random.Range(0, 1f) <= Odds[rate]) { while (true) { FlowerInfo flowerInfo = ManaGarden.FlowerInfoDic.Random(); if (flowerInfo.Unlock) { flowerFlag = true; ManaReso.Get("Da_FlowerIcon").sprite = flowerInfo.Icon; ManaReso.Get("Da_FlowerIcon").Resize(0.2f, 0.2f); ManaReso.SetText("Da_FlowerLab", flowerInfo.Name); sb.AppendFormat("{0}{1}{2}", Language.GetStr("UI", "J_Info0"), "<(花朵)>", flowerInfo.Name); break; } } } } } #endregion Info = sb.ToString(); BonusCoin = 0; BonusDiamond = 0; #endregion #region 构造动画 #region Reset ManaReso.Get("Da_Info").TweenForCG(); ManaReso.SetText("Da_Tit", Language.GetStr("UI", "Da_Tit1")); ManaReso.SetText("Da_CoinLab", "0"); ManaReso.SetText("Da_DiamondLab", "0"); ManaReso.SetActive("Da_Lab", false); ManaReso.SetActive("Da_Quit", false); ManaReso.SetActive("Da_Cancel", false); ManaReso.SetActive("Da_CoinLab", false); ManaReso.SetActive("Da_ScoreTit", false); ManaReso.SetActive("Da_ScoreLab", false); ManaReso.SetActive("Da_GetAward", false); ManaReso.SetActive("Da_DiamondLab", false); ManaReso.SetActive("Da_VGroup", true); ManaReso.SetActive("Da_HGroup", false); ManaReso.SetActive("Da_FlowerGroup", false); ManaReso.SetActive("Da_DiamondGroup", false); if (flowerFlag) { ManaReso.SetActive("Da_FlowerGroup", true); } if (diamondFlag) { ManaReso.SetActive("Da_DiamondGroup", true); } Auxiliary.Instance.DelayCall ( () => { ManaReso.Get("Da_VGroup").enabled = false; ManaReso.SetActive("Da_CoinGroup", false); ManaReso.SetActive("Da_FlowerGroup", false); ManaReso.SetActive("Da_DiamondGroup", false); }, 1 ); float timeCoin = Mathf.Lerp(0, 1.5f, Mathf.Clamp01(coin / 15f)); float timeScore = Mathf.Lerp(0, 1.5f, Mathf.Clamp01(score / 50f)); float timeDiamond = Mathf.Lerp(0, 1.5f, Mathf.Clamp01(diamond / 15f)); float time = Mathf.Max(timeCoin, timeDiamond); ManaReso.Get("Da_CoinLab").CreateTweenNumber(0, coin, time, false, true, Curve.EaseOutQuad); ManaReso.Get("Da_ScoreLab").CreateTweenNumber(0, score, timeScore, false, true, Curve.EaseOutQuad); ManaReso.Get("Da_DiamondLab").CreateTweenNumber(0, diamond, time, false, true, Curve.EaseOutQuad); #endregion #region 花 TweenRoot tween; if (flowerFlag) { tween = ManaReso.Get("Da_CoinLab").GetTweenNumber(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_FlowerGroup").TweenReForScale(); } ); } #endregion #region 按钮 if (flowerFlag) { tween = ManaReso.Get("Da_FlowerGroup").GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_GetAward").TweenReForCG(); } ); } else { tween = ManaReso.Get("Da_CoinLab").GetTweenNumber(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_GetAward").TweenForCG(); } ); } if (ManaTutorial.TutorialA) { tween = ManaReso.Get("Da_GetAward").GetTweenCG(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { Tutorial.HightScreen(ManaReso.Get("Da_Arrow0"), ManaReso.Get("Da_Arrow1"), ManaReso.Get("Da_GetAward")); } ); } ManaReso.AddButtonEventOnetime ( "Da_GetAward", () => { ManaReso.Get("Da_VGroup").GetComponent().enabled = true; } ); #endregion #region 得分 if (rate == 0) { tween = ManaReso.Get("Da_Star1").GetTweenScale(); } else if (rate == 1) { tween = ManaReso.Get("Da_Star2").GetTweenScale(); } else if (rate == 2) { tween = ManaReso.Get("Da_Star3").GetTweenScale(); } tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_ScoreTit").TweenReForFont(); } ); tween = ManaReso.Get("Da_ScoreTit").GetTweenFont(); tween.InOrigin = true; tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_ScoreLab").TweenReForNumber(); } ); #endregion #region 五角星 tween = ManaReso.Get("Da_Star3").GetTweenScale(); tween.InOrigin = true; tween = ManaReso.Get("Da_Star2").GetTweenScale(); tween.InOrigin = true; tween = ManaReso.Get("Da_Star1").GetTweenScale(); tween.InOrigin = true; tween = ManaReso.Get("Da_Info").GetTweenCG(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_Star1").TweenReForScale(); ManaReso.SetActive("Da_HGroup", true); } ); if (rate == 0) { ManaReso.SetActive("Da_Star2", false); ManaReso.SetActive("Da_Star3", false); } else if (rate == 1) { ManaReso.SetActive("Da_Star2", true); ManaReso.SetActive("Da_Star3", false); tween = ManaReso.Get("Da_Star1").GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_Star2").TweenReForScale(); } ); } else if (rate == 2) { ManaReso.SetActive("Da_Star2", true); ManaReso.SetActive("Da_Star3", true); tween = ManaReso.Get("Da_Star1").GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_Star2").TweenReForScale(); } ); tween = ManaReso.Get("Da_Star2").GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_Star3").TweenReForScale(); } ); } #endregion #region 金币钻石 tween = ManaReso.Get("Da_ScoreLab").GetTweenNumber(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_CoinGroup").TweenReForScale(); if (diamondFlag) { ManaReso.Get("Da_DiamondGroup").TweenReForScale(); } } ); tween = ManaReso.Get("Da_CoinGroup").GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_CoinLab").TweenReForNumber(); } ); if (diamondFlag) { tween = ManaReso.Get("Da_DiamondGroup").GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ManaReso.Get("Da_DiamondLab").TweenReForNumber(); } ); } #endregion #endregion } public Award(XmlAttributeCollection attribute) { Flower.CoinFml = attribute[8].Value; DropGold.CoinFml = attribute[7].Value; CoinFml = attribute[1].Value; FlowerFml = attribute[4].Value; DiamondFml = attribute[3].Value; string[] strings = attribute[2].Value.Split(','); DiamondMin = int.Parse(strings[0]); DiamondMax = int.Parse(strings[1]); strings = attribute[5].Value.Split(','); Odds = new List() { float.Parse(strings[0]), float.Parse(strings[1]), float.Parse(strings[2]), }; strings = attribute[6].Value.Split(','); Standard = new List() { float.Parse(strings[0]), float.Parse(strings[1]), float.Parse(strings[2]), }; } } public class ManaMiniGame : Regist { #region 变量 public static int Score { get { return Score_; } set { Score_ = value; ManaReso.SetText("D_ScoreLab", ScoreLab + Score_); } } public static bool Game { get { return Game_; } set { Game_ = value; if (Game_) { ManaReso.SetText("D_StatusLab", Language.GetStr("UI", "D_StatusLab1")); } else { ManaReso.SetText("D_StatusLab", Language.GetStr("UI", "D_StatusLab0")); } } } public static bool Pause { get { return Pause_; } set { Pause_ = value; if (Game) { if (Pause_) { ManaReso.SetText("D_StatusLab", Language.GetStr("UI", "D_StatusLab2")); } else { ManaReso.SetText("D_StatusLab", Language.GetStr("UI", "D_StatusLab1")); } } else if (Prepare) { if (Pause_) { PrepareLab.GetStreamScale().Pause(); } else { PrepareLab.GetStreamScale().Resume(); } } } } public static bool Panalty { get { return Panalty_; } set { Panalty_ = value; if (Game) { if (Panalty_) { ManaReso.SetText("D_StatusLab", Language.GetStr("UI", "D_StatusLab3")); } else { ManaReso.SetText("D_StatusLab", Language.GetStr("UI", "D_StatusLab1")); } } } } public static float GameTimer { get { return GameTimer_; } set { GameTimer_ = value; TimerLab.text = (GameTime-GameTimer_).ToString("0.0"); TimerBk.fillAmount = GameTimer_/GameTime; TimerBk.material.SetFloat("_Fill", TimerBk.fillAmount); } } private static int Score_; private static bool Game_; private static bool Pause_; private static bool Panalty_; private static float GameTimer_; public static Text TimerLab; public static Text PrepareLab; public static Image TimerBk; public static Award Award; public static List DropList = new List(); public static List OpList = new List(); public static List IdleList = new List(); public static int Flower; public static int MiniGameIndex; public static string ScoreLab; public static bool Prepare; public static bool TutorialLock = true; public static bool DropDiamond; public static float OpTimer; public static float GoldTimer; public static float PanaltyTimer; public static float PrepareTimer; public static float DiamondTimer; public static float OpTime = 1.5f; public static float GameTime = 45; public static float PanaltyTime = 1; public static float NewOpTime; #endregion private void FixedUpdate() { if (Pause) { return; } if (Game) { GameThread(); } if (Prepare) { PrepareThread(); } } private void GameThread() { GameTimer += Time.fixedDeltaTime; if (GameTimer >= GameTime) { GameOver(); return; } if (Panalty) { PanaltyTimer -= Time.fixedDeltaTime; if (PanaltyTimer <= 0) { Panalty = false; } } if (IdleList.Count > 0) { OpTimer -= Time.fixedDeltaTime; if (OpTimer <= 0) { NewOpTime -= NewOpTime * 0.03f; OpTimer = NewOpTime; CreateOperate(); } } BonusThread(); } private void BonusThread() { GoldTimer -= Time.fixedDeltaTime; if (GoldTimer < 0) { GoldTimer = Random.Range(3f, 6f); DropList.Add(ManaReso.GetDrop(ObjType.DropGold)); } if (DropDiamond) { DiamondTimer -= Time.fixedDeltaTime; if (DiamondTimer < 0) { DropDiamond = false; DropList.Add(ManaReso.GetDrop(ObjType.DropDiamond)); } } } private void PrepareThread() { PrepareTimer -= Time.fixedDeltaTime; if (PrepareTimer <= 0) { Prepare = false; GameBegin(); } } public override void RegistValueA() { Award = new Award(ManaData.GetAwardConfig()); MiniGameIndex = ManaData.GetPlayerInt("MiniGameIndex"); } public override void RegistReference() { TimerLab = ManaReso.Get("D_TimerLab"); PrepareLab = ManaReso.Get("D_PrepareLab"); TimerBk = ManaReso.Get("D_TimerIcon"); } public static void Operate(OpType opType) { if (Panalty || !OpList.Valid()) { return; } if (OpList[0].Operate(opType)) { IdleList.Add(OpList[0]); OpList.Remove(OpList[0]); if (OpList.Count >= 2) { OpList[0].SetFirstOp(); OpList[1].SetSecondOp(); } else if (OpList.Count >= 1) { OpList[0].SetFirstOp(); } } else { Panalty = true; PanaltyTimer = PanaltyTime; } } public static void CreateOperate() { ManaAudio.PlayClip(Clip.BubbleClip); if (ManaTutorial.TutorialA && TutorialLock) { Pause = true; TutorialLock = false; Flower flower = IdleList[4]; flower.CreateOp(OpList.Count, OpType.Water); OpList.Add(flower); IdleList.Remove(flower); Tutorial.HightScreen(ManaReso.Get("D_WaterArrow0"), ManaReso.Get("D_WaterArrow1"), ManaReso.Get("D_Water1")); Tutorial.SetArea(OpList[0].OperateIcon.transform, 0.1f, 0.125f); ManaReso.AddButtonEventOnetime ( "D_Water2", () => { Pause = false; Tutorial.HightDisable(); } ); } else { Flower flower = IdleList[Random.Range(0, IdleList.Count)]; flower.CreateOp(OpList.Count); OpList.Add(flower); IdleList.Remove(flower); } } public static void GameEnd() { PrepareLab.GetStreamScale().InOrigin = true; if (Game) { ManaCenter.MiniLock = false; ManaCenter.MiniTimer = Mathf.Lerp(180, 300, Random.Range(0, 1f)); } if (ManaCenter.MiniTimer <= 0) { ManaReso.Get("C_MiniGame").TweenForCG(); } Score = 0; Pause = false; Game = false; Panalty = false; Prepare = false; GameTimer = GameTime; for (int i = 0; i < OpList.Count; i++) { OpList[i].GameOver(); } for (int i = 0; i < IdleList.Count; i++) { IdleList[i].GameOver(); } for (int i = 0; i < DropList.Count; i++) { DropList[i].Retrieve(); DropList.RemoveAt(i--); } } public static void GameOver() { ManaAudio.PlayClip(Clip.MiniEndClip); Award.GetAward(Score); ManaCenter.MiniGameAmt++; GameEnd(); } public static void GameEnter() { if (ManaGarden.MyFlower < ManaGarden.TotalFlower) { while (true) { FlowerInfo flowerInfo = ManaGarden.FlowerInfoDic.Random(); if (!flowerInfo.Unlock) { Flower = flowerInfo.ID_; break; } } } else { Flower = ManaGarden.FlowerInfoDic.Random().ID_; } int flowerAmt = 1; while (true) { FlowerInfo flowerInfo = ManaGarden.FlowerInfoDic.Random(); if (flowerInfo.Unlock) { IdleList.Add(ManaReso.GetFlower(flowerInfo, ManaReso.Get("SlotMini" + flowerAmt))); flowerAmt++; if (flowerAmt == 10) { break; } } } ScoreLab = Language.GetStr("UI", "D_ScoreLab"); TimerBk.fillAmount = 0; TimerLab.text = GameTime.ToString("0"); ManaReso.Get("C_MiniGame").TweenBacCG(); ManaReso.SetActive("D_Rip1", false); ManaReso.SetActive("D_Begin", true); ManaReso.SetActive("D_Water1", false); ManaReso.SetActive("D_Fertilize1", false); } public static void GameBegin() { Game = true; MiniGameIndex++; OpTimer = OpTime; GoldTimer = Random.Range(3f, 6f); GameTimer = 0; NewOpTime = OpTime; DiamondTimer = Random.Range(0f, GameTime - 5); for (int i = 0; i < IdleList.Count; i++) { IdleList[i].GameBegin(); } if (Random.Range(5, 9) <= MiniGameIndex) { MiniGameIndex = 0; DropDiamond = true; } else { if (Random.Range(0, 1f) <= 0.01f) { DropDiamond = true; } else { DropDiamond = false; } } } public static void GamePrepare() { Prepare = true; PrepareTimer = 3; ManaReso.Get("D_Rip1").SetActive(true); ManaReso.Get("D_Water1").SetActive(true); ManaReso.Get("D_Fertilize1").SetActive(true); ManaReso.Get("D_Begin").SetActive(false); PrepareLab.StreamForScale(); } public void OnApplicationPause(bool pause) { if (!pause) { if (!ManaTutorial.TutorialA) { if (Game || Prepare) { ManaReso.Get