//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, May 07, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI {
|
|
public class TreasureStageTipWin : Window
|
{
|
[SerializeField] RectTransform m_ContainerDisplay;
|
[SerializeField] RectTransform m_ContainerSkill;
|
[SerializeField] RectTransform m_ContainerFuncSoul;
|
|
[SerializeField] Image m_SkillIcon;
|
[SerializeField] Text m_SkillName;
|
[SerializeField] Text m_SkillCD;
|
[SerializeField] Text m_SkillDescription;
|
|
[SerializeField] Image m_Icon;
|
[SerializeField] Text m_StageName;
|
[SerializeField] Text m_Description;
|
|
TreasureModel m_Model;
|
TreasureModel model
|
{
|
get
|
{
|
return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<TreasureModel>());
|
}
|
}
|
|
Treasure m_Treasure;
|
TreasureStage m_TreasureStage;
|
|
private float ratio = 1.0f;
|
|
static Vector2 targetPosition = Vector2.zero;
|
|
public static int selectStage = 0;
|
#region Built-in
|
protected override void BindController()
|
{
|
var _canva = WindowCenter.Instance.uiRoot.modalCanvas.GetComponentInChildren<Canvas>();
|
if (_canva != null)
|
{
|
ratio = _canva.scaleFactor;
|
}
|
}
|
|
protected override void AddListeners()
|
{
|
}
|
|
protected override void OnPreOpen()
|
{
|
Display();
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
m_ContainerDisplay.localPosition = targetPosition;
|
CheckPlayerDetailPosition(m_ContainerDisplay.sizeDelta.y / 2);
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
void Display()
|
{
|
model.TryGetTreasure(model.selectedTreasure, out m_Treasure);
|
m_TreasureStage = m_Treasure.treasureStages.Find((x) =>
|
{
|
return x.stage == selectStage;
|
});
|
|
if (m_TreasureStage == null)
|
{
|
return;
|
}
|
|
m_ContainerSkill.gameObject.SetActive(false);
|
m_ContainerFuncSoul.gameObject.SetActive(false);
|
|
switch (m_TreasureStage.unlockType)
|
{
|
case TreasureStageUnlock.Skill:
|
m_ContainerSkill.gameObject.SetActive(true);
|
var _job = PlayerDatas.Instance.baseData.Job;
|
var _skillId = m_TreasureStage.skillDict.ContainsKey(_job) ? m_TreasureStage.skillDict[_job] : 0;
|
if (_skillId > 0)
|
{
|
var skillConfig = SkillConfig.Get(_skillId);
|
m_SkillIcon.SetSprite(skillConfig.IconName);
|
m_SkillName.text = skillConfig.SkillName;
|
m_SkillCD.text = skillConfig.CoolDownTime == 0 ? string.Empty :
|
Language.Get("L1065", skillConfig.CoolDownTime / 1000);
|
m_SkillDescription.text = skillConfig.Description;
|
}
|
break;
|
case TreasureStageUnlock.Func:
|
m_ContainerFuncSoul.gameObject.SetActive(true);
|
var funcConfig = FuncOpenLVConfig.Get(m_TreasureStage.func);
|
m_Icon.SetSprite(funcConfig.Icon);
|
m_StageName.text = funcConfig.Remark;
|
var funcPreview = FunctionForecastConfig.Get(m_TreasureStage.func);
|
if (funcPreview != null)
|
{
|
m_Description.text = UIHelper.ReplaceNewLine(funcPreview.DetailDescribe);
|
}
|
else
|
{
|
m_Description.text = string.Empty;
|
}
|
break;
|
case TreasureStageUnlock.Treasure:
|
m_ContainerFuncSoul.gameObject.SetActive(true);
|
var treasureConfig = TreasureConfig.Get(m_TreasureStage.treasure);
|
m_Icon.SetSprite(treasureConfig.Icon);
|
m_StageName.text = treasureConfig.Name;
|
m_Description.text = UIHelper.ReplaceNewLine(treasureConfig.Verse.Length > 0 ? treasureConfig.Verse[0] : string.Empty);
|
break;
|
case TreasureStageUnlock.TreasureSoul:
|
m_ContainerFuncSoul.gameObject.SetActive(true);
|
var treasureSoulConfig = TreasurePrivilegeConfig.Get(m_TreasureStage.treasureSoul);
|
m_Icon.SetSprite(treasureSoulConfig.Icon);
|
m_StageName.text = treasureSoulConfig.Name;
|
m_Description.text = UIHelper.ReplaceNewLine(treasureSoulConfig.Description);
|
break;
|
}
|
}
|
|
private void CheckPlayerDetailPosition(float _height)
|
{
|
_height = _height * ratio;
|
Vector3 pos = m_ContainerDisplay.localPosition;
|
if (Mathf.Abs(pos.y - _height) > Screen.height / 2)
|
{
|
pos.y = (_height - Screen.height / 2) / ratio;
|
}
|
else if (Mathf.Abs(pos.y + _height) > Screen.height / 2)
|
{
|
pos.y = (Screen.height / 2 - _height) / ratio;
|
}
|
m_ContainerDisplay.localPosition = pos;
|
}
|
|
public static void SetTargetPosition(RectTransform _target)
|
{
|
var _worldpos = _target.TransformPoint(Vector2.zero + Vector2.right * _target.sizeDelta.x / 2);
|
var _localpos = WindowCenter.Instance.uiRoot.modalCanvas.InverseTransformPoint(_worldpos);
|
targetPosition = _localpos;
|
}
|
}
|
|
}
|
|
|
|
|