//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, September 18, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class DailyQuestActiveRewardTooltip : MonoBehaviour { [SerializeField] PointerDownUp m_PointerDownUp; [SerializeField] ItemBehaviour m_Item; [SerializeField] UIEffect m_AwardEffect; [SerializeField] Transform m_GotSign; [Header("Reward Preview")] [SerializeField] Transform m_RewardPreview; [SerializeField] ItemBehaviour m_ItemPreview; [SerializeField] Text m_RewardDescription; DailyQuestModel model { get { return ModelCenter.Instance.GetModel(); } } int rewardId = 0; public void Init(int _rewardId, int _stage) { rewardId = _rewardId; var activeValueConfig = Config.Instance.Get(rewardId); if (activeValueConfig == null) { return; } var itemId = activeValueConfig.ItemID[_stage]; var itemCount = activeValueConfig.ItemCount[_stage]; m_Item.SetItem(itemId, itemCount); m_ItemPreview.SetItem(itemId, itemCount); var itemConfig = Config.Instance.Get(itemId); m_RewardDescription.text = Language.Get(activeValueConfig.Description, itemConfig.ItemName, itemCount); DailyQuestActiveValueReward rewardRecord; if (model.TryGetActiveValueRewardData(rewardId, out rewardRecord)) { m_GotSign.gameObject.SetActive(rewardRecord.got); } model.totalActiveValueUpdateEvent -= UpdateAwardableEffect; model.totalActiveValueUpdateEvent += UpdateAwardableEffect; model.activeValueRewardGotEvent -= OnGotActiveValueReward; model.activeValueRewardGotEvent += OnGotActiveValueReward; } public void Dispose() { model.activeValueRewardGotEvent -= OnGotActiveValueReward; model.totalActiveValueUpdateEvent -= UpdateAwardableEffect; } public void UpdateAwardableEffect() { DailyQuestActiveValueReward rewardRecord; if (model.TryGetActiveValueRewardData(rewardId, out rewardRecord)) { var error = 0; var gotable = TestActiveValueGotable(out error); if (gotable) { m_AwardEffect.gameObject.SetActive(true); m_AwardEffect.Play(); } else { m_AwardEffect.Stop(); } } } private void Awake() { m_PointerDownUp.AddPointerClickListener(OnClick); m_PointerDownUp.AddPointerDownListener(OnPointerDown); m_PointerDownUp.AddPointerUpListener(OnPointerUp); } private void OnClick() { var error = 0; if (TestActiveValueGotable(out error)) { model.RequestGetActiveValueReward(rewardId); } } private void OnPointerDown() { m_RewardPreview.gameObject.SetActive(true); } private void OnPointerUp() { m_RewardPreview.gameObject.SetActive(false); } private void OnEnable() { m_RewardPreview.gameObject.SetActive(false); } private void OnDisable() { m_RewardPreview.gameObject.SetActive(false); } private void OnGotActiveValueReward(int _id) { if (_id != rewardId) { return; } DailyQuestActiveValueReward rewardRecord; if (model.TryGetActiveValueRewardData(rewardId, out rewardRecord)) { m_GotSign.gameObject.SetActive(rewardRecord.got); } UpdateAwardableEffect(); } private bool TestActiveValueGotable(out int _error) { var config = Config.Instance.Get(rewardId); if (model.totalActiveValue < config.Liveness) { _error = 1; return false; } DailyQuestActiveValueReward rewardRecord; if (model.TryGetActiveValueRewardData(rewardId, out rewardRecord)) { if (rewardRecord.got) { _error = 2; return false; } } _error = 0; return true; } } }