//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Thursday, November 23, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
using System.Linq;
|
|
namespace vnxbqy.UI
|
{
|
|
public class TreasureNewGotWin : Window
|
{
|
[SerializeField] Transform m_ContainerMask;
|
[SerializeField] RawImage m_GaussianMask;
|
[SerializeField] RectTransform m_TreasureExhibitionPoint;
|
[SerializeField] RectTransform m_ContainerFinishShow;
|
[SerializeField] Button m_FinishShow;
|
|
[SerializeField] UIAlphaTween m_FadeOut;
|
[SerializeField] RectTransform m_FlyObjectPoint1;
|
[SerializeField] RectTransform m_FlyObjectPoint2;
|
[SerializeField] RectTransform m_FlyObjectPoint3;
|
|
[SerializeField] UIEffect m_GotTreasureSfx;
|
|
[SerializeField] Transform m_ContainerDescription;
|
[SerializeField] RectTransform m_ContainerTreasureName;
|
[SerializeField] UIAlphaTween m_FadeInTreasureName;
|
[SerializeField] Slider m_TreasureNameSlider;
|
[SerializeField] Text m_Category;
|
[SerializeField] Text m_TreasureName;
|
|
[SerializeField] RectTransform m_ContainerFuncUnLock;
|
[SerializeField] Slider m_FuncUnLockSlider;
|
[SerializeField] Text m_UnlockTip;
|
[SerializeField] TreasureNewGotBehaviour[] m_TreasureNewGots;
|
|
[SerializeField] RectTransform m_ContianerStory;
|
[SerializeField] UIAlphaTween m_FadeInStory;
|
[SerializeField] Text m_Story;
|
|
[SerializeField] RectTransform m_ContainerProperty;
|
[SerializeField] Slider m_PropertySlider;
|
[SerializeField] UIAlphaTween m_FadeInProperty;
|
[SerializeField] PropertyBehaviour[] m_BasePropertys;
|
[SerializeField] PropertyBehaviour[] m_SpecialPropertys;
|
|
[SerializeField] RectTransform m_ContainerFightPower;
|
[SerializeField] Text m_FightPower;
|
|
TreasureModel model { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
TaskModel taskmodel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
|
SkillModel skillModel { get { return ModelCenter.Instance.GetModel<SkillModel>(); } }
|
KingTreasureModel kingTreasureModel { get { return ModelCenter.Instance.GetModel<KingTreasureModel>(); } }
|
CrossServerOneVsOneModel oneVsOneModel { get { return ModelCenter.Instance.GetModel<CrossServerOneVsOneModel>(); } }
|
|
FunctionUnlockFlyObject flyObject;
|
FunctionUnlockFlyObject unlockFlyObject1;
|
FunctionUnlockFlyObject unlockFlyObject2;
|
TreasureNewGotBehaviour skillStageBehaviour;
|
|
Treasure treasure;
|
TreasureStage treasureStage;
|
int displayStageCount = 0;
|
float stageTime = 0.7f;
|
public static event Action CloseTreasureNewGotWinEvent;
|
|
ShowStep m_ShowStep = ShowStep.None;
|
ShowStep showStep {
|
get { return m_ShowStep; }
|
set {
|
if (m_ShowStep != value)
|
{
|
m_ShowStep = value;
|
|
switch (m_ShowStep)
|
{
|
case ShowStep.None:
|
break;
|
case ShowStep.ShowModel:
|
OnEnterShowModel();
|
break;
|
case ShowStep.ShowSfx:
|
OnEnterShowSfx();
|
break;
|
case ShowStep.SliderName:
|
OnEnterSliderName();
|
break;
|
case ShowStep.ShowNameAndSliderUnlock:
|
OnEnterShowNameAndSliderUnlock();
|
break;
|
case ShowStep.ShowUnlock:
|
OnEnterShowFuncUnlock();
|
break;
|
case ShowStep.ShowStory:
|
OnEnterShowStory();
|
break;
|
case ShowStep.ShowProperty:
|
OnEnterShowProperty();
|
break;
|
case ShowStep.ShowComplete:
|
OnEnterShowComplete();
|
break;
|
case ShowStep.FadeOut:
|
OnEnterFadeOut();
|
break;
|
case ShowStep.FlyTo:
|
OnEnterFlyto();
|
break;
|
}
|
|
}
|
}
|
}
|
|
#region Built-in
|
protected override void BindController()
|
{
|
|
}
|
|
protected override void AddListeners()
|
{
|
m_FinishShow.AddListener(FinishShow);
|
}
|
|
protected override void OnPreOpen()
|
{
|
PlayerDatas.Instance.hero.Behaviour.StopHandupAI();
|
MapTransferUtility.Instance.Clear();
|
PlayerDatas.Instance.hero.StopPathFind();
|
|
m_ContainerMask.SetActive(false);
|
m_ContainerDescription.SetActive(false);
|
m_ContainerTreasureName.SetActive(false);
|
m_ContianerStory.SetActive(false);
|
m_ContainerFuncUnLock.SetActive(false);
|
m_UnlockTip.SetActive(false);
|
m_ContainerFinishShow.SetActive(false);
|
m_ContainerFightPower.SetActive(false);
|
m_ContainerProperty.SetActive(false);
|
|
for (int i = 0; i < m_TreasureNewGots.Length; i++)
|
{
|
m_TreasureNewGots[i].SetActive(false);
|
}
|
|
model.TryGetTreasure(model.newGotTreasureId, out treasure);
|
treasureStage = treasure.treasureStages.Find((x) =>
|
{
|
return x.stage == treasure.level;
|
});
|
showStep = ShowStep.None;
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
|
}
|
|
protected override void OnAfterClose()
|
{
|
if (unlockFlyObject1 != null)
|
{
|
DestroyObject(unlockFlyObject1.gameObject);
|
unlockFlyObject1 = null;
|
}
|
|
if (unlockFlyObject2 != null)
|
{
|
DestroyObject(unlockFlyObject2.gameObject);
|
unlockFlyObject2 = null;
|
}
|
|
var config = TreasureConfig.Get(model.newGotTreasureId);
|
if (config != null && config.Category == (int)TreasureCategory.Human)
|
{
|
if (PreFightMission.Instance.IsFinished())
|
{
|
taskmodel.AutomaticTripToTask(taskmodel.currentMission);
|
}
|
}
|
|
model.newGotTreasureId = 0;
|
|
if (CloseTreasureNewGotWinEvent != null)
|
{
|
CloseTreasureNewGotWinEvent();
|
}
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
|
CameraUtility.ScreenShotCut(m_GaussianMask, DoPrepare, true);
|
}
|
|
#endregion
|
|
float timer = 0f;
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
|
if (showStep != ShowStep.None)
|
{
|
timer += Time.deltaTime;
|
}
|
|
switch (showStep)
|
{
|
case ShowStep.None:
|
break;
|
case ShowStep.ShowModel:
|
if (timer > 0.3f)
|
{
|
timer = 0f;
|
showStep = ShowStep.ShowSfx;
|
}
|
break;
|
case ShowStep.ShowSfx:
|
if (timer > 0.3f)
|
{
|
timer = 0.0f;
|
showStep = ShowStep.SliderName;
|
}
|
break;
|
case ShowStep.SliderName:
|
m_TreasureNameSlider.value = timer / 0.3f;
|
if (timer > 0.3f)
|
{
|
timer = 0f;
|
showStep = ShowStep.ShowNameAndSliderUnlock;
|
}
|
break;
|
case ShowStep.ShowNameAndSliderUnlock:
|
m_FuncUnLockSlider.value = 0;
|
m_PropertySlider.value = 0;
|
if (timer > 0.3f)
|
{
|
timer = 0f;
|
showStep = ShowStep.ShowUnlock;
|
}
|
break;
|
case ShowStep.ShowUnlock:
|
m_FuncUnLockSlider.value = timer / (displayStageCount * stageTime);
|
if (timer > displayStageCount * stageTime)
|
{
|
timer = 0f;
|
showStep = ShowStep.ShowComplete;
|
}
|
var index = (int)(timer / stageTime);
|
if (index < displayStageCount && index < m_TreasureNewGots.Length
|
&& !m_TreasureNewGots[index].gameObject.activeSelf)
|
{
|
m_TreasureNewGots[index].Show();
|
}
|
break;
|
case ShowStep.ShowStory:
|
if (timer > 0.3f)
|
{
|
timer = 0f;
|
showStep = ShowStep.ShowComplete;
|
}
|
break;
|
case ShowStep.ShowProperty:
|
m_PropertySlider.value = timer / 0.3f;
|
if (timer > 0.3f)
|
{
|
timer = 0f;
|
showStep = ShowStep.ShowComplete;
|
}
|
break;
|
case ShowStep.ShowComplete:
|
if (timer > 0.3f)
|
{
|
timer = 0f;
|
showStep = ShowStep.FadeOut;
|
}
|
break;
|
case ShowStep.FadeOut:
|
if (timer > 0.5f)
|
{
|
timer = 0f;
|
showStep = ShowStep.FlyTo;
|
}
|
break;
|
case ShowStep.FlyTo:
|
break;
|
}
|
|
}
|
|
private void DoPrepare()
|
{
|
showStep = ShowStep.ShowModel;
|
timer = 0f;
|
|
var config = TreasureConfig.Get(treasure.id);
|
m_TreasureName.text = config.Name;
|
m_Story.text = config.Story;
|
m_Category.text = Language.Get(string.Concat("GetTreasure_", config.Category));
|
if ((TreasureCategory)config.Category == TreasureCategory.Human)
|
{
|
m_FightPower.text = model.GetTreasureFightPower(treasure.id, false).ToString();
|
}
|
|
switch ((TreasureCategory)config.Category)
|
{
|
case TreasureCategory.Fairy:
|
case TreasureCategory.Human:
|
m_UnlockTip.text = Language.Get("TreasureCanAwake");
|
break;
|
case TreasureCategory.Demon:
|
m_UnlockTip.text = Language.Get("TreasureAwaked");
|
break;
|
}
|
|
var instance = UIUtility.CreateWidget("TreasureUnlockFlyObject_1", "TreasureUnlockFlyObject_1");
|
unlockFlyObject1 = instance.GetComponent<FunctionUnlockFlyObject>();
|
Transform parent = (treasureStage != null && treasureStage.unlockType == TreasureStageUnlock.Skill)
|
&& (TreasureCategory)config.Category != TreasureCategory.Human
|
&& (TreasureCategory)config.Category != TreasureCategory.Fairy ? m_TreasureExhibitionPoint : m_FlyObjectPoint1;
|
unlockFlyObject1.transform.SetParentEx(parent, Vector3.zero, Vector3.zero, Vector3.one);
|
unlockFlyObject1.SetContent(FunctionUnlockType.Treasure, treasure.id);
|
unlockFlyObject1.SetSpeed(10f);
|
unlockFlyObject1.SetActive(false);
|
|
var _flyObjectPoint = m_FlyObjectPoint2;
|
|
var index = 0;
|
displayStageCount = 0;
|
for (int i = 0; i < m_TreasureNewGots.Length; i++)
|
{
|
TreasureStage _stage = null;
|
for (int k = index; k < treasure.treasureStages.Count; k++)
|
{
|
index++;
|
if (treasure.treasureStages[k].unlockType == TreasureStageUnlock.Func ||
|
treasure.treasureStages[k].unlockType == TreasureStageUnlock.Skill)
|
{
|
_stage = treasure.treasureStages[k];
|
displayStageCount++;
|
break;
|
}
|
}
|
if (_stage != null)
|
{
|
m_TreasureNewGots[i].Display(treasure.id, _stage.stage);
|
if (_stage.unlockType == TreasureStageUnlock.Skill)
|
{
|
skillStageBehaviour = m_TreasureNewGots[i];
|
}
|
}
|
}
|
|
|
if (treasureStage != null && (TreasureCategory)config.Category != TreasureCategory.Fairy
|
&& (TreasureCategory)config.Category != TreasureCategory.Human
|
&& treasureStage.unlockType == TreasureStageUnlock.Skill)
|
{
|
var instance2 = UIUtility.CreateWidget("TreasureUnlockFlyObject_2", "TreasureUnlockFlyObject_2");
|
unlockFlyObject2 = instance2.GetComponent<FunctionUnlockFlyObject>();
|
unlockFlyObject2.transform.SetParentEx(_flyObjectPoint, Vector3.zero, Vector3.zero, Vector3.one);
|
unlockFlyObject2.SetContent(FunctionUnlockType.TreasureSkill, treasure.id);
|
unlockFlyObject2.SetActive(false);
|
flyObject = unlockFlyObject2;
|
|
if ((TreasureCategory)config.Category == TreasureCategory.Demon && treasure.id != 203)
|
{
|
ModelCenter.Instance.GetModel<SkillModel>().jumpToPass = true;
|
}
|
else
|
{
|
ModelCenter.Instance.GetModel<SkillModel>().jumpToPass = false;
|
}
|
}
|
else
|
{
|
switch (config.ID)
|
{
|
case 302:
|
case 305:
|
m_Story.text = config.Verse.Length == 0 ? string.Empty : config.Verse[0];
|
break;
|
case 303:
|
{
|
var killNpcConfig = VIPKillNPCConfig.Get(1);
|
m_Story.text = string.Format(config.Verse[0], killNpcConfig.MaxAtk);
|
}
|
break;
|
case 304://签到相关配置移到功能配置表
|
//var _propertyDict = model.GetSignInPropertys();
|
//if (_propertyDict != null)
|
//{
|
// var _keyValue = _propertyDict.First();
|
// var _propertyConfig = PlayerPropertyConfig.Get(_keyValue.Key);
|
// m_Story.text = string.Format(config.Verse[0], _keyValue.Value, _propertyConfig.Name);
|
//}
|
break;
|
case 306:
|
case 307:
|
case 308:
|
if (treasure.treasureStages[0].unlockType == TreasureStageUnlock.Property)
|
{
|
var _property = treasure.treasureStages[0].propertyDict.First();
|
switch (_property.Key)
|
{
|
case (int)PropertyType.KillMonsExpPercent:
|
m_Story.text = Language.Get("FairyTreasure_2", _property.Value / 100);
|
break;
|
case (int)PropertyType.PVPAddHurt:
|
m_Story.text = Language.Get("FairyTreasure_3", _property.Value / 100);
|
break;
|
case 60:
|
m_Story.text = Language.Get("FairyTreasure_4", _property.Value / 100);
|
break;
|
case 18:
|
m_Story.text = Language.Get("FairyTreasure_9", _property.Value / 100);
|
break;
|
case 37:
|
m_Story.text = Language.Get("FairyTreasure_11", _property.Value / 100);
|
break;
|
}
|
}
|
break;
|
}
|
flyObject = unlockFlyObject1;
|
}
|
|
if ((TreasureCategory)config.Category == TreasureCategory.King)
|
{
|
var season = 0;
|
Dictionary<int, int> basePropertys = null;
|
Dictionary<int, int> specialPropertys = null;
|
if (kingTreasureModel.TryGetSeason(config.ID, out season))
|
{
|
CrossServerOneVsOneModel.CrossServerOneVsOneHistory history;
|
if (oneVsOneModel.TryGetOneVsOneHistory(season, out history))
|
{
|
KingTreasureModel.Division division;
|
if (kingTreasureModel.TryGetDivision(config.ID, history.rewardLevel, out division))
|
{
|
basePropertys = division.basePropertys;
|
specialPropertys = division.specialPropertys;
|
}
|
}
|
}
|
var propertyIndex = 0;
|
if (basePropertys != null)
|
{
|
foreach (var key in basePropertys.Keys)
|
{
|
if (propertyIndex < m_BasePropertys.Length)
|
{
|
m_BasePropertys[propertyIndex].SetActive(true);
|
m_BasePropertys[propertyIndex].DisplayUpper(key, basePropertys[key]);
|
}
|
propertyIndex++;
|
}
|
}
|
for (int i = propertyIndex; i < m_BasePropertys.Length; i++)
|
{
|
m_BasePropertys[i].SetActive(false);
|
}
|
propertyIndex = 0;
|
if (specialPropertys != null)
|
{
|
foreach (var key in specialPropertys.Keys)
|
{
|
if (propertyIndex < m_SpecialPropertys.Length)
|
{
|
m_SpecialPropertys[propertyIndex].SetActive(true);
|
m_SpecialPropertys[propertyIndex].DisplayUpper(key, specialPropertys[key]);
|
}
|
propertyIndex++;
|
}
|
}
|
for (int i = propertyIndex; i < m_SpecialPropertys.Length; i++)
|
{
|
m_SpecialPropertys[i].SetActive(false);
|
}
|
}
|
}
|
|
private void FinishShow()
|
{
|
if (showStep == ShowStep.ShowComplete)
|
{
|
timer = 0f;
|
showStep = ShowStep.FadeOut;
|
}
|
}
|
|
private void FlyTo()
|
{
|
m_ContainerMask.SetActive(false);
|
m_ContainerDescription.SetActive(false);
|
flyObject.Begin(CloseClick);
|
}
|
|
public override void CloseClick()
|
{
|
base.CloseClick();
|
}
|
|
private void OnEnterShowModel()
|
{
|
m_FadeOut.SetStartState();
|
m_ContainerMask.SetActive(true);
|
}
|
|
private void OnEnterShowSfx()
|
{
|
m_GotTreasureSfx.Play();
|
}
|
|
private void OnEnterSliderName()
|
{
|
unlockFlyObject1.SetActive(true);
|
m_ContainerDescription.SetActive(true);
|
m_TreasureNameSlider.value = 0f;
|
}
|
|
private void OnEnterShowFuncUnlock()
|
{
|
m_ContainerFuncUnLock.SetActive(true);
|
var config = TreasureConfig.Get(treasure.id);
|
if ((TreasureCategory)config.Category == TreasureCategory.Human)
|
{
|
m_ContainerFightPower.SetActive(false);
|
}
|
else if (config.Category == (int)TreasureCategory.Fairy && config.ID != 304)
|
{
|
m_ContainerFuncUnLock.SetActive(false);
|
showStep = ShowStep.ShowStory;
|
return;
|
}
|
else if (config.Category == (int)TreasureCategory.King)
|
{
|
m_ContainerFuncUnLock.SetActive(false);
|
showStep = ShowStep.ShowProperty;
|
return;
|
}
|
if (displayStageCount == 0)
|
{
|
showStep = ShowStep.ShowComplete;
|
}
|
}
|
|
private void OnEnterShowNameAndSliderUnlock()
|
{
|
m_ContainerTreasureName.SetActive(true);
|
m_FadeInTreasureName.SetStartState();
|
m_FadeInTreasureName.Play();
|
|
m_UnlockTip.SetActive(true);
|
}
|
|
private void OnEnterShowStory()
|
{
|
m_ContianerStory.SetActive(true);
|
m_FadeInStory.SetStartState();
|
m_FadeInStory.Play();
|
}
|
|
private void OnEnterShowProperty()
|
{
|
m_ContainerProperty.SetActive(true);
|
m_FadeInProperty.SetStartState();
|
m_FadeInProperty.Play();
|
}
|
|
private void OnEnterShowComplete()
|
{
|
m_ContainerFinishShow.SetActive(true);
|
if (skillStageBehaviour != null)
|
{
|
var worldpos = skillStageBehaviour.m_SkillContainer.TransformPoint(Vector3.zero);
|
var localpos = (transform as RectTransform).InverseTransformPoint(worldpos);
|
m_FlyObjectPoint2.localPosition = localpos;
|
}
|
}
|
|
private void OnEnterFadeOut()
|
{
|
if (unlockFlyObject2 != null)
|
{
|
unlockFlyObject2.SetActive(true);
|
}
|
m_FadeOut.SetStartState();
|
m_FadeOut.Play();
|
}
|
|
private void OnEnterFlyto()
|
{
|
FlyTo();
|
}
|
|
enum ShowStep
|
{
|
None,
|
ShowSfx,
|
ShowModel,
|
SliderName,
|
ShowNameAndSliderUnlock,
|
ShowUnlock,
|
ShowStory,
|
ShowProperty,
|
ShowComplete,
|
FadeOut,
|
FlyTo,
|
}
|
|
|
}
|
|
}
|