using System;
using System.Collections.Generic;
using GCGame.Table;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Events;
using Games.Item;
using Games.LogicObj;
using Module.Log;
public class MagicInfoWnd : MonoBehaviour
{
public UICameraTexture modelTexture; // 模型展示的RenderTexture
public Text tipText; // 提示信息,已激活的提示已激活,未激活的提示激活条件
public GameObject hasActiveTip; // 已激活的图片提示
public Image[] weaponQuilitys; //
public Image[] weaponMagics; //
public Text Name; //
public GameObject leftBtn; // 左按钮
public GameObject rightBtn; // 右按钮
public GameObject hasnEquipBtn; // 未装备按钮
public GameObject hasEquipBtn; // 已装备按钮
public Button EquipBtn; // 装备按钮
public UIContainerBase m_Container; // 玩家背包中的法宝
public void Start()
{
hasActiveTip.SetActive(false);
m_Container.SetShowItemFinishCallFun(UpdateRedPoint);
InitWeaponMagicInfo();
ShowMagicInBag();
// 显示左侧模型
if(GameManager.gameManager.PlayerDataPool != null)
{
Tab_MagicWeaponActiveModel magicModel = TableManager.GetMagicWeaponActiveModelByID(GameManager.gameManager.PlayerDataPool.DressMagicModelId, 0);
if(magicModel!=null)
{
InitModel(GameManager.gameManager.PlayerDataPool.DressMagicModelId);
// 开始时也需要更新一次按钮状态
int index = 0;
var magicModels = TableManager.GetMagicWeaponActiveModel();
int[] keys = new int[magicModels.Count];
magicModels.Keys.CopyTo(keys, 0);
for (int i = 0; i < keys.Length; i++)
{
if (keys[i] == selectModelId)
{
index = i;
break;
}
}
SetLRBtnState(index, keys.Length);
}
else
{
if(selectModelId == -1)
{
var magicModels = TableManager.GetMagicWeaponActiveModel();
int[] keys = new int[magicModels.Count];
magicModels.Keys.CopyTo(keys, 0);
selectModelId = keys[0];
}
// 开始时也需要更新一次按钮状态
InitModel(selectModelId);
}
}
}
///
/// 显示已装备的法宝
///
void InitWeaponMagicInfo()
{
if (GameManager.gameManager.PlayerDataPool == null)
return;
GameItemContainer Container = GameManager.gameManager.PlayerDataPool.GetItemContainer(GameItemContainer.Type.TYPE_MAGICPACK);
if (Container == null)
{
return;
}
for(int i = 0; i < weaponMagics.Length; i++)
{
weaponMagics[i].gameObject.SetActive(false);
weaponQuilitys[i].gameObject.SetActive(false);
}
for (int i = 0; i < Container.ContainerSize; i++)
{
GameItem gameItem = Container.GetItem(i);
Tab_CommonItem line = TableManager.GetCommonItemByID(gameItem.DataID, 0);
if (line == null)
{
continue;
}
if (line.SubClassID - 1 < weaponMagics.Length)
{
weaponMagics[line.SubClassID - 1].gameObject.SetActive(true);
LoadAssetBundle.Instance.SetImageSprite(weaponMagics[line.SubClassID - 1], line.Icon);
weaponQuilitys[line.SubClassID - 1].gameObject.SetActive(true);
LoadAssetBundle.Instance.SetImageSprite(weaponQuilitys[line.SubClassID - 1], GCGame.Utils.GetItemQualityFrame(line.Quality));
if (line.QualityEffect > 0)
{
CommonItemContainerItem.ShowQualityEffect(true, line.QualityEffect, weaponQuilitys[line.SubClassID - 1].transform);
}
else
{
CommonItemContainerItem.ShowQualityEffect(false, line.QualityEffect, weaponQuilitys[line.SubClassID - 1].transform);
}
}
}
}
public void Click_WeaponMagic(int index)
{
GameItemContainer Container = GameManager.gameManager.PlayerDataPool.GetItemContainer(GameItemContainer.Type.TYPE_MAGICPACK);
if (Container == null)
{
return;
}
GameItem gameItem = Container.GetItem(index);
if (gameItem == null || gameItem.IsValid() == false)
return;
MagicTooltipLogic.ShowEquipTooltip(gameItem, ItemTooltipsLogic.ShowType.Equiped);
}
///
/// 显示背包中的法宝信息
///
public void ShowMagicInBag()
{
List gameItems = GameManager.gameManager.PlayerDataPool.BackPack.GetList();
int Count = gameItems.Count;
List magicItems = new List();
for (int i = 0; i < Count; i++)
{
GameItem gameItem = gameItems[i];
if (gameItem.IsMagicMent())
{
magicItems.Add(gameItem);
}
}
magicItems.Sort((a, b) =>
{
int SlotA = a.GetMagicSlotIndex();
int SlotB = b.GetMagicSlotIndex();
int SortA = a.SortId();
int SortB = b.SortId();
if (SortA > SortB)
return 1;
if (SortA < SortB)
return -1;
if(SortA == SortB)
{
if (SlotA > SlotB)
return 1;
if (SlotA < SlotB)
return -1;
}
return 0;
});
if(magicItems.Count <= 0)
{
// 其实也可以直接关闭红点,因为已经没有背包已经没有法宝了
UpdateRedPoint();
}
m_Container.InitContentItem(magicItems, null);
}
// 41021 宝物 已佩戴
//41022 宝物 佩戴
public void UpdateDressTip()
{
if (selectModelId == Singleton.Instance.MainPlayer.MagicID)
{
hasEquipBtn.SetActive(true);
hasnEquipBtn.SetActive(false);
EquipBtn.gameObject.SetActive(false);
return;
}
hasEquipBtn.SetActive(false);
hasnEquipBtn.SetActive(false);
EquipBtn.gameObject.SetActive(true);
}
private int selectModelId = -1;
public void InitModel(int modelID)
{
if (modelTexture == null)
return;
Tab_MagicWeaponActiveModel magicModel = TableManager.GetMagicWeaponActiveModelByID(modelID, 0);
if (magicModel == null)
{
return;
}
Tab_CharModel charModelTab = TableManager.GetCharModelByID(magicModel.ShowModel, 0);
if (charModelTab != null)
{
modelTexture.gameObject.SetActive(true);
modelTexture.InitModelPath(charModelTab.ResPath, charModelTab, LoadAssetBundle.BUNDLE_PATH_MODEL,true);
selectModelId = modelID;
Name.text = charModelTab.Name;
}
if (modelID == Singleton.Instance.MainPlayer.MagicID)
{
// 已穿戴
hasActiveTip.SetActive(true);
tipText.text = StrDictionary.GetClientDictionaryString("#{41016}", magicModel.Level, "" + GetLevelItemCount(magicModel.Level, magicModel.Color), magicModel.Num + "");
EquipBtn.gameObject.SetActive(false);
hasEquipBtn.SetActive(true);
hasnEquipBtn.SetActive(false);
return;
}
if (GameManager.gameManager.PlayerDataPool.IsMagicModelActive(modelID) == true)
{
// 已激活
hasActiveTip.SetActive(true);
tipText.text = StrDictionary.GetClientDictionaryString("#{41016}", magicModel.Level, "" + GetLevelItemCount(magicModel.Level, magicModel.Color), magicModel.Num + "");
EquipBtn.gameObject.SetActive(true);
hasEquipBtn.SetActive(false);
hasnEquipBtn.SetActive(false);
return;
}
else
{
// 未激活
hasActiveTip.SetActive(false);
tipText.text = StrDictionary.GetClientDictionaryString("#{41016}", magicModel.Level, "" + GetLevelItemCount(magicModel.Level, magicModel.Color), magicModel.Num + "");
EquipBtn.gameObject.SetActive(false);
hasEquipBtn.SetActive(false);
hasnEquipBtn.SetActive(true);
return;
}
}
public int GetLevelItemCount(int level,int quality)
{
int count = 0;
List gameItems = GameManager.gameManager.PlayerDataPool.MagicPack.GetList();
for(int i=0;i= level && color >= quality)
count++;
}
return count;
}
public void Click_LastModel()
{
int index = 0;
var magicModels = TableManager.GetMagicWeaponActiveModel();
int[] keys = new int[magicModels.Count];
magicModels.Keys.CopyTo(keys, 0);
for (int i = 1; i < keys.Length; i++)
{
if (keys[i] == selectModelId)
{
index = i - 1;
break;
}
}
SetLRBtnState(index, keys.Length);
InitModel(keys[index]);
}
private void SetLRBtnState(int index, int lenght)
{
if(index <= 0)
{
leftBtn.SetActive(false);
}
else
{
leftBtn.SetActive(true);
}
if(index >= lenght - 1)
{
rightBtn.SetActive(false);
}
else
{
rightBtn.SetActive(true);
}
}
public void Click_NextModel()
{
int index = 0;
var magicModels = TableManager.GetMagicWeaponActiveModel();
int[] keys = new int[magicModels.Count];
magicModels.Keys.CopyTo(keys, 0);
for (int i = 0; i < keys.Length - 1; i++)
{
if (keys[i] == selectModelId)
{
index = i + 1;
break;
}
}
SetLRBtnState(index, keys.Length);
InitModel(keys[index]);
}
public void Click_Equip()
{
if (selectModelId == -1)
return;
CG_HANDLE_MAGIC_WEAPON send = (CG_HANDLE_MAGIC_WEAPON)PacketDistributed.CreatePacket(MessageID.PACKET_CG_HANDLE_MAGIC_WEAPON);
send.Guid = (ulong)selectModelId;
send.Handletype = (int)CG_HANDLE_MAGIC_WEAPON.EMagicWeaponHandleType.EActiveModel;
if (Singleton.Instance.MainPlayer.MagicID == selectModelId)
{
send.Handletype = (int)CG_HANDLE_MAGIC_WEAPON.EMagicWeaponHandleType.EUnActiveModel;
}
send.SendPacket();
}
public void Click_Tip()
{
MessageHelpLogic.ShowHelpMessage(36);
}
public static int[] COMMON_MAGIC_DATA_ID = new int[4] { 60171, 60176, 60181, 60186 };
public void Click_Get()
{
//ItemTooltipsLogic.ShowItemTooltip(SavvyItemID, ItemTooltipsLogic.ShowType.GetPath);
int _Prefession = 0;
var _MainPlayer = Singleton.Instance.MainPlayer;
if (_MainPlayer != null)
{
_Prefession = _MainPlayer.Profession;
}
else
{
_Prefession = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession;
}
EquipEnhanceHecheng.SetDefaultSelected(COMMON_MAGIC_DATA_ID[_Prefession]);
UIManager.ShowUI(UIInfo.EquipEnhance, (obj, sucess) =>
{
EquipEnhanceRoot.Instance().TryOpen(4);
});
}
public void UpdateRedPoint()
{
if(HasRedPoint())
{
MagicMain.Instance.SetRedPoint(true);
}
else
{
MagicMain.Instance.SetRedPoint(false);
}
}
public static bool HasRedPoint()
{
// 已装备法宝
GameItemContainer magicContainer = GameManager.gameManager.PlayerDataPool.GetItemContainer(GameItemContainer.Type.TYPE_MAGICPACK);
if(magicContainer == null)
{
LogModule.ErrorLog("Can't get magic pack container, therefore can't update red point !!!");
return false;
}
// 背包中的法宝
List gameItems = GameManager.gameManager.PlayerDataPool.BackPack.GetList();
int Count = gameItems.Count;
List magicItems = new List();
for (int i = 0; i < Count; i++)
{
if (gameItems[i].IsMagicMent())
{
GameItem gameItem = gameItems[i];
magicItems.Add(gameItem);
}
}
for(int i = 0; i < magicItems.Count; ++i)
{
GameItem equipMagic = magicContainer.GetItem(magicItems[i].GetSubClass() - 1);
// 最大最小穿戴等级判定
int nPlayerLevel = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level;
Tab_CommonItem commonItem = TableManager.GetCommonItemByID(magicItems[i].DataID, 0);
if (commonItem.MinLevelRequire > nPlayerLevel
|| commonItem.MaxLevelRequire < nPlayerLevel)
{
continue;
}
// 法宝专属职业判定
int proLimit = commonItem.ProfessionRequire;
if (((proLimit >> GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession) & 1) == 0)
{
continue;
}
if (magicItems[i].CombatValue > equipMagic.CombatValue)
{
return true;
}
}
return false;
}
}