zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Unity/Assets/HotfixView/UI/StartSoulUpgradeUI/StartSoulUpgradeUI.cs

229 lines
7.3 KiB
C#

using Cal.DataTable;
using FairyGUI;
using System;
using System.Collections.Generic;
using System.Text;
using ET.EventType;
using UnityEngine;
namespace ET
{
public class StartSoulUpgradeUIAwakeSyatem: AwakeSystem<StartSoulUpgradeUI>
{
public override void Awake(StartSoulUpgradeUI self)
{
self.Awake();
}
}
public class StartSoulUpgradeUIDestroySyatem: DestroySystem<StartSoulUpgradeUI>
{
public override void Destroy(StartSoulUpgradeUI self)
{
self.Destroy();
}
}
public class StartSoulUpgradeUI: Entity
{
public FUI_StartSoulUpgradeUI ui;
private Scene zoneScene;
private enum SelectType
{
Item,
Material
}
private SelectType type;
private bool isInit;
private long id;
private List<long> selectedId = new List<long>();
StringBuilder sb = new StringBuilder();
private StarSoulBag bag;
public void Awake()
{
zoneScene = this.ZoneScene();
ui = GetParent<FUI_StartSoulUpgradeUI>();
AwakeAsync().Coroutine();
}
private async ETVoid AwakeAsync()
{
if (!isInit)
{
isInit = true;
ui.m_txtItem.text = "选择星魂";
ui.m_txtMarterial.text = "选择作为材料的星魂";
ui.m_txtPrice.text = null;
this.ui.m_parExp.value = 0;
this.ui.m_txtLevel.text = null;
this.ui.m_txtBefore.text = null;
this.ui.m_txtAfter.text = null;
RegisterEvent();
}
StarSoulBagUI.clickEvent += OnBagUIClick;
var gv = this.zoneScene.GetComponent<GlobalVariable>();
bag ??= this.zoneScene.GetComponent<UnitComponent>().MyUnit.GetComponent<StarSoulBag>();
selectedId.Clear();
await ETTask.CompletedTask;
}
private void RegisterEvent()
{
ui.m_comType.self.onChanged.Set1(concent =>
{
if (!int.TryParse(ui.m_comType.self.value, out int index)) return;
type = (SelectType) index;
});
this.ui.m_btnMake.self.onClick.Set(async () =>
{
if (this.selectedId.Count == 0) return;
if (this.id == 0) return;
if (selectedId.Contains(id))
{
TipHelper.OpenUI("被升级的星魂不能作为材料");
return;
}
var proto = new C2M_UpgradeStarSoulItem { itemId = this.id};
proto.idList.AddRange(this.selectedId);
this.selectedId.Clear();
var ret = await zoneScene.GetComponent<SessionComponent>()
.Call<M2C_UpgradeStarSoulItem>(proto);
if (!ret.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(ret.Message);
return;
}
this.ui.m_txtMarterial.text = "选择作为材料的星魂";
this.ShowAfter();
});
this.ui.m_btnSelectAll0Level.self.onClick.Set(() =>
{
if(this.type == SelectType.Item)
return;
if (!(this.zoneScene.GetComponent<FUIComponent>().Get(FUIPackage.Bag_StarSoulBagUI)?.GetComponent<StarSoulBagUI>() is { } bagUI))
{
Game.EventSystem.Publish(new OpenStarSoulBagUI() { zoneScene = this.zoneScene });
bagUI = this.zoneScene.GetComponent<FUIComponent>().Get(FUIPackage.Bag_StarSoulBagUI)?.GetComponent<StarSoulBagUI>();
}
this.selectedId.Clear();
bagUI.SelectAll0LevelItem(this.selectedId);
RefreshGold();
});
}
private void OnBagUIClick(long id)
{
if (type == SelectType.Item)
{
this.id = id;
this.ui.m_txtItem.text = $"已选择星魂";
ShowBefore();
}
else
{
int index = selectedId.IndexOf(id);
var gv = this.zoneScene.GetComponent<GlobalVariable>();
bag ??= this.zoneScene.GetComponent<UnitComponent>().MyUnit.GetComponent<StarSoulBag>();
if (index != -1)
{
this.selectedId.RemoveAt(index);
}
else
{
if (this.selectedId.Count >= 20)
{
TipHelper.OpenUI("最多选择20个材料");
return;
}
var item = bag.Get(id);
if (item.isLocked || item.isUsed)
{
return;
}
selectedId.Add(id);
}
RefreshGold();
}
}
private void RefreshGold()
{
this.ui.m_txtMarterial.text = $"已选择{this.selectedId.Count}个星魂材料";
int gold = 0;
foreach (long l in this.selectedId)
{
var item = bag.Get(l);
StarSoulLevelConfig soulLevelConfig = StarSoulLevelConfigCategory.Instance.GetByQualityAndLevel(item.quality,item.level);
gold += soulLevelConfig.NeedCoin;
}
this.ui.m_txtPrice.text = $"需要{gold}金币";
}
private void ShowBefore()
{
var data = bag.Get(id);
if (data == null)
{
Debug.Log($"item==null where id = {id}");
return;
}
ShowExp(data);
this.ui.m_txtLevel.text = $"当前等级:{data.level}";
ui.m_txtBefore.text = GetString(data);
}
private void ShowAfter()
{
var data = bag.Get(id);
if (data == null)
{
Debug.Log($"item==null where id = {id}");
return;
}
ShowExp(data);
this.ui.m_txtLevel.text = $"当前等级:{data.level}";
ui.m_txtAfter.text = GetString(data);
}
private void ShowExp(StarSoulItem data)
{
byte level = (byte) (data.level + 1);
if (level <= 20)
{
StarSoulLevelConfig starSoulLevelConfig = StarSoulLevelConfigCategory.Instance.GetByQualityAndLevel(data.quality,level);
double old = this.ui.m_parExp.max;
if (old != starSoulLevelConfig.NeedExp)
{
this.ui.m_parExp.max = starSoulLevelConfig.NeedExp;
this.ui.m_parExp.value = 0;
}
this.ui.m_parExp.TweenValue(data.exp,1);
}
else
{
this.ui.m_parExp.value = 0;
}
}
private string GetString(StarSoulItem data)
{
sb.Clear();
TabHelper.GenerateStarSoulString(this.sb,this.bag, data);
return sb.ToString();
}
public void Destroy()
{
this.selectedId.Clear();
StarSoulBagUI.clickEvent -= OnBagUIClick;
}
}
}