//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, February 27, 2019
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
|
public class RealmEquipWin : Window
|
{
|
[SerializeField] Button m_Close;
|
[SerializeField] RectTransform m_LevelsContainer;
|
[SerializeField] EquipSlots m_EquipSlots;
|
[SerializeField] Text m_FightPoint;
|
[SerializeField] RawImage m_Role;
|
[SerializeField] Image m_ImgAppearance;
|
[SerializeField] Button m_SelectAppearance;
|
|
[SerializeField] EquipSuitPropertyWidget m_SuitPropertyWidget;
|
[SerializeField] CandidateEquipWidget m_CandidateEquipWidget;
|
[SerializeField] EquipGetWayWidget m_GetWayWidget;
|
|
List<EquipLevelSelectBehaviour> levelSelectBehaviours = new List<EquipLevelSelectBehaviour>();
|
List<GameObject> emptyFillers = new List<GameObject>();
|
|
EquipModel model { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_Close.SetListener(() =>
|
{
|
WindowCenter.Instance.Close<RealmEquipWin>();
|
});
|
|
m_SelectAppearance.SetListener(() => { model.SetAppearance(model.selectedLevel.value); });
|
}
|
|
protected override void OnPreOpen()
|
{
|
if (model.selectedLevel.value == 0)
|
{
|
model.SelectSet(model.GetFirstRedpointEquipSet());
|
}
|
}
|
|
protected override void OnAfterOpen()
|
{
|
m_SuitPropertyWidget.DisplaySuitPlaceEffects(model.suitPlaceCollectEffects.Fetch());
|
m_SuitPropertyWidget.DisplaySuitLevelEffects(model.suitActive.Fetch());
|
}
|
|
protected override void OnPreClose()
|
{
|
if (!WindowJumpMgr.Instance.IsJumpState)
|
{
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
}
|
}
|
|
protected override void OnAfterClose()
|
{
|
model.ResetOperateParams();
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
DisplayLevels();
|
DisplayDynamicInfo(true);
|
}
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
DisplayDynamicInfo(false);
|
}
|
|
private void DisplayDynamicInfo(bool force)
|
{
|
if (force || model.selectedLevel.dirty)
|
{
|
var level = model.selectedLevel.Fetch();
|
|
DisplayEquips(level);
|
var eightSuitLevel = model.GetSuitLevel(level, EquipSuitType.EightSuit);
|
m_SuitPropertyWidget.Init(level , eightSuitLevel);
|
}
|
|
if (force || model.appearance.dirty)
|
{
|
DisplayAppearance(model.appearance.Fetch(), force);
|
}
|
|
if (force || model.fightPoint.dirty)
|
{
|
DisplayFightPoint(model.fightPoint.Fetch());
|
}
|
|
if (force || model.candidateEquips.dirty)
|
{
|
var candidates = model.candidateEquips.Fetch();
|
m_CandidateEquipWidget.Display(model.selectedLevel.value, candidates);
|
}
|
|
if (force || model.suitPlaces.dirty)
|
{
|
m_SuitPropertyWidget.DisplaySuitPlaces(model.suitPlaces.Fetch());
|
}
|
|
if (force || model.suitProperty.dirty)
|
{
|
m_SuitPropertyWidget.DisplayProperty(model.suitProperty.Fetch());
|
}
|
|
if (force || model.getWays.dirty)
|
{
|
DisplayGetWays(model.getWays.Fetch());
|
}
|
|
if (force || model.isAppearanceLevel.dirty)
|
{
|
DisplayAppearaneSign(model.isAppearanceLevel.Fetch());
|
}
|
|
if (this.windowState == WindowState.Opened && model.suitPlaceCollectEffects.dirty)
|
{
|
m_SuitPropertyWidget.DisplaySuitPlaceEffects(model.suitPlaceCollectEffects.Fetch());
|
}
|
|
if (this.windowState == WindowState.Opened && model.suitActive.dirty)
|
{
|
m_SuitPropertyWidget.DisplaySuitLevelEffects(model.suitActive.Fetch());
|
}
|
}
|
|
private void DisplayLevels()
|
{
|
var sets = model.GetViewableEquipSets();
|
var behaviourCount = sets.Count;
|
var emptyCount = behaviourCount >= 5 ? 0 : 5 - behaviourCount;
|
var behaviourGap = behaviourCount - levelSelectBehaviours.Count;
|
for (var i = 0; i < behaviourGap; i++)
|
{
|
var instance = UIUtility.CreateWidget("EquipLevelSelectBehaviour", "EquipLevelSelectBehaviour");
|
instance.transform.SetParentEx(m_LevelsContainer, Vector3.zero, Quaternion.identity, Vector3.one);
|
instance.transform.SetAsFirstSibling();
|
levelSelectBehaviours.Insert(0, instance.GetComponent<EquipLevelSelectBehaviour>());
|
}
|
|
for (var i = 0; i < emptyCount; i++)
|
{
|
var instance = UIUtility.CreateWidget("EquipLevelSelectEmptyBehaviour", "EquipLevelSelectEmptyBehaviour");
|
instance.transform.SetParentEx(m_LevelsContainer, Vector3.zero, Quaternion.identity, Vector3.one);
|
instance.transform.SetAsLastSibling();
|
emptyFillers.Add(instance);
|
}
|
|
for (var i = 0; i < levelSelectBehaviours.Count; i++)
|
{
|
var behaviour = levelSelectBehaviours[i];
|
if (i < behaviourCount)
|
{
|
behaviour.gameObject.SetActive(true);
|
behaviour.Display(sets[i]);
|
}
|
else
|
{
|
behaviour.gameObject.SetActive(false);
|
}
|
}
|
|
for (var i = 0; i < emptyFillers.Count; i++)
|
{
|
emptyFillers[i].SetActive(i < emptyCount);
|
}
|
}
|
|
private void DisplayEquips(int level)
|
{
|
for (var i = 1; i <= 12; i++)
|
{
|
m_EquipSlots[i].Display(level, i);
|
}
|
}
|
|
private void DisplayAppearaneSign(bool isCurrentEquiped)
|
{
|
m_ImgAppearance.SetSprite(isCurrentEquiped ? "RealmEquip_CurrentEquip" : "RealmEquip_PutOn");
|
}
|
|
private void DisplayAppearance(EquipAppearance appearance, bool resetRotation)
|
{
|
UI3DModelExhibition.Instance.ShowPlayer(m_Role, new UI3DPlayerExhibitionData()
|
{
|
job = PlayerDatas.Instance.baseData.Job,
|
clothesId = appearance.clothes,
|
weaponId = appearance.weapon,
|
secondaryId = appearance.secondary,
|
keepRotation = !resetRotation,
|
});
|
}
|
|
private void DisplayFightPoint(int fightPoint)
|
{
|
m_FightPoint.text = fightPoint.ToString();
|
}
|
|
private void DisplayGetWays(List<int> getWays)
|
{
|
if (getWays.IsNullOrEmpty())
|
{
|
m_GetWayWidget.gameObject.SetActive(false);
|
}
|
else
|
{
|
m_GetWayWidget.gameObject.SetActive(true);
|
m_GetWayWidget.DisplayGetWays(getWays);
|
}
|
}
|
|
#endregion
|
|
[System.Serializable]
|
public class EquipSlots
|
{
|
public EquipSlotBehaviour weapon;
|
public EquipSlotBehaviour secondary;
|
public EquipSlotBehaviour hat;
|
public EquipSlotBehaviour clothes;
|
public EquipSlotBehaviour belt;
|
public EquipSlotBehaviour trousers;
|
public EquipSlotBehaviour shoes;
|
public EquipSlotBehaviour glove;
|
public EquipSlotBehaviour neck;
|
public EquipSlotBehaviour fairy1;
|
public EquipSlotBehaviour fairy2;
|
public EquipSlotBehaviour jade;
|
|
public EquipSlotBehaviour this[int place] {
|
get {
|
switch ((RoleEquipType)place)
|
{
|
case RoleEquipType.Weapon:
|
return weapon;
|
case RoleEquipType.Weapon2:
|
return secondary;
|
case RoleEquipType.Hat:
|
return hat;
|
case RoleEquipType.Clothes:
|
return clothes;
|
case RoleEquipType.Belt:
|
return belt;
|
case RoleEquipType.Trousers:
|
return trousers;
|
case RoleEquipType.Shoes:
|
return shoes;
|
case RoleEquipType.Glove:
|
return glove;
|
case RoleEquipType.Neck:
|
return neck;
|
case RoleEquipType.FairyCan1:
|
return fairy1;
|
case RoleEquipType.FairyCan2:
|
return fairy2;
|
case RoleEquipType.Jade:
|
return jade;
|
default:
|
return null;
|
}
|
}
|
}
|
}
|
|
}
|
|
}
|