123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497 |
- 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 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<Animator>();
- }
- 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<CanvasGroup>(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("ChestTimer", Folder.UI, false, ResourceManager.Get(ObjectLabel.W_HudParent), false, ObjType.ChestTimer);
- ChestTimerLab = ChestTimerTransform.GetComponentInChildren<Text>();
- HudTarget hudTarget = ChestTimerTransform.GetComponent<HudTarget>();
- if (hudTarget == null)
- {
- hudTarget = ChestTimerTransform.AddComponent<HudTarget>();
- ChestTimerTransform.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
- PlazaRoom.DepthDictionary.Add(transform, new List<Transform> {ChestTimerTransform});
- }
- hudTarget.PosTra = transform.parent.FindChild("Hud");
- ResetChestTimer();
- SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.CheckDefaultChestStatus(chestData.DatabaseRoomID);
- SystemChest = this;
- }
- private void BaseInit(ChestData chestData)
- {
- ChestData = chestData;
- if (InputField == null)
- {
- InputField = ResourceManager.Get<InputField>(ObjectLabel.Y_InputField);
- }
- if (!Initialized)
- {
- Initialized = true;
- ParentMR = transform.parent.GetComponent<MeshRenderer>();
- ChestMF = transform.GetComponent<MeshFilter>();
- ChestMR = transform.GetComponent<MeshRenderer>();
- ShadowMF = transform.parent.GetChild(1).GetComponent<MeshFilter>();
- ShadowMR = transform.parent.GetChild(1).GetComponent<MeshRenderer>();
- 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>())
- {
- collider.enabled = enable;
- }
- }
- public void TurnGray()
- {
- TweenGrayMesh.StartBackward();
- }
- public void TurnNormalColor()
- {
- TweenGrayMesh.StartForward();
- }
- public void OnPointerClick(PointerEventData eventData)
- {
- CurrentChest = this;
- AudioManager.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(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<Image>(ObjectLabel.Y_RewardIcon).sprite = AnswerInfo.Icon;
- ResourceManager.Get<Image>(ObjectLabel.Y_RewardIcon).Resize(true, 0.3125f, 0.3125f);
- ResourceManager.Get<Image>(ObjectLabel.Y_RewardIcon).color = Color.white;
- LanguageManager.Add(ResourceManager.Get<Text>(ObjectLabel.Y_Tit), new MulLanStr(LanguageLabel.UI__Yb_GuessColor));
- LanguageManager.Add(ResourceManager.Get<Text>(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<Text>(ObjectLabel.Y_Tit), new MulLanStr(LanguageLabel.UI__Yb_GuessNumber));
- LanguageManager.Add(ResourceManager.Get<Text>(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);
- }
- }
- }
|