2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

187 lines
6.0 KiB
C#

2 years ago
using System;
using UnityEngine;
using FairyGUI;
using Game.Battle;
namespace Game
{
public class PageWeapon : UIPageBase<ViewWeapon>
{
private int _indexNow = 0;
private float _weaponListShowTime = 0;
public PageWeapon()
{
}
protected override void OnCreate()
{
CreateUI(false);
InitWeaponList();
}
protected override void OnDestroy()
{
}
protected override void OnOpen()
{
}
protected override void OnClose()
{
}
public override void Update()
{
if (_weaponListShowTime == 0)
{
return;
}
_weaponListShowTime -= Time.deltaTime;
if (_weaponListShowTime <= 0)
{
_weaponListShowTime = 0;
SetListShow(false);
}
}
private void InitWeaponList()
{
var master = Util.GetMaster();
var combo = master.combo;
_indexNow = combo.WeaponNow.Value;
View.m_WeaponList.RemoveChildrenToPool();
View.m_WeaponList.SetVirtualAndLoop();
View.m_WeaponList.itemRenderer = (int index, GObject obj) =>
{
var count = combo.WeaponList.Count;
var targetIndex = (index) % count;
var item = (obj as ViewWeaponItem);
item.m_index.text = $"{index}";
var weaponId = combo.WeaponList[targetIndex];
var cfg = Util.GetWeaponConfig(weaponId);
item.m_item.m_name.text = cfg.WeaponBasic.Name;
item.m_item.m_icon.texture = Texture(cfg.WeaponBasic.Icon);
item.m_item.m_icon_back.texture = Texture(cfg.WeaponBasic.Icon);
RefreshItemStatu(item);
};
var count = combo.WeaponList.Count;
var listCount = count * 2;
View.m_WeaponList.numItems = listCount;
var targetIndex = (_indexNow - 2 + listCount) % listCount;
View.m_WeaponList.ScrollToView(targetIndex, true, true);
}
protected override void OnCreateBind()
{
var master = Util.GetMaster();
BindWeapon(master); //绑定武器
}
private void BindWeapon(GameEntity entity)
{
var combo = entity.combo;
BindData(combo.WeaponNow, (_, now) =>
{
var count = combo.WeaponList.Count;
var listCount = count * 2;
var now2 = now + count;
var indexPre = _indexNow;
if (Distance(_indexNow, now, listCount) < Distance(_indexNow, now2, listCount))
{
_indexNow = now;
}
else
{
_indexNow = now2;
}
if (indexPre == _indexNow)
{
return;
}
if (View.m_c1.selectedIndex == 0)
{
SetListShow(true);
}
else
{
var moveDistance = DistanceDir(indexPre, _indexNow, listCount);
if (moveDistance > 0)
{
View.m_WeaponList.scrollPane.ScrollRight(Math.Abs(moveDistance), true);
}
else
{
View.m_WeaponList.scrollPane.ScrollLeft(Math.Abs(moveDistance), true);
}
}
_weaponListShowTime = GameConst.WeaponListShowTime;
foreach (var itemObj in View.m_WeaponList.GetChildren())
{
RefreshItemStatu(itemObj as ViewWeaponItem);
}
});
}
private void SetListShow(bool isShow)
{
if (isShow)
{
var master = Util.GetMaster();
var combo = master.combo;
var count = combo.WeaponList.Count;
var listCount = count * 2;
var targetIndex = (_indexNow - 2 + listCount) % listCount;
View.m_WeaponList.ScrollToView(targetIndex, false, true);
}
View.m_c1.selectedIndex = isShow ? 1 : 0;
}
private void RefreshItemStatu(ViewWeaponItem item)
{
var master = Util.GetMaster();
var combo = master.combo;
var count = combo.WeaponList.Count;
var listCount = count * 2;
var itemIndex = Int32.Parse(item.m_index.text);
//调整大小
var isChosen = itemIndex == _indexNow;
item.m_c1.selectedIndex = isChosen ? 1 : 0;
item.m_item.m_c1.selectedIndex = isChosen ? 1 : 0;
//调整显示
var distance = DistanceDir(_indexNow, itemIndex, listCount);
var isShow = distance >= -1 && distance <= 2;
item.m_c2.selectedIndex = isShow ? 0 : 1;
}
private int DistanceDir(int i1, int i2, int max)
{
if (i1 == i2)
{
return 0;
}
var distance1 = 0;//往右
var distance2 = 0;//往左
if (i2 > i1)
{
distance1 = i2 - i1;
distance2 = i1 - i2 + max;
}
else
{
distance1 = i2 - i1 + max;
distance2 = i1 - i2;
}
if (Mathf.Abs(distance1) > Mathf.Abs(distance2))
{
return -distance2;
}
else
{
return distance1;
}
}
private int Distance(int i1, int i2, int max)
{
return Mathf.Abs(DistanceDir(i1, i2, max));
}
}
}