//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, November 19, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
[XLua.Hotfix]
|
public class GodWeaponPreviewWin : Window
|
{
|
[SerializeField] ScrollerController m_Controller;
|
[SerializeField] Text m_RequireLevel;
|
[SerializeField] Button[] m_SelectStages;
|
[SerializeField] Transform[] m_EquipSigns;
|
[SerializeField] Image m_Select;
|
[SerializeField] RawImage m_RawModel;
|
[SerializeField] PropertyBehaviour[] m_Propertys;
|
[SerializeField] Text m_FightPower;
|
[SerializeField] Text m_EffectName;
|
[SerializeField] RawImage m_RawEffect;
|
[SerializeField] RectTransform m_ContainerFuncs;
|
[SerializeField] Button m_Equip;
|
[SerializeField] Button m_Putoff;
|
[SerializeField] Button m_Close;
|
|
int selectStage = 1;
|
public static int selectGodWeaponType = 1;
|
|
MagicianModel model {
|
get { return ModelCenter.Instance.GetModel<MagicianModel>(); }
|
}
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_Close.onClick.AddListener(CloseClick);
|
for (int i = 0; i < m_SelectStages.Length; i++)
|
{
|
var index = i + 1;
|
m_SelectStages[i].AddListener(() =>
|
{
|
if (selectStage != index)
|
{
|
OnSelectStage(index);
|
}
|
});
|
}
|
m_Controller.OnRefreshCell += OnRefreshCell;
|
m_Equip.onClick.AddListener(Equip);
|
m_Putoff.onClick.AddListener(PutOff);
|
}
|
|
protected override void OnPreOpen()
|
{
|
Display();
|
DisplayGodWeaponTypes();
|
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent;
|
UI3DModelExhibition.Instance.StopShow();
|
UI3DModelExhibition.InstanceClone1.StopShow();
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType)
|
{
|
if (refreshType == PlayerDataRefresh.EquipShowSwitch)
|
{
|
DisplayEquip();
|
DisplayModel();
|
}
|
}
|
|
void Display()
|
{
|
var defaultStage = model.GetGodWeaponStage(selectGodWeaponType);
|
var level = 0;
|
if (EquipShowSwitch.IsGodWeaponEffectOn(PlayerDatas.Instance.baseData.equipShowSwitch, selectGodWeaponType, out level))
|
{
|
var _stage = 0;
|
if (model.TryGetGodWeaponStage(selectGodWeaponType, level, out _stage))
|
{
|
defaultStage = _stage;
|
}
|
}
|
|
defaultStage = Mathf.Clamp(defaultStage, 1, 3);
|
OnSelectStage(defaultStage);
|
DisplayEquip();
|
}
|
|
void DisplayGodWeaponTypes()
|
{
|
if (m_Controller.GetNumberOfCells(m_Controller.m_Scorller) == 0)
|
{
|
var list = model.godWeaponSorts;
|
m_Controller.Refresh();
|
for (int i = 0; i < list.Count; i++)
|
{
|
if (model.godWeaponEffectTypes.Contains(list[i]))
|
{
|
m_Controller.AddCell(ScrollerDataType.Header, list[i], OnGodWeaponSelect);
|
}
|
}
|
m_Controller.Restart();
|
}
|
else
|
{
|
m_Controller.m_Scorller.RefreshActiveCellViews();
|
}
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
var godWeaponCell = cell as GodWeaponPreviewCell;
|
godWeaponCell.Display(cell.index);
|
}
|
|
private void OnGodWeaponSelect(CellView cell)
|
{
|
var type = cell.index;
|
if (type != selectGodWeaponType)
|
{
|
selectGodWeaponType = type;
|
m_Controller.m_Scorller.RefreshActiveCellViews();
|
Display();
|
}
|
}
|
|
private void OnSelectStage(int index)
|
{
|
m_Select.transform.localPosition = m_SelectStages[index - 1].transform.localPosition;
|
selectStage = index;
|
DisplayModel();
|
DisplayRequireLevel();
|
DisplayProperty();
|
DisplayFightPower();
|
DisplayGodWeaponEffect();
|
DisplayEquip();
|
}
|
|
private void DisplayRequireLevel()
|
{
|
var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
|
var config = GodWeaponConfig.GetConfig(selectGodWeaponType, 1);
|
m_RequireLevel.text = Language.Get("GodWeaponStageRequireLevel", config.Name, requireLevel);
|
var godWeaponInfo = model.GetGodWeaponInfo(selectGodWeaponType);
|
m_RequireLevel.gameObject.SetActive(godWeaponInfo != null && godWeaponInfo.level < requireLevel);
|
m_ContainerFuncs.gameObject.SetActive(godWeaponInfo != null && godWeaponInfo.level >= requireLevel);
|
}
|
|
private void DisplayFightPower()
|
{
|
var fightPower = 0;
|
var dict = model.GetEffectPropertyUpper(selectGodWeaponType, selectStage);
|
fightPower += model.TryGetEffectFightPower(selectGodWeaponType, selectStage);
|
if (dict != null)
|
{
|
fightPower += UIHelper.GetFightPower(dict);
|
}
|
m_FightPower.text = StringUtility.Contact("+", fightPower);
|
}
|
|
private void DisplayProperty()
|
{
|
var dict = model.GetEffectPropertyUpper(selectGodWeaponType, selectStage);
|
var index = 0;
|
foreach (var key in dict.Keys)
|
{
|
if (index < m_Propertys.Length)
|
{
|
m_Propertys[index].gameObject.SetActive(true);
|
m_Propertys[index].DisplayUpper(key, dict[key]);
|
}
|
index++;
|
}
|
for (int i = index; i < m_Propertys.Length; i++)
|
{
|
m_Propertys[i].gameObject.SetActive(false);
|
}
|
}
|
|
void DisplayGodWeaponEffect()
|
{
|
var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
|
var config = GodWeaponEffectConfig.Get(selectGodWeaponType, requireLevel);
|
if (config != null)
|
{
|
m_EffectName.text = config.skillName;
|
}
|
UI3DModelExhibition.InstanceClone1.ShowGodWeaponEffect(selectGodWeaponType, requireLevel, m_RawEffect);
|
}
|
|
void DisplayEquip()
|
{
|
var equipedLevel = 0;
|
EquipShowSwitch.IsGodWeaponEffectOn(PlayerDatas.Instance.baseData.equipShowSwitch, selectGodWeaponType, out equipedLevel);
|
for (int i = 0; i < m_EquipSigns.Length; i++)
|
{
|
var stage = i + 1;
|
var requireLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, stage);
|
m_EquipSigns[i].gameObject.SetActive(requireLevel == equipedLevel);
|
}
|
var selectLevel = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
|
m_Equip.gameObject.SetActive(selectLevel != equipedLevel);
|
m_Putoff.gameObject.SetActive(selectLevel == equipedLevel);
|
}
|
|
private void Equip()
|
{
|
EquipShowSwitch.SendGodWeaponEffectOn(selectGodWeaponType, selectStage, true);
|
}
|
|
private void PutOff()
|
{
|
EquipShowSwitch.SendGodWeaponEffectOn(selectGodWeaponType, selectStage, false);
|
}
|
|
private void DisplayModel()
|
{
|
m_RawModel.gameObject.SetActive(true);
|
|
var job = PlayerDatas.Instance.baseData.Job;
|
|
var playerPack = ModelCenter.Instance.GetModel<PlayerPackModel>();
|
|
var clothes = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Clothes);
|
var clothesId = clothes == null ? 0 : (int)clothes.itemId;
|
|
var weapon = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Weapon);
|
var weaponId = weapon == null ? 0 : (int)weapon.itemId;
|
|
var wings = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Wing);
|
var wingsId = wings == null ? 0 : (int)wings.itemId;
|
|
var secondary = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.Weapon2);
|
var secondaryId = secondary == null ? 0 : (int)secondary.itemId;
|
|
var fashionClothes = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.FashionClothes);
|
var fashionClothesId = fashionClothes == null ? 0 : (int)fashionClothes.itemId;
|
|
var fashionWeapon = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.FashionWeapon);
|
var fashionWeaponId = fashionWeapon == null ? 0 : (int)fashionWeapon.itemId;
|
|
var fashionSecondary = playerPack.GetItemModelByIndex(PackType.Equip, (int)RoleEquipType.FashionWeapon2);
|
var fashionSecondaryId = fashionSecondary == null ? 0 : (int)fashionSecondary.itemId;
|
|
int _suitLevel = 0;
|
|
if (clothes != null)
|
{
|
if (clothes.isSuite == 1)
|
{
|
if (clothes.GetUseDataModel(30) != null && clothes.GetUseDataModel(30)[0] != 0)
|
{
|
_suitLevel = clothes.GetUseDataModel(30)[0];
|
}
|
}
|
}
|
|
Dictionary<int, int> dict = new Dictionary<int, int>();
|
for (int i = 0; i < model.godWeaponTypes.Count; i++)
|
{
|
var type = model.godWeaponTypes[i];
|
if (!model.godWeaponEffectTypes.Contains(type))
|
{
|
continue;
|
}
|
var godWeaponInfo = model.GetGodWeaponInfo(type);
|
var equipedLevel = 0;
|
if (type == selectGodWeaponType)
|
{
|
dict[type] = model.GetGodWeaponStageRequireLevel(selectGodWeaponType, selectStage);
|
}
|
else if (EquipShowSwitch.IsGodWeaponEffectOn(PlayerDatas.Instance.baseData.equipShowSwitch, type, out equipedLevel))
|
{
|
dict[type] = equipedLevel;
|
}
|
}
|
|
UI3DPlayerExhibitionData data = new UI3DPlayerExhibitionData()
|
{
|
job = job,
|
|
fashionClothesId = fashionClothesId,
|
fashionWeaponId = fashionWeaponId,
|
fashionSecondaryId = fashionSecondaryId,
|
clothesId = clothesId,
|
suitLevel = _suitLevel,
|
weaponId = weaponId,
|
wingsId = wingsId,
|
secondaryId = secondaryId,
|
isDialogue = false,
|
godWeapons = dict
|
};
|
UI3DModelExhibition.Instance.ShowOtherPlayer(m_RawModel, data);
|
}
|
}
|
|
}
|
|
|
|
|