using UnityEngine; using UnityEngine.UI; using UnityEngine.Serialization; using System; using System.Xml; using System.Text; using System.Collections; using System.Collections.Generic; using System.Linq; using Random = UnityEngine.Random; public class MinigameAward { #region Config public static int DropCoin; public static int DropDiamond; public static string DisplayContent; public int Rate; //小游戏评级 public int Score; public float MinScore = 1; public float MaxScore = Mathf.Infinity; public int CoinAward; public int DiamondAward; public bool HaveDiamondFlag; public static int UnlockFlowerID; public static bool UnlockFlowerFlag; public static bool HaveNewFlowerFlag; #region 配置 public int MinDiamondAward; public int MaxDiamondAward; public string CoinAwardFml; public string UnlockFlowerFml; public string DiamondAwardFml; public static string FlowerIDRateFml; //根据花的ID计算获得的概率 public static string FlowerAmtRateFml; //根据花的数量计算获得的概率 public List RateStandard = new List(); public List UnlockFlowerRate = new List(); #endregion #endregion public void GetAward(int score) { #region 获得奖励 #region Rate Score = (int)Mathf.Clamp(score, MinScore, MaxScore); if (Score < RateStandard[1]) { Rate = 0; } else if (Score < RateStandard[2]) { Rate = 1; } else { Rate = 2; } #endregion #region Reset UnlockFlowerFlag = false; HaveDiamondFlag = false; #endregion StringBuilder sb = new StringBuilder(); #region Coin CoinAward = (int)Auxiliary.FmlParse(CoinAwardFml, "s", Score.ToString(), "l", Mathf.Clamp(Manager.GardenLevel, 1, 9999).ToString()); CoinAward = (int)(CoinAward * (1 + Manager.SkillPlus) + DropCoin); CoinAward = (int) Mathf.Clamp(CoinAward, 1, Mathf.Infinity); ResourceManager.Get(CanvasLabel.Da_CoinLab).text = CoinAward.ToString(); ResourceManager.Get(CanvasLabel.Da_CoinLab).Resize(true, false); ResourceManager.Get(CanvasLabel.Da_CoinGroup).enabled = true; ResourceManager.SetActive(CanvasLabel.Da_CoinLab, true); Manager.AddCoin(CoinAward, StaticsManager.ItemID.获得金币, StaticsManager.ConsumeModule.MiniGame); sb.AppendFormat("{0}{1}{2} ", Language.GetStr(LanguageLabel.UI__J_Info0), TransferLabel.CoinSprite, CoinAward); #endregion #region Diamond float diamondRate = (float)Auxiliary.FmlParse(DiamondAwardFml, "l", Mathf.Clamp(Manager.GardenLevel, 1, 1000).ToString()); if (Random.Range(0, 1f) <= diamondRate) { HaveDiamondFlag = true; DiamondAward = (int)(Mathf.Lerp(MinDiamondAward, MaxDiamondAward, Random.Range(0, 1f)) + DropDiamond); ResourceManager.Get(CanvasLabel.Da_DiamondLab).text = DiamondAward.ToString(); ResourceManager.Get(CanvasLabel.Da_DiamondLab).Resize(true, false); ResourceManager.Get(CanvasLabel.Da_DiamondGroup).enabled = true; ResourceManager.SetActive(CanvasLabel.Da_DiamondLab, true); Manager.AddDiamond(DiamondAward, StaticsManager.ItemID.获得钻石, StaticsManager.ConsumeModule.MiniGame); ResourceManager.SetActive(CanvasLabel.Da_Diamond, true); sb.AppendFormat("{0}{1}{2} ", Language.GetStr(LanguageLabel.UI__J_Info0), TransferLabel.DiamondSprite, DiamondAward); } else { if (DropDiamond > 0) { HaveDiamondFlag = true; DiamondAward = DropDiamond; ResourceManager.Get(CanvasLabel.Da_DiamondLab).text = DiamondAward.ToString(); ResourceManager.Get(CanvasLabel.Da_DiamondLab).Resize(true, false); ResourceManager.Get(CanvasLabel.Da_DiamondGroup).enabled = true; ResourceManager.SetActive(CanvasLabel.Da_DiamondLab, true); Manager.AddDiamond(DiamondAward, StaticsManager.ItemID.获得钻石, StaticsManager.ConsumeModule.MiniGame); ResourceManager.SetActive(CanvasLabel.Da_Diamond, true); sb.AppendFormat("{0}{1}{2} ", Language.GetStr(LanguageLabel.UI__J_Info0), TransferLabel.DiamondSprite, DiamondAward); } else { DiamondAward = 0; } } #endregion #region Flower if (TutorialManager.NewplayerTutorial) { UnlockFlowerFlag = true; FlowerInfo flowerInfo = GardenManager.FlowerInfoDictionary[1]; ResourceManager.SetActive(CanvasLabel.Da_FlowerIcon, true); ResourceManager.Get(CanvasLabel.Da_FlowerIcon).sprite = flowerInfo.Icon; ResourceManager.Get(CanvasLabel.Da_FlowerIcon).Resize(true, 0.25f, 0.25f); ResourceManager.SetText(CanvasLabel.Da_FlowerLab, flowerInfo.Name); sb.AppendFormat("{0}{1}{2}", Language.GetStr(LanguageLabel.UI__J_Info0), TransferLabel.FlowerSprite, flowerInfo.Name); } else { if (!HaveNewFlowerFlag) { UnlockFlowerFlag = true; if (Random.Range(0, 1f) <= UnlockFlowerRate[Rate]) { FlowerInfo flowerInfo = GardenManager.FlowerInfoDictionary[UnlockFlowerID]; flowerInfo.Add(); ResourceManager.SetActive(CanvasLabel.Da_Flower, true); ResourceManager.Get(CanvasLabel.Da_FlowerIcon).sprite = flowerInfo.Icon; ResourceManager.Get(CanvasLabel.Da_FlowerIcon).Resize(true, 0.25f, 0.25f); ResourceManager.SetText(CanvasLabel.Da_FlowerLab, flowerInfo.Name); sb.AppendFormat("{0}{1}{2}", Language.GetStr(LanguageLabel.UI__J_Info0), TransferLabel.FlowerSprite, flowerInfo.Name); } else { ResourceManager.SetActive(CanvasLabel.Da_Flower, false); ResourceManager.SetText(CanvasLabel.Da_FlowerLab, Language.GetStr(LanguageLabel.UI__Da_HigherScore)); } } } #endregion DisplayContent = sb.ToString(); DropCoin = 0; DropDiamond = 0; #endregion ResourceManager.SetActive(CanvasLabel.Da_Info, true); Auxiliary.Instance.DelayCall ( () => { ResourceManager.Get(CanvasLabel.Da_CoinLab).SetLayoutDirty(); ResourceManager.Get(CanvasLabel.Da_DiamondLab).SetLayoutDirty(); ResourceManager.Get(CanvasLabel.Da_CoinGroup).enabled = false; ResourceManager.Get(CanvasLabel.Da_DiamondGroup).enabled = false; SetupAnimation(); }, 2 ); } public static int SelectUnlockFlowerID(List flowerIDs) { //foreach (var flowerID in flowerIDs) //{ // Debug.Log(flowerID); //} flowerIDs.MySort((id0, id1) => id1 > id0); List weights = new List(); for (int j = 0; j < flowerIDs.Count; j++) { FlowerInfo flowerInfo = GardenManager.FlowerInfoDictionary[flowerIDs[j]]; float flowerIDRate = (float) Auxiliary.FmlParse(FlowerIDRateFml, "i", flowerIDs[j].ToString()); float flowerAmtRate = (float) Auxiliary.FmlParse(FlowerAmtRateFml, "a", flowerInfo.amount.ToString()); float weight = flowerIDRate*flowerAmtRate; weights.Add(weight); } for (int i = 0; i < 20; i++) { for (int j = 0; j < weights.Count; j++) { weights[j] = weights[j]*(1 + i*0.1f); if (Random.Range(0f, 1f) <= weights[j]) { return flowerIDs[j]; } } } return flowerIDs[weights.MyMaxIndex(f => f)]; } public void SetupAnimation() { #region 构造动画 #region Reset ResourceManager.Get(CanvasLabel.Da_Info).TweenForCG(); ResourceManager.SetText(CanvasLabel.Da_Tit, Language.GetStr(LanguageLabel.UI__Da_Tit1)); ResourceManager.SetText(CanvasLabel.Da_CoinLab, "0"); ResourceManager.SetText(CanvasLabel.Da_DiamondLab, "0"); ResourceManager.SetActive(CanvasLabel.Da_Lab, false); ResourceManager.SetActive(CanvasLabel.Da_Quit, false); ResourceManager.SetActive(CanvasLabel.Da_Cancel, false); ResourceManager.SetActive(CanvasLabel.Da_CoinLab, false); ResourceManager.SetActive(CanvasLabel.Da_ScoreTit, false); ResourceManager.SetActive(CanvasLabel.Da_ScoreLab, false); ResourceManager.SetActive(CanvasLabel.Da_GetAward, false); ResourceManager.SetActive(CanvasLabel.Da_DiamondLab, false); ResourceManager.SetActive(CanvasLabel.Da_VGroup, true); ResourceManager.SetActive(CanvasLabel.Da_HGroup1, false); ResourceManager.SetActive(CanvasLabel.Da_FlowerGroup, false); ResourceManager.SetActive(CanvasLabel.Da_DiamondGroup, false); if (UnlockFlowerFlag) { ResourceManager.SetActive(CanvasLabel.Da_FlowerGroup, true); } if (HaveDiamondFlag) { ResourceManager.SetActive(CanvasLabel.Da_DiamondGroup, true); } Auxiliary.Instance.DelayCall ( () => { ResourceManager.Get(CanvasLabel.Da_VGroup).enabled = false; ResourceManager.SetActive(CanvasLabel.Da_CoinGroup, false); ResourceManager.SetActive(CanvasLabel.Da_FlowerGroup, false); ResourceManager.SetActive(CanvasLabel.Da_DiamondGroup, false); }, 1 ); float timeCoin = Mathf.Lerp(0, 1.5f, Mathf.Clamp01(CoinAward / 15f)); float timeScore = Mathf.Lerp(0, 1.5f, Mathf.Clamp01(Score / 50f)); float timeDiamond = Mathf.Lerp(0, 1.5f, Mathf.Clamp01(DiamondAward / 15f)); float time = Mathf.Max(timeCoin, timeDiamond); ResourceManager.Get(CanvasLabel.Da_CoinLab).CreateTweenNumber(0, CoinAward, time, false, true, Curve.EaseOutQuad); ResourceManager.Get(CanvasLabel.Da_ScoreLab).CreateTweenNumber(0, Score, timeScore, false, true, Curve.EaseOutQuad); ResourceManager.Get(CanvasLabel.Da_DiamondLab).CreateTweenNumber(0, DiamondAward, time, false, true, Curve.EaseOutQuad); #endregion #region 花 TweenRoot tween; if (UnlockFlowerFlag) { tween = ResourceManager.Get(CanvasLabel.Da_CoinLab).GetTweenNumber(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_FlowerGroup).TweenReForScale(); } ); } #endregion #region 按钮 if (UnlockFlowerFlag) { tween = ResourceManager.Get(CanvasLabel.Da_FlowerGroup).GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_GetAward).TweenReForCG(); } ); } else { tween = ResourceManager.Get(CanvasLabel.Da_CoinLab).GetTweenNumber(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_GetAward).TweenReForCG(); } ); } if (TutorialManager.NewplayerTutorial) { tween = ResourceManager.Get(CanvasLabel.Da_GetAward).GetTweenCG(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { Tutorial.HightScreen(ResourceManager.Get(CanvasLabel.Da_Arrow0), ResourceManager.Get(CanvasLabel.Da_Arrow1), ResourceManager.Get(CanvasLabel.Da_GetAward)); } ); } ResourceManager.AddButtonEventOnetime ( CanvasLabel.Da_GetAward, () => { ResourceManager.Get(CanvasLabel.Da_VGroup).GetComponent().enabled = true; } ); #endregion #region 得分 if (Rate == 0) { tween = ResourceManager.Get(CanvasLabel.Da_Star1).GetTweenScale(); } else if (Rate == 1) { tween = ResourceManager.Get(CanvasLabel.Da_Star2).GetTweenScale(); } else if (Rate == 2) { tween = ResourceManager.Get(CanvasLabel.Da_Star3).GetTweenScale(); } tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_ScoreTit).TweenReForFont(); } ); tween = ResourceManager.Get(CanvasLabel.Da_ScoreTit).GetTweenFont(); tween.InOrigin = true; tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_ScoreLab).TweenReForNumber(); } ); #endregion #region 五角星 tween = ResourceManager.Get(CanvasLabel.Da_Star3).GetTweenScale(); tween.InOrigin = true; tween = ResourceManager.Get(CanvasLabel.Da_Star2).GetTweenScale(); tween.InOrigin = true; tween = ResourceManager.Get(CanvasLabel.Da_Star1).GetTweenScale(); tween.InOrigin = true; tween = ResourceManager.Get(CanvasLabel.Da_Info).GetTweenCG(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_Star1).TweenReForScale(); ResourceManager.SetActive(CanvasLabel.Da_HGroup1, true); } ); if (Rate == 0) { ResourceManager.SetActive(CanvasLabel.Da_Star2, false); ResourceManager.SetActive(CanvasLabel.Da_Star3, false); } else if (Rate == 1) { ResourceManager.SetActive(CanvasLabel.Da_Star2, true); ResourceManager.SetActive(CanvasLabel.Da_Star3, false); tween = ResourceManager.Get(CanvasLabel.Da_Star1).GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_Star2).TweenReForScale(); } ); } else if (Rate == 2) { ResourceManager.SetActive(CanvasLabel.Da_Star2, true); ResourceManager.SetActive(CanvasLabel.Da_Star3, true); tween = ResourceManager.Get(CanvasLabel.Da_Star1).GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_Star2).TweenReForScale(); } ); tween = ResourceManager.Get(CanvasLabel.Da_Star2).GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_Star3).TweenReForScale(); } ); } #endregion #region 金币钻石 tween = ResourceManager.Get(CanvasLabel.Da_ScoreLab).GetTweenNumber(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_CoinGroup).TweenReForScale(); if (HaveDiamondFlag) { ResourceManager.Get(CanvasLabel.Da_DiamondGroup).TweenReForScale(); } } ); tween = ResourceManager.Get(CanvasLabel.Da_CoinGroup).GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_CoinLab).TweenReForNumber(); } ); if (HaveDiamondFlag) { tween = ResourceManager.Get(CanvasLabel.Da_DiamondGroup).GetTweenScale(); tween.AddEventOnetime ( EventType.ForwardFinish, () => { ResourceManager.Get(CanvasLabel.Da_DiamondLab).TweenReForNumber(); } ); } #endregion #endregion } public MinigameAward(XmlAttributeCollection attribute) { Flower.AwardCoinFml = attribute[8].Value; DropGold.CoinFml = attribute[7].Value; Star.MinigameCD = float.Parse(attribute[9].Value); Star.Time = float.Parse(attribute[11].Value); string[] strings = attribute[10].Value.Split(','); GardenManager.MinCreateStarTime = float.Parse(strings[0]); GardenManager.MaxCreateStarTime = float.Parse(strings[1]); GardenManager.CreateStarTimer = Mathf.Lerp(GardenManager.MinCreateStarTime, GardenManager.MaxCreateStarTime, Random.Range(0f, 1f)); CoinAwardFml = attribute[1].Value; UnlockFlowerFml = attribute[4].Value; DiamondAwardFml = attribute[3].Value; FlowerIDRateFml = attribute[12].Value; FlowerAmtRateFml = attribute[13].Value; strings = attribute[2].Value.Split(','); MinDiamondAward = int.Parse(strings[0]); MaxDiamondAward = int.Parse(strings[1]); strings = attribute[5].Value.Split(','); UnlockFlowerRate = new List() { float.Parse(strings[0]), float.Parse(strings[1]), float.Parse(strings[2]), }; strings = attribute[6].Value.Split(','); RateStandard = new List() { float.Parse(strings[0]), float.Parse(strings[1]), float.Parse(strings[2]), }; } } public enum MiniGameType { None, //需要重置 Punch, //打地鼠 Memory, //记住花的消失顺序 FindSolo, //找落单的花 FindMissing, //找不见了的花 } public class MiniGameManager : Regist { #region Config public static int Score { get { return score; } set { score = value; ResourceManager.SetText(CanvasLabel.D_ScoreLab, ScoreTextPrefix + score); } } private static int score; public static string ScoreTextPrefix; public static bool Game { get { return game; } set { game = value; if (game) { ResourceManager.SetText(CanvasLabel.D_StatusLab, Language.GetStr(LanguageLabel.UI__D_StatusLab1)); } else { ResourceManager.SetText(CanvasLabel.D_StatusLab, Language.GetStr(LanguageLabel.UI__D_StatusLab0)); } } } private static bool game; public static bool Pause { get { return pause; } set { pause = value; if (Game) { if (pause) { ResourceManager.SetText(CanvasLabel.D_StatusLab, Language.GetStr(LanguageLabel.UI__D_StatusLab2)); } else { ResourceManager.SetText(CanvasLabel.D_StatusLab, Language.GetStr(LanguageLabel.UI__D_StatusLab1)); } } else if (IsPrepare) { if (pause) { PrepareText.GetStreamScale().Pause(); } else { PrepareText.GetStreamScale().Resume(); } } } } private static bool pause; public static bool Panalty { get { return panalty; } set { panalty = value; if (Game) { if (panalty) { ResourceManager.SetText(CanvasLabel.D_StatusLab, Language.GetStr(LanguageLabel.UI__D_StatusLab3)); } else { ResourceManager.SetText(CanvasLabel.D_StatusLab, Language.GetStr(LanguageLabel.UI__D_StatusLab1)); } } } } private static bool panalty; public static float GameTimer { get { return gameTimer; } set { gameTimer = value; MinigameTimerText.text = (GameTime-gameTimer).ToString("0.0"); MinigameTimerBk.fillAmount = gameTimer/GameTime; MinigameTimerBk.material.SetFloat(MaterialLabel.TimerMatFill, MinigameTimerBk.fillAmount); } } private static float gameTimer; public static Text PrepareText; public static Text MinigameTimerText; public static Image MinigameTimerBk; public static Transform DisplayGrid; public static Transform MinigameTimerParent; public static Transform MinigameBeginButtonParent; public static Transform PunchGameStatusParent; public static Transform MemoryGameStatusParent; public static Transform FindSoloGameStatusParent; public static Transform FindMissingGameStatusParent; public static Transform PunchGameOperateParent; public static Transform MemoryGameOperateParent; public static Transform FindSoloGameOperateParent; public static Transform FindSoloGameCorrectButtonParent; public static Transform FindMissingGameOperateParent; public static List DropAwardList = new List(); public static List MinigameIdleFlowerList = new List(); public static Dictionary MinigameFlowerDictionary = new Dictionary(); public static int PunchCorrectScore = 15; public static int PunchGameSlotAmt = 9; public static List PunchGameSlotIDs = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; public static List PunchGameOperateList = new List(); public static int FindSoloCorrectScore = 40; public static List FindSoloGameSlotIDs = new List {0, 1, 2, 3, 4, 5, 6, 7, 8}; public static List FindSoloGameIndexList = new List(); public static List FindSoloGameFlowerIDs = new List(); public static Flower FindMissingNewFlower; public static Flower FindMissingCorrectFlower; public static int FindMissingCorrectScore = 60; public static float FindMissingGameFadeTimer; public static float FindMissingGameCurrentFadeTime; public static float FindMissingGameDecreaseTime = 0.5f; public static float FindMissingGameFlowerDisappearTime = 0.5f; public static float FindMissingGameFlowerMinDisplayTime = 1f; public static float FindMissingGameFlowerMaxDisplayTime = 3f; public static List FindMissingGameSlotIDs = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; public static List FindMissingGameFlowerIDs = new List(); public static Transform FindMissingGameMask; public static float MemoryGameFlowerFadeTime = 2f; public static float MemoryGameFlowerFadeTimer; public static float MemoryGameCurrentFlowerFadeTime; public static int MemoryGameMaxFadeAmt = 6; public static int MemoryCorrectScore = 20; public static float MemoryGameDecreaseRate = 0.3f; public static List MemoryGameSlotIDs = new List { 0, 1, 3, 4, 6, 7 }; public static List MemoryGameFadeList = new List(); public static int MiniGameIndex; //从上一次掉落钻石开始计起 进行了几次小游戏 public static bool IsPrepare; public static bool PlayNewflowerEffectFlag; public static float CreateOperateTime = 1.5f; public static float CreateOperateTimer; public static float OperateDecreaseRate = 0.03f; public static float CurrentCreateOperateTime; public static bool PunchGameTutorialFlag = true; public static int DropGoldMinIndex = 3; public static int DropGoldMaxIndex = 6; public static int DropDiamondMinIndex = 5; public static int DropDiamondMaxIndex = 9; public static float DropDiamondRate = 0.01f; public static float DropDiamondOffsetTime = 5; public static float DropGoldTimer; public static float DropDiamondTimer; public static bool CreateDropDiamondFlag; public static float PanaltyTime = 1f; public static float PanaltyTimer; public static float PrepareTime = 3; public static float PrepareTimer; public static float GameTime = 45f; public static float MinMinigameCD = 180; public static float MaxMinigameCD = 300; public static MiniGameType miniGameType; public static List D_MemoryGameBtns = new List(); public static List D_MemoryGameIcons = new List(); public static List D_MemoryGameTicks = new List(); public static List D_MemoryGameArrows = new List(); public static List D_FindSoloGameBtns = new List(); public static List D_FindSoloGameIcons = new List(); public static List D_FindSoloGameArrows = new List(); public static List D_FindMissingGameBtns = new List(); public static List D_FindMissingGameIcons = new List(); public static List D_FindMissingGameArrows = new List(); public static List MinigameSlots = new List(); public static MinigameAward MinigameAward; #endregion private void Update() { if (Pause) { return; } if (Game) { PunchGameThread(); MemoryGameThread(); FindSoloGameThread(); FindMissingGameThread(); } if (IsPrepare) { PrepareThread(); } } private void PunchGameThread() { if (miniGameType != MiniGameType.Punch) { return; } GameTimer += Time.deltaTime; if (GameTimer >= GameTime) { GameOver(); return; } if (Panalty) { PanaltyTimer -= Time.deltaTime; if (PanaltyTimer <= 0) { Panalty = false; } } if (MinigameIdleFlowerList.Count > 0) { CreateOperateTimer -= Time.deltaTime; if (CreateOperateTimer <= 0) { CurrentCreateOperateTime -= CurrentCreateOperateTime * OperateDecreaseRate; CreateOperateTimer = CurrentCreateOperateTime; CreatePunchGameOperate(); } } DropAwardThread(); } private void MemoryGameThread() { if (miniGameType != MiniGameType.Memory) { return; } GameTimer += Time.deltaTime; if (GameTimer >= GameTime) { GameOver(); return; } if (Panalty) { PanaltyTimer -= Time.deltaTime; if (PanaltyTimer <= 0) { Panalty = false; } } if (MemoryGameFadeList.Count < MemoryGameMaxFadeAmt) { MemoryGameFlowerFadeTimer -= Time.deltaTime; if (MemoryGameFlowerFadeTimer <= 0) { MemoryGameFlowerFadeTimer = MemoryGameCurrentFlowerFadeTime; MemoryGameFadeNext(); } } DropAwardThread(); } private void FindSoloGameThread() { if (miniGameType != MiniGameType.FindSolo) { return; } GameTimer += Time.deltaTime; if (GameTimer >= GameTime) { GameOver(); return; } if (Panalty) { PanaltyTimer -= Time.deltaTime; if (PanaltyTimer <= 0) { Panalty = false; } } DropAwardThread(); } private void FindMissingGameThread() { if (miniGameType != MiniGameType.FindMissing) { return; } GameTimer += Time.deltaTime; if (GameTimer >= GameTime) { GameOver(); return; } if (Panalty) { PanaltyTimer -= Time.deltaTime; if (PanaltyTimer <= 0) { Panalty = false; } } if (FindMissingGameFadeTimer >= 0) { FindMissingGameFadeTimer -= Time.deltaTime; if (FindMissingGameFadeTimer <= 0) { FindMissingFadeFlowers(); } } DropAwardThread(); } private void DropAwardThread() { DropGoldTimer -= Time.deltaTime; if (DropGoldTimer < 0) { DropGoldTimer = Random.Range(DropGoldMinIndex, DropGoldMaxIndex); DropAwardList.Add(ResourceManager.GetDrop(ObjType.DropGold)); } if (CreateDropDiamondFlag) { DropDiamondTimer -= Time.deltaTime; if (DropDiamondTimer < 0) { CreateDropDiamondFlag = false; DropAwardList.Add(ResourceManager.GetDrop(ObjType.DropDiamond)); } } } private void PrepareThread() { PrepareTimer -= Time.deltaTime; if (PrepareTimer <= 0) { IsPrepare = false; GameBegin(); } } public override void FirstInit() { MinigameAward = new MinigameAward(ConfigManager.GetAwardConfig()); MiniGameIndex = ConfigManager.GetIntFormConfig(PlayerConfigLabel.MiniGameIndex); } public override void RegistReference() { DisplayGrid = ResourceManager.Get(CanvasLabel.D_Grid); MinigameBeginButtonParent = ResourceManager.Get(CanvasLabel.D_Begin); MinigameTimerParent = ResourceManager.Get(CanvasLabel.D_Timer); PunchGameStatusParent = ResourceManager.Get(CanvasLabel.D_Status1); MemoryGameStatusParent = ResourceManager.Get(CanvasLabel.D_Status2); FindSoloGameStatusParent = ResourceManager.Get(CanvasLabel.D_Status3); FindMissingGameStatusParent = ResourceManager.Get(CanvasLabel.D_FindMissingGameStatus); PunchGameOperateParent = ResourceManager.Get(CanvasLabel.D_Operate1); MemoryGameOperateParent = ResourceManager.Get(CanvasLabel.D_Operate2); FindSoloGameOperateParent = ResourceManager.Get(CanvasLabel.D_Operate3); FindMissingGameOperateParent = ResourceManager.Get(CanvasLabel.D_FindMissingGamePanel); FindMissingGameMask = ResourceManager.Get(CanvasLabel.D_FindMissingGameMask); FindMissingGameMask.CreateTweenGra(0, 0.25f, true, false, Curve.EaseOutQuad); MinigameTimerText = ResourceManager.Get(CanvasLabel.D_TimerLab); PrepareText = ResourceManager.Get(CanvasLabel.D_PrepareLab); MinigameTimerBk = ResourceManager.Get(CanvasLabel.D_TimerIcon); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot1)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot2)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot3)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot4)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot5)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot6)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot7)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot8)); MinigameSlots.Add(ResourceManager.Get(GardenLabel.MinigameSlot9)); D_MemoryGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn1)); D_MemoryGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn2)); D_MemoryGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn3)); D_MemoryGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn4)); D_MemoryGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn5)); D_MemoryGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn6)); D_MemoryGameTicks.Add(ResourceManager.Get(CanvasLabel.D_FlowerTick1)); D_MemoryGameTicks.Add(ResourceManager.Get(CanvasLabel.D_FlowerTick2)); D_MemoryGameTicks.Add(ResourceManager.Get(CanvasLabel.D_FlowerTick3)); D_MemoryGameTicks.Add(ResourceManager.Get(CanvasLabel.D_FlowerTick4)); D_MemoryGameTicks.Add(ResourceManager.Get(CanvasLabel.D_FlowerTick5)); D_MemoryGameTicks.Add(ResourceManager.Get(CanvasLabel.D_FlowerTick6)); D_MemoryGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon1)); D_MemoryGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon2)); D_MemoryGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon3)); D_MemoryGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon4)); D_MemoryGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon5)); D_MemoryGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon6)); D_MemoryGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow1)); D_MemoryGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow2)); D_MemoryGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow3)); D_MemoryGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow4)); D_MemoryGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow5)); D_MemoryGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow6)); D_FindSoloGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn7)); D_FindSoloGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn8)); D_FindSoloGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FlowerBtn9)); D_FindSoloGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon7)); D_FindSoloGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon8)); D_FindSoloGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FlowerIcon9)); D_FindSoloGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow7)); D_FindSoloGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow8)); D_FindSoloGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FlowerArrow9)); D_FindMissingGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameButton0)); D_FindMissingGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameButton1)); D_FindMissingGameBtns.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameButton2)); D_FindMissingGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameIcon0)); D_FindMissingGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameIcon1)); D_FindMissingGameIcons.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameIcon2)); D_FindMissingGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameArrow0)); D_FindMissingGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameArrow1)); D_FindMissingGameArrows.Add(ResourceManager.Get(CanvasLabel.D_FindMissingGameArrow2)); } public static void TryGetNewFlower() { bool newFlowerFlag = ConfigManager.GetBoolFormConfig(PlayerConfigLabel.NewFlowerFlag); if (newFlowerFlag) { List flowerIDs = GardenManager.FlowerInfoDictionary.Keys.ToList(); MinigameAward.UnlockFlowerID = MinigameAward.SelectUnlockFlowerID(flowerIDs); MinigameAward.HaveNewFlowerFlag = false; } else { MinigameAward.HaveNewFlowerFlag = true; } } public static void ResetNewFlowerFlag() { float flowerRate = (float) Auxiliary.FmlParse(MinigameAward.UnlockFlowerFml, "l", Manager.GardenLevel.ToString(), "f", GardenManager.TotalUnlockFlower.ToString()); if (Random.Range(0, 1f) <= flowerRate) { ConfigManager.SaveBoolToConfig(PlayerConfigLabel.NewFlowerFlag, true); } else { ConfigManager.SaveBoolToConfig(PlayerConfigLabel.NewFlowerFlag, false); } } public static MiniGameType SelectMinigameType(List availableGameTypes) { PunchGameOperateParent.SetActive(false); MemoryGameOperateParent.SetActive(false); FindSoloGameOperateParent.SetActive(false); FindMissingGameOperateParent.SetActive(false); bool memoryGameAvailable = Manager.GardenLevel >= TutorialManager.MemoryMinigameTutorialLevel; bool findSoloGameAvailable = GardenManager.TotalUnlockFlower >= TutorialManager.MinFlowerForFindSoloGame && Manager.GardenLevel >= TutorialManager.FindSoloMinigameTutorialLevel; bool findMissingGameAvailable = GardenManager.TotalUnlockFlower >= TutorialManager.MinFlowerForFindMissingGame && Manager.GardenLevel >= TutorialManager.FindMissingMinigameTutorialLevel; availableGameTypes.Add(MiniGameType.Punch); if (memoryGameAvailable) { availableGameTypes.Add(MiniGameType.Memory); } if (findSoloGameAvailable) { availableGameTypes.Add(MiniGameType.FindSolo); } if (findMissingGameAvailable) { availableGameTypes.Add(MiniGameType.FindMissing); } float posibility = Random.Range(0f, 1f); for (int i = 0; i < availableGameTypes.Count; i++) { float average = 1f/availableGameTypes.Count; float leftBorder = average*i; float rightBorder = average*(i+1); if (posibility >= leftBorder && posibility <= rightBorder) { return availableGameTypes[i]; } } return MiniGameType.Punch; } public static void GameEnter(MiniGameType type) { miniGameType = type; TryGetNewFlower(); if (miniGameType == MiniGameType.Punch) { EnterPunchGame(); } if (miniGameType == MiniGameType.Memory) { EnterMemoryGame(); } if (miniGameType == MiniGameType.FindSolo) { EnterFindSoloGame(); } if (miniGameType == MiniGameType.FindMissing) { EnterFindMissingGame(); } ScoreTextPrefix = Language.GetStr(LanguageLabel.UI__D_ScoreLab); MinigameTimerBk.fillAmount = 0; MinigameTimerText.text = GameTime.ToString("0"); ResourceManager.Get(CanvasLabel.C_MiniGame).TweenBacCG(); ResourceManager.Get(GardenLabel.Minigame).TweenForVec(); ResourceManager.Get(CanvasLabel.D_MiniGame).TweenForCG(); AudioManager.PlayClip(AudioLabel.Bubble); } public static void GameBegin() { ConfigManager.SaveBoolToConfig(PlayerConfigLabel.NewFlowerFlag, false); Game = true; MiniGameIndex++; Score = 0; CreateOperateTimer = CreateOperateTime; MemoryGameFlowerFadeTimer = MemoryGameFlowerFadeTime; FindMissingGameCurrentFadeTime = FindMissingGameFlowerMaxDisplayTime; DropGoldTimer = Random.Range(DropGoldMinIndex, DropGoldMaxIndex); GameTimer = 0; CurrentCreateOperateTime = CreateOperateTime; MemoryGameCurrentFlowerFadeTime = MemoryGameFlowerFadeTime; DropDiamondTimer = Random.Range(0f, GameTime - DropDiamondOffsetTime); StaticsManager.GetInstance().UseItem(StaticsManager.ItemID.开始小游戏, StaticsManager.ItemType.小游戏, "1", StaticsManager.ConsumeModule.None); if (miniGameType == MiniGameType.Punch) { for (int i = 0; i < MinigameIdleFlowerList.Count; i++) { MinigameIdleFlowerList[i].GameBegin(); } } if (miniGameType == MiniGameType.Memory) { MemoryGameRoundReset(); } if (miniGameType == MiniGameType.FindSolo) { FindSoloGameRoundBegin(true); } if (miniGameType == MiniGameType.FindMissing) { FindMissingGameRoundBegin(); } if (Random.Range(DropDiamondMinIndex, DropDiamondMaxIndex) <= MiniGameIndex) { MiniGameIndex = 0; CreateDropDiamondFlag = true; } else { if (Random.Range(0, 1f) <= DropDiamondRate) { CreateDropDiamondFlag = true; } else { CreateDropDiamondFlag = false; } } } public static void GamePrepare() { IsPrepare = true; PrepareTimer = PrepareTime; ResourceManager.Get(CanvasLabel.D_Begin).SetActive(false); ResourceManager.Get(CanvasLabel.D_DescA).SetActive(false); ResourceManager.Get(CanvasLabel.D_DescB).SetActive(false); ResourceManager.Get(CanvasLabel.D_DescC).SetActive(false); ResourceManager.Get(CanvasLabel.D_FindMissingGameDesc).SetActive(false); if (miniGameType == MiniGameType.Punch) { ResourceManager.Get(CanvasLabel.D_Rip1).SetActive(true); ResourceManager.Get(CanvasLabel.D_Water1).SetActive(true); ResourceManager.Get(CanvasLabel.D_Fertilize1).SetActive(true); } if (miniGameType == MiniGameType.Memory) { ResourceManager.Get(CanvasLabel.D_Mask).TweenForGra(); ResourceManager.SetActive(CanvasLabel.D_FlowerBtn1, true); ResourceManager.SetActive(CanvasLabel.D_FlowerBtn2, true); ResourceManager.SetActive(CanvasLabel.D_FlowerBtn3, true); ResourceManager.SetActive(CanvasLabel.D_FlowerBtn4, true); ResourceManager.SetActive(CanvasLabel.D_FlowerBtn5, true); ResourceManager.SetActive(CanvasLabel.D_FlowerBtn6, true); float deltaSIzeX = 1.0625f; float deltaSIzeY = 1.0625f; ResourceManager.SetSprite(CanvasLabel.D_FlowerIcon1, MinigameFlowerDictionary[0].FlowerInfo.Icon).Resize(true, deltaSIzeX, deltaSIzeY); ResourceManager.SetSprite(CanvasLabel.D_FlowerIcon2, MinigameFlowerDictionary[1].FlowerInfo.Icon).Resize(true, deltaSIzeX, deltaSIzeY); ResourceManager.SetSprite(CanvasLabel.D_FlowerIcon3, MinigameFlowerDictionary[3].FlowerInfo.Icon).Resize(true, deltaSIzeX, deltaSIzeY); ResourceManager.SetSprite(CanvasLabel.D_FlowerIcon4, MinigameFlowerDictionary[4].FlowerInfo.Icon).Resize(true, deltaSIzeX, deltaSIzeY); ResourceManager.SetSprite(CanvasLabel.D_FlowerIcon5, MinigameFlowerDictionary[6].FlowerInfo.Icon).Resize(true, deltaSIzeX, deltaSIzeY); ResourceManager.SetSprite(CanvasLabel.D_FlowerIcon6, MinigameFlowerDictionary[7].FlowerInfo.Icon).Resize(true, deltaSIzeX, deltaSIzeY); } PrepareText.StreamForScale(); } public static void GameEnd() { PrepareText.GetStreamScale().InOrigin = true; //if (Game) //{ Manager.MinigameFlag = false; Manager.MinigameCDTimer = Mathf.Lerp(MinMinigameCD, MaxMinigameCD, Random.Range(0, 1f)); ResetNewFlowerFlag(); //} ResourceManager.Get(CanvasLabel.C_MiniGame).TweenForCG(); if (Manager.MinigameCDTimer > 0) { ResourceManager.Get(CanvasLabel.C_MiniGame).TweenForRect(); } Score = 0; Pause = false; Game = false; Panalty = false; IsPrepare = false; GameTimer = GameTime; for (int i = 0; i < PunchGameOperateList.Count; i++) { PunchGameOperateList[i].GameOver(); } for (int i = 0; i < MinigameIdleFlowerList.Count; i++) { MinigameIdleFlowerList[i].GameOver(); } for (int i = 0; i < DropAwardList.Count; i++) { DropAwardList[i].Retrieve(); DropAwardList.RemoveAt(i--); } } public static void GameOver() { AudioManager.PlayClip(AudioLabel.MinigameEnd); MinigameAward.GetAward(Score); Manager.PlayMinigameAmt++; ConfigManager.SaveIntToConfig(PlayerConfigLabel.CurrentMinigameType, MiniGameType.None.GetHashCode()); GameEnd(); } public static void OnFindSoloGameButtonClick(int id, int btnIndex) { if (!Game) { return; } if (Panalty) { return; } if (FindSoloGameFlowerIDs[0] == id) { Flower flower = MinigameIdleFlowerList.Find(tempFlower => { return tempFlower.ID == id; }); ResourceManager.GetHudText($"+{FindSoloCorrectScore}", Color.white, 90, flower.ChildDic[FlowerLabel.ScorePos], ResourceManager.Get(CanvasLabel.D_HudParent), true); Score += FindSoloCorrectScore; flower.PlayFlashLight(); AudioManager.PlayClip(AudioLabel.ClickButton); FindSoloGameRoundEnd(); } else { Panalty = true; PanaltyTimer = PanaltyTime; D_FindSoloGameIcons[btnIndex].TweenForGra(); D_FindSoloGameBtns[btnIndex].Shake(0.5f, 3, new Vector3(20f, 0, 0), Curve.EaseOutQuad); AudioManager.PlayClip(AudioLabel.Error); } } public static void OnMemoryGameClick(int index, int slotIndex) { if (Panalty || !MemoryGameFadeList.Valid()) { return; } if (FindSoloGameIndexList.Count == 0) { return; } if (slotIndex == FindSoloGameIndexList[0]) { D_MemoryGameBtns[index].GetComponent().material = Lib.GrayMat; D_MemoryGameBtns[index].GetComponent