using System; using System.Collections; using System.Collections.Generic; using System.Linq; using DragonBones; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using Random = UnityEngine.Random; using Transform = UnityEngine.Transform; public class PlazaRoomChestLabel { public static string Hud = "Hud"; } public class PlazaRoomChest : MonoBehaviour, IPointerClickHandler { #region Config public float Time = 5; public float Timer; public bool IsActive = true; public Animator Animator { get { if (Animator_ == null) { Animator_ = GetComponentInChildren(); } return Animator_; } set { Animator_ = value; } } public Animator Animator_; public ChestData ChestData; private string AnswerColor; private FlowerInfo AnswerInfo; public Text ChestTimerLab; public Transform ChestTimerTransform; public float ChestTime = 600; public float ChestTimer; public bool CheckLock; public DateTime LastActivatedTime; //只有系统宝箱才用 public bool Initialized; public MeshFilter ChestMF; public MeshFilter ShadowMF; public MeshRenderer ChestMR; public MeshRenderer ParentMR; public MeshRenderer ShadowMR; private Mesh ShadowMesh { get { if (shadowMesh == null) { shadowMesh = SpriteUtility.CreateMesh(ResourceManager.LoadSprite(ResourceLabel.FlowerShadow, Folder.Scene)); shadowMesh.SetUVs(1, Enumerable.Repeat(new Vector2(0,1), shadowMesh.vertices.Length).ToList()); } return shadowMesh; } } private Mesh shadowMesh; private Mesh SystemMesh { get { if (systemMesh == null) { systemMesh = SpriteUtility.CreateMesh(ResourceManager.LoadSprite(ResourceLabel.SystemChest, Folder.Scene)); systemMesh.SetUVs(1, Enumerable.Repeat(new Vector2(1,1), systemMesh.vertices.Length).ToList()); } return systemMesh; } } private Mesh systemMesh; private Mesh LuckyMesh { get { if (luckyMesh == null) { luckyMesh = SpriteUtility.CreateMesh(ResourceManager.LoadSprite(ResourceLabel.DiamondChest, Folder.Scene)); luckyMesh.SetUVs(1, Enumerable.Repeat(new Vector2(0,1), luckyMesh.vertices.Length).ToList()); } return luckyMesh; } } private Mesh luckyMesh; private Mesh NumberMesh { get { if (numberMesh == null) { //foreach (var uv in ManaReso.LoadSprite("数字宝箱", Folder.Scene).uv) //{ // Debug.LogWarning(uv); //} //Debug.Log(ManaReso.LoadSprite("数字宝箱", Folder.Scene).texture.name); numberMesh = SpriteUtility.CreateMesh(ResourceManager.LoadSprite(ResourceLabel.NumberChest, Folder.Scene)); numberMesh.SetUVs(1, Enumerable.Repeat(new Vector2(0,1), numberMesh.vertices.Length).ToList()); } return numberMesh; } } private Mesh numberMesh; private Mesh ColorMesh { get { if (colorMesh == null) { colorMesh = SpriteUtility.CreateMesh(ResourceManager.LoadSprite(ResourceLabel.FlowerChest, Folder.Scene)); colorMesh.SetUVs(1, Enumerable.Repeat(new Vector2(0,1), colorMesh.vertices.Length).ToList()); } return colorMesh; } } private Mesh colorMesh; public TweenGrayMesh TweenGrayMesh; public TweenRenderer TweenRenderer; public TweenScale TweenScale; public static InputField InputField; public static PlazaRoomChest CurrentChest; public static PlazaRoomChest SystemChest; #endregion public void Update() { if (!IsActive) { if (ChestData.ChestType == ChestType.System && !CheckLock) { if (ChestTimer <= 0) { SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.CheckDefaultChestStatus(ChestData.DatabaseRoomID); CheckLock = true; } else { ChestTimer -= UnityEngine.Time.deltaTime; ChestTimerLab.text = ChestTimer.ToString("F0"); } } } else { Timer += UnityEngine.Time.deltaTime; if (Timer >= Time) { Timer = 0; Animator.SetInteger("Count", 0); } } } public void GetAward(string inputValue) { if (ChestData.ChestType == ChestType.System || ChestData.ChestType == ChestType.Lucky) { Take(); } else { Guess(inputValue); } } private void Take() { Deactive(); TurnGray(); SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.GetChestAward(ChestData.ID); if (ChestData.ChestType != ChestType.System) { SetColliders(false); } } private void Guess(string inputValue) { if (string.IsNullOrEmpty(inputValue)) { GuessFailed(); } else { inputValue = inputValue.ToLower(); inputValue = inputValue.Trim(); if (ChestData.ChestType == ChestType.GuessColor) { if (inputValue == AnswerColor) { GuessSucceed(); } else { GuessFailed(); } } else { int digit = ChestData.Value % 10; int guessNumber = int.Parse(inputValue); if (guessNumber == digit) { GuessSucceed(); } else { GuessFailed(); } } } } private void GuessFailed() { ChestOperateData chestOperateData; ChestManager.OperateDataDictionary.TryGetValue(CurrentChest.ChestData.ID, out chestOperateData); int remainGuessAmt; if (chestOperateData == null) { chestOperateData = new ChestOperateData(false, CurrentChest.ChestData.ID, CurrentChest.ChestData.DatabaseRoomID); ChestManager.OperateDataDictionary.UniqueAdd(chestOperateData.ChestID, chestOperateData); remainGuessAmt = ChestManager.PlayerMaxGuessAmt - 1; } else if (chestOperateData.RemainGuessAmt == null) { remainGuessAmt = ChestManager.PlayerMaxGuessAmt - 1; } else { remainGuessAmt = (int) chestOperateData.RemainGuessAmt - 1; } ChestManager.OperateDataDictionary[CurrentChest.ChestData.ID].RemainGuessAmt = remainGuessAmt; string hint = Language.GetStr(LanguageLabel.UI__Y_GuessWrong); hint = hint.Replace(TransferLabel.Value, remainGuessAmt.ToString()); Bubble.Show(null, hint); if (remainGuessAmt <= 0) { ChestManager.CloseCreateChestPanel(); Deactive(); TurnGray(); } } private void GuessSucceed() { ResourceManager.Get(ObjectLabel.Y_Chest).interactable = false; SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.GetChestAward(ChestData.ID); } public void RetriveChest() { if (ChestData.ChestType == ChestType.System) { ResourceManager.Save(ChestTimerTransform); } TweenRenderer.StartBackward(); } public void Init(ChestData chestData) { BaseInit(chestData); if (chestData.ChestType == ChestType.GuessColor) { AnswerInfo = GardenManager.FlowerInfoDic.Random(); AnswerColor = Language.GetStr(LabelUtility.CombineLanguageLabel(LanguageLabel.FlowerColor, AnswerInfo.FullID)).ToLower(); } } public void SystemChestInit(ChestData chestData) { BaseInit(chestData); Deactive(); TurnGray(); ChestTimerTransform = ResourceManager.Get(ResourceLabel.ChestTimer, Folder.UI, false, ResourceManager.Get(ObjectLabel.W_HudParent), false, ObjType.ChestTimer); ChestTimerLab = ChestTimerTransform.GetComponentInChildren(); HudTarget hudTarget = ChestTimerTransform.GetComponent(); if (hudTarget == null) { hudTarget = ChestTimerTransform.AddComponent(); ChestTimerTransform.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad); PlazaRoom.DepthDictionary.Add(transform, new List {ChestTimerTransform}); } hudTarget.PosTra = transform.parent.FindChild(PlazaRoomChestLabel.Hud); ResetChestTimer(); SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.CheckDefaultChestStatus(chestData.DatabaseRoomID); SystemChest = this; } private void BaseInit(ChestData chestData) { ChestData = chestData; if (InputField == null) { InputField = ResourceManager.Get(ObjectLabel.Y_InputField); } if (!Initialized) { Initialized = true; ParentMR = transform.parent.GetComponent(); ChestMF = transform.GetComponent(); ChestMR = transform.GetComponent(); ShadowMF = transform.parent.GetChild(1).GetComponent(); ShadowMR = transform.parent.GetChild(1).GetComponent(); ShadowMF.mesh = ShadowMesh; TweenRenderer = new TweenRenderer(ParentMR, new Color(1, 1, 1, 0), Color.white, 0.25f, true, true, Curve.EaseOutQuad, false, true); TweenRenderer.OnBackwardFinish = () => { ResourceManager.Save(transform.parent.gameObject); }; TweenScale = transform.CreateTweenScale(0, 0.8f, 0.25f, false, true, Curve.EaseOutQuad); TweenScale.StartForward(); } else { TweenScale.InOrigin = true; TweenScale.StartForward(); } SetColliders(true); ParentMR.sharedMaterial = UnityFactory.Materials[0]; ChestMR.sharedMaterial = UnityFactory.Materials[0]; ShadowMR.sharedMaterial = UnityFactory.Materials[0]; GetMesh(chestData.ChestType); TweenGrayMesh = new TweenGrayMesh(ChestMF, 1, 0, 0.25f, true, true, Curve.EaseOutQuad); TweenGrayMesh.InDestination = true; } private void GetMesh(ChestType chestType) { if (chestType == ChestType.System) { if (ChestMF.mesh != SystemMesh) ChestMF.mesh = SystemMesh; } else if (chestType == ChestType.Lucky) { if (ChestMF.mesh != LuckyMesh) ChestMF.mesh = LuckyMesh; } else if (chestType == ChestType.GuessColor) { if (ChestMF.mesh != ColorMesh) ChestMF.mesh = ColorMesh; } else if (chestType == ChestType.GuessNumber) { if (ChestMF.mesh != NumberMesh) ChestMF.mesh = NumberMesh; } } public void ResetChestTimer() { CheckLock = false; ChestTimerTransform.TweenForCG(); ChestTimer = ChestTime; } public void OnFinish() { Animator.SetInteger("Count", Animator.GetInteger("Count") + 1); } public void Deactive() { IsActive = false; } public void Active() { IsActive = true; } public void SetColliders(bool enable) { foreach (var collider in GetComponentsInChildren()) { collider.enabled = enable; } } public void TurnGray() { TweenGrayMesh.StartBackward(); } public void TurnNormalColor() { TweenGrayMesh.StartForward(); } public void OnPointerClick(PointerEventData eventData) { CurrentChest = this; AudioManager.PlayClip(AudioLabel.ClickButton); if (ChestData.ChestType == ChestType.Lucky) { GetAward(null); } else if (ChestData.ChestType == ChestType.System) { if (IsActive) { GetAward(null); } else { Bubble.Show(null, Language.GetStr(LanguageLabel.UI__Y_Unactive)); } } else { if (!IsActive) { Bubble.Show(null, Language.GetStr(LanguageLabel.UI__Y_OutOfChance)); return; } ResourceManager.Get(ObjectLabel.Y_Chest).TweenForCG(); ResourceManager.SetActive(ObjectLabel.Ya_GetAward, false); ResourceManager.SetActive(ObjectLabel.Y_Guess, true); ResourceManager.SetActive(ObjectLabel.Yb_CreateChest, false); if (ChestData.ChestType == ChestType.GuessColor) { ResourceManager.SetActive(ObjectLabel.Y_RewardLab, false); ResourceManager.SetActive(ObjectLabel.Y_RewardIcon, true); ResourceManager.Get(ObjectLabel.Y_RewardIcon).sprite = AnswerInfo.Icon; ResourceManager.Get(ObjectLabel.Y_RewardIcon).Resize(true, 0.3125f, 0.3125f); ResourceManager.Get(ObjectLabel.Y_RewardIcon).color = Color.white; LanguageManager.Add(ResourceManager.Get(ObjectLabel.Y_Tit), new MulLanStr(LanguageLabel.UI__Yb_GuessColor)); LanguageManager.Add(ResourceManager.Get(ObjectLabel.Y_Desc), new MulLanStr(LanguageLabel.UI__Y_GuessColorDesc)); InputField.text = ""; InputField.characterLimit = 30; } else { ResourceManager.SetActive(ObjectLabel.Y_RewardLab, true); ResourceManager.SetActive(ObjectLabel.Y_RewardIcon, false); LanguageManager.Add(ResourceManager.Get(ObjectLabel.Y_Tit), new MulLanStr(LanguageLabel.UI__Yb_GuessNumber)); LanguageManager.Add(ResourceManager.Get(ObjectLabel.Y_Desc), new MulLanStr(LanguageLabel.UI__Y_GuessNumberDesc)); InputField.text = ""; InputField.characterLimit = 1; } } } public void OnApplicationPause(bool pause) { if (!pause) { SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.CheckDefaultChestStatus(ChestData.DatabaseRoomID); } } }