using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using Random = UnityEngine.Random; 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_ = GetComponent(); } return Animator_; } set { Animator_ = value; } } public Animator Animator_; public ChestData ChestData; private string AnswerColor; private FlowerInfo AnswerInfo; private SpriteRenderer ParentSR; private SpriteRenderer ChestSR; private SpriteRenderer ShadowSR; private Material GrayMaterial; private MaterialUnit MaterialUnit; private TweenMatFloat MaterialTween; public static InputField InputField; public static PlazaRoomChest CurrentChest; public static PlazaRoomChest SystemChest; #endregion public void Update() { if (!IsActive) { return; } 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(); 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() { Bubble.Show(null, Language.GetStr("UI", "Y_GuessWrong")); } private void GuessSucceed() { ManaReso.Get("Y_Chest").interactable = false; SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.GetChestAward(ChestData.ID); } public void RetriveChest() { ParentSR.TweenBacSr(); } public void Init(ChestData chestData) { BaseInit(chestData); //if (chestData.Owner == long.Parse(ManaServer.SerialNumber)) //{ // SetColliders(false); // StopAnim(); //} //else //{ // SetColliders(true); //} SetColliders(true); if (chestData.ChestType == ChestType.GuessColor) { AnswerInfo = ManaGarden.FlowerInfoDic.Random(); AnswerColor = Language.GetStr("FlowerColor", AnswerInfo.ID).ToLower(); } } public void SystemChestInit(ChestData chestData) { BaseInit(chestData); GrayMaterial = new Material(Lib.GraySpriteMat); GrayMaterial.SetFloat("_GrayLerp", 1); GrayMaterial.SetFloat("_GrayScaleX", 0.299f); GrayMaterial.SetFloat("_GrayScaleY", 0.587f); GrayMaterial.SetFloat("_GrayScaleZ", 0.114f); MaterialUnit = new MaterialUnit(GrayMaterial, transform, new List() { "_GrayLerp" }); MaterialTween = MaterialUnit.CreateTweenMatFloat(1, 0, 0.25f, true, true, Curve.EaseOutQuad); MaterialTween.OnForwardFinish = () => { ChestSR.material = ShadowSR.material; }; Deactive(); SystemChest = this; //SetColliders(false); } private void BaseInit(ChestData chestData) { if (InputField == null) { InputField = ManaReso.Get("Y_InputField"); } ChestSR = transform.GetChild(0).GetComponent(); ShadowSR = transform.GetChild(1).GetComponent(); ShadowSR.sprite = ManaReso.LoadSprite("花影子", Folder.Scene); if (chestData.ChestType == ChestType.System) { ChestSR.sprite = ManaReso.LoadSprite("系统宝箱", Folder.Scene); } else if (chestData.ChestType == ChestType.Lucky) { ChestSR.sprite = ManaReso.LoadSprite("钻石宝箱", Folder.Scene); } else if (chestData.ChestType == ChestType.GuessColor) { ChestSR.sprite = ManaReso.LoadSprite("花朵宝箱", Folder.Scene); } else if (chestData.ChestType == ChestType.GuessNumber) { ChestSR.sprite = ManaReso.LoadSprite("数字宝箱", Folder.Scene); } ParentSR = GetComponent(); TweenRoot tweenRoot = ParentSR.GetTweenSr(); if (tweenRoot != null) { tweenRoot.InDestination = true; } else { tweenRoot = ParentSR.CreateTweenSr(0, 1, 0.25f, false, true, Curve.EaseOutQuad, false, true); tweenRoot.OnBackwardFinish = () => { ManaReso.Save(gameObject); }; } tweenRoot = transform.GetTweenScale(); if (tweenRoot != null) { tweenRoot.InOrigin = true; tweenRoot.StartForward(); } else { tweenRoot = transform.CreateTweenScale(0, 0.8f, 0.25f, false, true, Curve.EaseOutQuad); tweenRoot.StartForward(); } ChestData = chestData; } public void OnFinish() { Animator.SetInteger("Count", Animator.GetInteger("Count") + 1); } public void Deactive() { if (ChestData.ChestType == ChestType.System) { ChestSR.material = GrayMaterial; MaterialTween.StartBackward(); } IsActive = false; } public void Active() { if (ChestData.ChestType == ChestType.System) { MaterialTween.StartForward(); } IsActive = true; } public void SetColliders(bool enable) { foreach (var collider in GetComponentsInChildren()) { collider.enabled = enable; } } public void OnPointerClick(PointerEventData eventData) { CurrentChest = this; ManaAudio.PlayClip(Clip.BtnClip); if (ChestData.ChestType == ChestType.Lucky) { GetAward(null); } else if (ChestData.ChestType == ChestType.System) { if (IsActive) { GetAward(null); } else { Bubble.Show(null, Language.GetStr("UI", "Y_Unactive")); } } else { ManaReso.Get("Y_Chest").TweenForCG(); ManaReso.SetActive("Ya_GetAward", false); ManaReso.SetActive("Y_Guess", true); ManaReso.SetActive("Yb_CreateChest", false); if (ChestData.ChestType == ChestType.GuessColor) { ManaReso.SetActive("Y_RewardLab", false); ManaReso.SetActive("Y_RewardIcon", true); ManaReso.Get("Y_RewardIcon").sprite = AnswerInfo.Icon; ManaReso.Get("Y_RewardIcon").Resize(true, 0.3125f, 0.3125f); ManaReso.Get("Y_RewardIcon").color = Color.white; ManaLan.Add(ManaReso.Get("Y_Tit"), new LanStr("UI", "Yb_GuessColor")); ManaLan.Add(ManaReso.Get("Y_Desc"), new LanStr("UI", "Y_GuessColorDesc")); InputField.text = ""; InputField.characterLimit = 30; } else { ManaReso.SetActive("Y_RewardLab", true); ManaReso.SetActive("Y_RewardIcon", false); ManaLan.Add(ManaReso.Get("Y_Tit"), new LanStr("UI", "Yb_GuessNumber")); ManaLan.Add(ManaReso.Get("Y_Desc"), new LanStr("UI", "Y_GuessNumberDesc")); InputField.text = ""; InputField.characterLimit = 1; } } } }