using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
public class FairyTreasureCollectPanelPattern5 : FairyTreasureCollect
|
{
|
[SerializeField] RectTransform m_ContainerAchievement;
|
[SerializeField] ScrollRect m_AchievementScroller;
|
[SerializeField] FurnacesAchievement[] m_FurnacesAchievements;
|
[SerializeField] Button m_AchievementGetBtn;
|
[SerializeField] Button m_ActiveBtn;
|
[SerializeField] RectTransform m_ContainerHoles;
|
[SerializeField] Image[] m_FurnacesIcons;
|
[SerializeField] RectTransform m_ContainerFunc;
|
[SerializeField] Image m_FuncIcon;
|
[SerializeField] Text m_FuncTitle;
|
[SerializeField] RectTransform m_ContainerFurnace;
|
[SerializeField] Text m_FurnaceLv;
|
[SerializeField] Slider m_StoveSlider;
|
[SerializeField] Text m_Progress;
|
[SerializeField] RectTransform m_CurrentProperty;
|
[SerializeField] Text[] m_CurrentPropertyNames;
|
[SerializeField] Text[] m_CurrentPropertyValues;
|
[SerializeField] RectTransform m_NextProperty;
|
[SerializeField] Text[] m_NextPropertyNames;
|
[SerializeField] Text[] m_NextPropertyValues;
|
[SerializeField] RectTransform m_MaxLevelContainer;
|
|
[SerializeField] PositionTween m_AchievementTween;
|
[SerializeField] PositionTween m_FurnaceTween;
|
[SerializeField] PositionTween m_FuncTween;
|
|
[SerializeField] Button m_GotoStove;
|
|
AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
|
|
AchievementModel achievementModel
|
{
|
get
|
{
|
return ModelCenter.Instance.GetModel<AchievementModel>();
|
}
|
}
|
|
TaskModel task { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
|
|
Achievement currentAchievement;
|
|
int completedAchivement = 0;
|
|
protected override void Awake()
|
{
|
m_AchievementGetBtn.onClick.AddListener(OnAchievementGet);
|
m_GotoStove.onClick.AddListener(GotoStove);
|
m_ActiveBtn.onClick.AddListener(Active);
|
}
|
|
public override void Display(int _treasureId, bool _tween = false)
|
{
|
base.Display(_treasureId);
|
m_GotoGet.onClick.RemoveAllListeners();
|
m_GotoGet.onClick.AddListener(GotoGet);
|
|
model.TryGetTreasure(_treasureId, out treasure);
|
|
m_ContainerFight.SetActive(false);
|
|
m_GotoBtnText.text = Language.Get("GotoComplete");
|
|
var config = TreasureConfig.Get(_treasureId);
|
|
m_TreasureStory.text = config.Story;
|
Display();
|
DisplayProgress();
|
DisplayFurnacesHole();
|
DisplayFurnace();
|
DisplayFunc();
|
|
achievementModel.achievementCompletedEvent -= AchievementCompletedEvent;
|
achievementModel.achievementCompletedEvent += AchievementCompletedEvent;
|
model.treasureStageUpEvent -= TreasureStageUpEvent;
|
model.treasureStageUpEvent += TreasureStageUpEvent;
|
|
completedAchivement = 0;
|
|
if (_tween)
|
{
|
if (m_AchievementTween.gameObject.activeInHierarchy)
|
{
|
m_AchievementTween.Play();
|
}
|
if (m_FurnaceTween.gameObject.activeInHierarchy)
|
{
|
m_FurnaceTween.Play();
|
}
|
m_FuncTween.Play();
|
m_StoryTween.Play();
|
}
|
else
|
{
|
m_AchievementTween.SetEndState();
|
m_FurnaceTween.SetEndState();
|
m_FuncTween.SetEndState();
|
m_StoryTween.SetEndState();
|
}
|
}
|
|
protected override void GotoGet()
|
{
|
achievementModel.GotoCompleteAchievement(currentAchievement.id);
|
}
|
|
public override void Dispose()
|
{
|
m_GotoGet.onClick.RemoveAllListeners();
|
achievementModel.achievementCompletedEvent -= AchievementCompletedEvent;
|
model.treasureStageUpEvent -= TreasureStageUpEvent;
|
for (int i = 0; i < m_FurnacesAchievements.Length; i++)
|
{
|
m_FurnacesAchievements[i].Dispose();
|
}
|
}
|
|
private void TreasureStageUpEvent(int _id)
|
{
|
if (_id == treasureId && model.isServerReady)
|
{
|
TreasureActiveEffect();
|
}
|
}
|
|
private void AchievementCompletedEvent(int _id)
|
{
|
if (model.GetFurnacesAchievements().Contains(_id))
|
{
|
Display();
|
DisplayFurnacesHole();
|
}
|
}
|
|
private void DisplayProgress()
|
{
|
m_ContainerAchievement.SetActive(treasure.state == TreasureState.Collected && treasure.level <= 1);
|
var _processingIndex = -1;
|
if (treasure.state == TreasureState.Collected && treasure.level <= 1)
|
{
|
var _list = model.GetFurnacesAchievements();
|
for (int i = 0; i < m_FurnacesAchievements.Length; i++)
|
{
|
var _beforeId = i == 0 ? 0 : _list[i - 1];
|
Achievement _beforeAchievement;
|
bool _beforeComplete = true;
|
if (achievementModel.TryGetAchievement(_beforeId, out _beforeAchievement))
|
{
|
_beforeComplete = _beforeAchievement.completed;
|
}
|
Achievement achievement;
|
achievementModel.TryGetAchievement(_list[i], out achievement);
|
var config = SuccessConfig.Get(_list[i]);
|
var _processing = !achievement.completed && _beforeComplete;
|
if ((_processing || Achievement.IsReach(achievement.id, achievement.progress)) && _processingIndex == -1)
|
{
|
_processingIndex = i;
|
}
|
m_FurnacesAchievements[i].Display(_list[i]);
|
}
|
}
|
if (_processingIndex != -1)
|
{
|
var _position = (m_FurnacesAchievements.Length - _processingIndex) * 145.5f;
|
var _height = (m_AchievementScroller.transform as RectTransform).rect.height;
|
_position -= _height;
|
m_AchievementScroller.verticalNormalizedPosition = Mathf.Clamp01(_position / (m_AchievementScroller.content.rect.height - _height));
|
}
|
}
|
|
private void DisplayFurnacesHole()
|
{
|
m_ContainerHoles.SetActive(treasure.state == TreasureState.Collected);
|
if (treasure.state == TreasureState.Collected && treasure.level == 1)
|
{
|
var _list = model.GetFurnacesAchievements();
|
for (int i = 0; i < m_FurnacesIcons.Length; i++)
|
{
|
Achievement achievement;
|
achievementModel.TryGetAchievement(_list[i], out achievement);
|
if (achievement != null && achievement.id == completedAchivement)
|
{
|
completedAchivement = 0;
|
if (achievement.completed)
|
{
|
var _effect = EffectMgr.Instance.PlayUIEffect(5161, 2700, m_FurnacesIcons[i].transform.parent, false);
|
if (_effect != null)
|
{
|
var _index = i;
|
_effect.OnComplete = () =>
|
{
|
_effect.OnComplete = null;
|
m_FurnacesIcons[_index].SetActive(true);
|
//if (_index == m_FurnacesIcons.Length - 1)
|
//{
|
// TreasureActiveEffect();
|
//}
|
};
|
}
|
continue;
|
}
|
}
|
m_FurnacesIcons[i].SetActive(achievement != null && achievement.completed);
|
}
|
}
|
if (treasure.state == TreasureState.Collected && treasure.level >= 2)
|
{
|
for (int i = 0; i < m_FurnacesIcons.Length; i++)
|
{
|
m_FurnacesIcons[i].SetActive(true);
|
}
|
}
|
}
|
|
private void TreasureActiveEffect()
|
{
|
var _effect = EffectMgr.Instance.PlayUIEffect(5160, 2700, this.transform, false);
|
if (_effect != null)
|
{
|
_effect.OnComplete = () =>
|
{
|
_effect.OnComplete = null;
|
StartCoroutine(Co_Fly());
|
};
|
}
|
}
|
|
IEnumerator Co_Fly()
|
{
|
yield return WaitingForSecondConst.WaitMS300;
|
BeginFly();
|
}
|
|
private void BeginFly()
|
{
|
CameraUtility.ScreenShotCut((Action<Texture2D>)((Texture2D _tex) =>
|
{
|
TreasureStageUpTriggerWin.screenShotCut = _tex;
|
WindowJumpMgr.Instance.ClearJumpData();
|
WindowCenter.Instance.Close<TreasureBaseWin>();
|
WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
if (WindowCenter.Instance.IsOpen<DialogueDuidanceWin>())
|
{
|
WindowCenter.Instance.Close<DialogueDuidanceWin>();
|
}
|
if (WindowCenter.Instance.IsOpen<TaskBoxBGMWin>())
|
{
|
WindowCenter.Instance.Close<TaskBoxBGMWin>();
|
}
|
}));
|
}
|
|
private void Display()
|
{
|
GetCurrentAchievement();
|
if (treasure.state != TreasureState.Collected)
|
{
|
var config = TreasureConfig.Get(treasure.id);
|
m_AchievementGetBtn.SetActive(false);
|
m_ActiveBtn.SetActive(false);
|
m_GotoGet.SetActive(false);
|
m_ContainerLocked.SetActive(true);
|
m_LockedDescription.text = Language.Get("BlastFurnaceGet", config.ChallengeLevel);
|
m_ContainerAchievement.SetActive(false);
|
}
|
else if (currentAchievement == null || treasure.level >= 2)
|
{
|
m_AchievementGetBtn.SetActive(false);
|
m_GotoGet.SetActive(false);
|
m_ContainerLocked.SetActive(false);
|
m_ActiveBtn.SetActive(currentAchievement == null && treasure.level == 1);
|
}
|
else
|
{
|
m_ContainerLocked.SetActive(false);
|
m_ActiveBtn.SetActive(false);
|
var _isReach = Achievement.IsReach(currentAchievement.id, currentAchievement.progress);
|
m_AchievementGetBtn.SetActive(_isReach);
|
var _list = model.GetFurnacesAchievements();
|
m_GotoGet.SetActive(!_isReach);
|
}
|
|
m_GotoStove.SetActive(treasure.level >= 2);
|
}
|
|
private void OnAchievementGet()
|
{
|
if (Achievement.IsReach(currentAchievement.id, currentAchievement.progress))
|
{
|
completedAchivement = currentAchievement.id;
|
achievementModel.GetAchievementReward(currentAchievement.id);
|
}
|
}
|
|
private void DisplayFunc()
|
{
|
m_FuncTitle.text = treasure.state == TreasureState.Collected && treasure.level >= 2 ? Language.Get("FairyTreasureOpenFunc") : Language.Get("FairyTreasureUnOpenFunc");
|
var funcStage = treasure.treasureStages.Find((x) =>
|
{
|
return x.unlockType == TreasureStageUnlock.Func;
|
});
|
var config = FuncOpenLVConfig.Get(funcStage.func);
|
if (config != null)
|
{
|
m_FuncIcon.SetSprite(config.Icon);
|
}
|
}
|
|
private void DisplayFurnace()
|
{
|
m_ContainerFurnace.SetActive(treasure.state == TreasureState.Collected && treasure.level >= 2);
|
if (treasure.state == TreasureState.Collected && treasure.level >= 2)
|
{
|
var stoveLevel = alchemyModel.stoveLevel;
|
m_FurnaceLv.text = Language.Get("BlastFurnace101", stoveLevel);
|
var configNow = RefineStoveConfig.Get(stoveLevel);
|
var min = Mathf.Min(m_CurrentPropertyNames.Length, m_CurrentPropertyValues.Length);
|
for (int i = 0; i < min; i++)
|
{
|
m_CurrentPropertyNames[i].SetActive(false);
|
m_CurrentPropertyValues[i].SetActive(false);
|
}
|
|
m_NextProperty.SetActive(false);
|
m_MaxLevelContainer.SetActive(false);
|
|
var isMax = !RefineStoveConfig.Has(stoveLevel + 1);
|
var stoveConfig = RefineStoveConfig.Get(stoveLevel);
|
|
m_StoveSlider.minValue = 0;
|
m_StoveSlider.maxValue = 1;
|
|
if (isMax)
|
{
|
m_StoveSlider.value = 1;
|
}
|
else
|
{
|
m_StoveSlider.value = Mathf.Clamp01((float)alchemyModel.stoveExp / stoveConfig.Exp);
|
}
|
|
if (!isMax)
|
{
|
m_Progress.text = StringUtility.Contact(alchemyModel.stoveExp, "/", stoveConfig.Exp);
|
}
|
else
|
{
|
m_Progress.text = Language.Get("L1055");
|
}
|
}
|
}
|
|
private void GotoStove()
|
{
|
WindowCenter.Instance.Close<TreasureBaseWin>();
|
WindowCenter.Instance.Close<MainInterfaceWin>();
|
WindowCenter.Instance.Open<AlchemyBaseWin>();
|
}
|
|
private void Active()
|
{
|
CA515_tagCMMagicWeaponUp _pak = new CA515_tagCMMagicWeaponUp();
|
_pak.MWID = (uint)treasureId;
|
GameNetSystem.Instance.SendInfo(_pak);
|
}
|
|
|
private void GetCurrentAchievement()
|
{
|
currentAchievement = null;
|
var _list = model.GetFurnacesAchievements();
|
for (int i = 0; i < _list.Count; i++)
|
{
|
Achievement _achievement;
|
achievementModel.TryGetAchievement(_list[i], out _achievement);
|
if (_achievement == null)
|
{
|
continue;
|
}
|
if (_achievement.completed)
|
{
|
continue;
|
}
|
else
|
{
|
currentAchievement = _achievement;
|
break;
|
}
|
}
|
}
|
}
|
}
|
|