//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Thursday, May 03, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class HumanTreasureWin : Window
|
{
|
[SerializeField] Transform m_ContainerDisplay;
|
[SerializeField] Transform m_Container;
|
[SerializeField] PositionTween m_PositionTween1;
|
[SerializeField] PositionTween m_PositionTween2;
|
[SerializeField] Image m_TreasureName;
|
[SerializeField] Text m_TaskTitle;
|
[SerializeField] Text m_TreasureStory;
|
[SerializeField] Button m_ViewDetail;
|
[SerializeField] Image m_SkillIcon;
|
[SerializeField] Text m_SkillName;
|
[SerializeField] Button m_Challenge;
|
[SerializeField] Transform m_ContainerCondition;
|
[SerializeField] Text m_ChallengeCondition;
|
[SerializeField] Text m_TaskClueTitle;
|
[SerializeField] Slider m_TaskSlider;
|
[SerializeField] Text m_TaskProgress;
|
[SerializeField] UIEffect m_EffectInduction;
|
[SerializeField] UIEffect m_EffectInduction1;
|
[SerializeField] HumanTreasureTaskCell m_HumanTaskCell;
|
|
[SerializeField] ScrollerController m_TaskController;
|
|
bool animationStep = false;
|
|
float displayTime = 0f;
|
|
List<int> animationClues = new List<int>();
|
|
TreasureModel model
|
{
|
get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
|
}
|
|
TaskModel taskModel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
|
RoleModel roleModel { get { return ModelCenter.Instance.GetModel<RoleModel>(); } }
|
|
protected override void BindController()
|
{
|
m_TaskController.lockType = EnhanceLockType.KeepVertical;
|
}
|
|
protected override void AddListeners()
|
{
|
m_Challenge.AddListener(Challenge);
|
m_ViewDetail.AddListener(ViewDetail);
|
|
m_TaskController.OnRefreshCell += OnRefreshCell;
|
m_TaskController.OnGetDynamicSize += OnGetDynamicSize;
|
}
|
|
protected override void OnPreOpen()
|
{
|
animationStep = false;
|
model.isClickInduction = false;
|
TreasureBaseWin.allowSelectTreasure += AllowSelectTreasure;
|
model.treasureSelectedEvent += TreasureSelectedEvent;
|
model.onInductionTaskComplete += OnInductionTaskComplete;
|
HumanTreasureSkillDetailWin.onPreviewTreasureSkill += OnPreviewTreasureSkill;
|
roleModel.OnCustomAwardsEvent += OnCustomAwardsEvent;
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
Display();
|
DisplayAnimation();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
TreasureBaseWin.allowSelectTreasure -= AllowSelectTreasure;
|
model.treasureSelectedEvent -= TreasureSelectedEvent;
|
model.onInductionTaskComplete -= OnInductionTaskComplete;
|
HumanTreasureSkillDetailWin.onPreviewTreasureSkill -= OnPreviewTreasureSkill;
|
roleModel.OnCustomAwardsEvent -= OnCustomAwardsEvent;
|
|
StopAllCoroutines();
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
|
void Display()
|
{
|
DisplayBase();
|
DisplayProgress();
|
DisplayTasks();
|
}
|
|
void DisplayBase()
|
{
|
//var config = TreasureConfig.Get(model.selectedTreasure);
|
//m_TreasureName.SetSprite(config.TreasureNameIcon);
|
//m_TreasureStory.text = config.Story;
|
|
//var chapterConfig = TreasureChapterConfig.Get(model.selectedTreasure);
|
//m_ChallengeCondition.text = chapterConfig.condition;
|
//m_TaskClueTitle.text = chapterConfig.taskClueTitle;
|
|
//List<int> tasks = null;
|
//if (model.TryGetTreasureTasks(model.selectedTreasure, out tasks))
|
//{
|
// var taskConfig = TaskListConfig.Get(tasks[0]);
|
// m_TaskTitle.text = taskConfig.ChapterName;
|
//}
|
|
//Treasure treasure;
|
//if (model.TryGetTreasure(model.selectedTreasure, out treasure))
|
//{
|
// var skillId = treasure.skillId;
|
// var skillConfig = SkillConfig.Get(skillId);
|
// m_SkillIcon.SetSprite(skillConfig.IconName);
|
// m_SkillName.text = skillConfig.SkillName;
|
//}
|
}
|
|
void DisplayProgress()
|
{
|
Treasure treasure;
|
if (model.TryGetTreasure(model.selectedTreasure, out treasure))
|
{
|
var satisfyChallenge = model.SatisfyChallenge(model.selectedTreasure);
|
|
m_Challenge.SetActive(satisfyChallenge);
|
m_ContainerCondition.SetActive(!satisfyChallenge && treasure.state != TreasureState.Collected);
|
|
var progress = 1f;
|
|
Dictionary<int, List<int>> clues;
|
if (model.TryGetTreasureClues(model.selectedTreasure, out clues))
|
{
|
var count = model.GetCompleteTaskCount(model.selectedTreasure);
|
progress = Mathf.Clamp01((float)count / clues.Count);
|
m_TaskProgress.text = StringUtility.Contact((int)(progress * 100), "%");
|
}
|
|
m_TaskSlider.value = progress;
|
}
|
}
|
|
void DisplayTasks(bool taskAnimation = false)
|
{
|
//var inductionTaskId = 0;
|
//model.TryGetLatestInductionTask(model.selectedTreasure, out inductionTaskId);
|
|
//var inductionState = model.GetTreasureInductionState(model.selectedTreasure);
|
|
//animationClues.Clear();
|
|
//displayTime = 0f;
|
|
//var index = -1;
|
//var jumpIndex = -1;
|
|
//m_TaskController.Refresh();
|
//Dictionary<int, List<int>> clues;
|
//if (model.TryGetTreasureClues(model.selectedTreasure, out clues))
|
//{
|
// var lastClue = 0;
|
// foreach (var clue in clues.Keys)
|
// {
|
// var display = false;
|
// var tasks = clues[clue];
|
// switch (inductionState)
|
// {
|
// case -1:
|
// case 0:
|
// display = TaskListConfig.GetMissionIndex(inductionTaskId) > TaskListConfig.GetMissionIndex(tasks[tasks.Count - 1]);
|
// break;
|
// case 1:
|
// display = true;
|
// break;
|
// }
|
|
// var clueState = model.GetClueState(model.selectedTreasure, clue);
|
|
// if (display)
|
// {
|
// if (taskAnimation)
|
// {
|
// if (TaskListConfig.GetMissionIndex(model.displayInductionId) < TaskListConfig.GetMissionIndex(tasks[tasks.Count - 1]))
|
// {
|
// animationClues.Add(clue);
|
// }
|
// }
|
|
// index++;
|
// m_TaskController.AddCell(ScrollerDataType.Header, clue);
|
// lastClue = clue;
|
|
// if (model.gotoAwardClue != -1)
|
// {
|
// if (clue == model.gotoAwardClue)
|
// jumpIndex = index;
|
// }
|
// else if (clueState != 0)
|
// {
|
// jumpIndex = index;
|
// }
|
// }
|
// }
|
// HumanTreasureTaskCell.lastClue = lastClue;
|
// if (inductionState == 0)
|
// {
|
// index++;
|
// HumanTreasureTaskCell.lastClue = -1;
|
// m_TaskController.AddCell(ScrollerDataType.Normal, inductionTaskId);
|
// jumpIndex = index;
|
// }
|
//}
|
//m_TaskController.Restart();
|
|
//if (taskAnimation)
|
//{
|
// Clock.AlarmAfter(Mathf.CeilToInt(displayTime + 0.6f), () =>
|
// {
|
// m_TaskController.mScrollRect.enabled = true;
|
// animationClues.Clear();
|
// });
|
//}
|
//else
|
//{
|
// m_TaskController.mScrollRect.enabled = true;
|
// if (jumpIndex != -1)
|
// {
|
// m_TaskController.JumpIndex(jumpIndex);
|
// }
|
//}
|
//model.gotoAwardClue = -1;
|
}
|
|
void DisplayAnimation()
|
{
|
animationStep = true;
|
|
m_PositionTween1.Play();
|
m_PositionTween2.Play();
|
|
UI3DTreasureSelectStage.Instance.Tween(OnTweenComplete);
|
|
m_Container.SetActive(false);
|
}
|
|
private void OnTweenComplete()
|
{
|
animationStep = false;
|
m_Container.SetActive(true);
|
}
|
|
private void TreasureSelectedEvent(int obj)
|
{
|
StopAllCoroutines();
|
|
m_PositionTween1.Stop();
|
m_PositionTween2.Stop();
|
m_PositionTween1.SetEndState();
|
m_PositionTween2.SetEndState();
|
m_Container.SetActive(true);
|
UI3DTreasureSelectStage.Instance.SetEndState();
|
Display();
|
}
|
|
private void OnPreviewTreasureSkill(bool state)
|
{
|
if (state)
|
{
|
UI3DTreasureSelectStage.Instance.CloseRenderCamera();
|
}
|
else
|
{
|
UI3DTreasureSelectStage.Instance.OpenRenderCamera();
|
}
|
}
|
|
private void OnInductionTaskComplete(int id)
|
{
|
if (id == model.selectedTreasure)
|
{
|
var count = m_TaskController.GetNumberOfCells(m_TaskController.m_Scorller);
|
m_TaskController.JumpIndex(count - 1);
|
m_EffectInduction.Play();
|
m_EffectInduction1.Play();
|
m_TaskController.mScrollRect.enabled = false;
|
StartCoroutine(Co_DelayShowTask());
|
}
|
}
|
|
IEnumerator Co_DelayShowTask()
|
{
|
yield return WaitingForSecondConst.WaitMS3000;
|
DisplayTasks(true);
|
|
yield return WaitingForSecondConst.WaitMS1000;
|
if (model.selectedTreasure == 102 && !NewBieCenter.Instance.inGuiding
|
&& !NewBieCenter.Instance.IsGuideCompleted(128))
|
{
|
FunctionalGuideCenter.Instance.StartGuide(128);
|
}
|
}
|
|
private void Challenge()
|
{
|
var config = TreasureConfig.Get(model.selectedTreasure);
|
if (config != null)
|
{
|
if (model.selectedTreasure == 101)
|
{
|
ClientDungeonStageUtility.GotoNormalClientDungeon(TreasureModel.CLIENTDATAMAP, TreasureModel.CLIENTDATAMAP, 0);
|
return;
|
}
|
if (PlayerDatas.Instance.baseData.LV >= config.ChallengeLevel)
|
{
|
model.collectingHuman = model.selectedTreasure;
|
ModelCenter.Instance.GetModel<DungeonModel>().SingleChallenge(TreasureModel.TREASURE_DATAMAPID, config.LineId);
|
}
|
}
|
}
|
|
private void ViewDetail()
|
{
|
HumanTreasureSkillDetailWin.treasureId = model.selectedTreasure;
|
WindowCenter.Instance.Open<HumanTreasureSkillDetailWin>();
|
}
|
|
private bool AllowSelectTreasure(int treasureId)
|
{
|
if (NewBieCenter.Instance.inGuiding || animationStep)
|
{
|
return false;
|
}
|
return true;
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
if (type == ScrollerDataType.Header)
|
{
|
var taskCell = cell as HumanTreasureTaskCell;
|
taskCell.transform.SetParent(m_TaskController.m_Scorller.LayoutGroup.transform);
|
var animation = false;
|
if (animationClues.Contains(cell.index))
|
{
|
animation = true;
|
displayTime += 0.6f;
|
}
|
taskCell.Display(cell.index, animation, displayTime);
|
}
|
else if (type == ScrollerDataType.Normal)
|
{
|
var taskCell = cell as HumanInductionTaskCell;
|
taskCell.Display(cell.index);
|
}
|
}
|
|
private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height)
|
{
|
height = 0;
|
//if (type == ScrollerDataType.Normal)
|
//{
|
// return false;
|
//}
|
//else
|
//{
|
// var config = TreasureConfig.Get(model.selectedTreasure);
|
// Dictionary<int, List<int>> clues;
|
// if (model.TryGetTreasureClues(model.selectedTreasure, out clues)
|
// && clues.ContainsKey(index))
|
// {
|
// var tasks = clues[index];
|
// var clueState = model.GetClueState(model.selectedTreasure, index);
|
// if (clueState == 1 && tasks.Count > 0)
|
// {
|
// var text = m_HumanTaskCell.taskName;
|
// var singleLabelHeight = text.rectTransform.rect.height;
|
// var labelHeight = 0f;
|
// bool hasAward = false;
|
// for (int i = 0; i < tasks.Count; i++)
|
// {
|
// var taskConfig = TaskListConfig.Get(tasks[i]);
|
// var taskInfoConfig = TASKINFOConfig.Get(taskConfig.TaskName);
|
// if (taskInfoConfig != null)
|
// {
|
// labelHeight += m_HumanTaskCell.taskName.cachedTextGeneratorForLayout.GetPreferredHeight(taskInfoConfig.show_writing,
|
// text.GetGenerationSettings(new Vector2(text.rectTransform.rect.size.x, 0.0f))) / text.pixelsPerUnit;
|
// }
|
// else
|
// {
|
// labelHeight += singleLabelHeight;
|
// }
|
// if (taskConfig.AwardID > 0)
|
// {
|
// hasAward = true;
|
// }
|
// }
|
// labelHeight += hasAward ? 82 : 0;
|
|
// height = m_HumanTaskCell.height + (m_HumanTaskCell.taskLayout.spacing * (tasks.Count - 1)) + labelHeight
|
// + m_HumanTaskCell.taskLayout.padding.top + m_HumanTaskCell.taskLayout.padding.bottom;
|
// return true;
|
// }
|
// else if (tasks.Count > 0)
|
// {
|
// for (int i = 0; i < tasks.Count; i++)
|
// {
|
// var taskConfig = TaskListConfig.Get(tasks[i]);
|
// if (taskConfig.AwardID > 0)
|
// {
|
// height = m_HumanTaskCell.height + 82;
|
// return true;
|
// }
|
// }
|
// }
|
// }
|
//}
|
return false;
|
}
|
|
void OnCustomAwardsEvent()
|
{
|
m_TaskController.m_Scorller.RefreshActiveCellViews();
|
}
|
}
|
}
|
|
|
|
|