using Cal.DataTable; using ET; using FairyGUI; using System; using System.Collections.Generic; namespace ET { public class SkillUIAwakeSyatem : AwakeSystem { public override void Awake(SkillUI self) { self.Awake(); } } public class SkillUIDestroySyatem : DestroySystem { public override void Destroy(SkillUI self) { self.Destroy(); } } public class SkillUI : Entity { public FUI_SkillUI ui; private List autoSkillList = new List(); public void Awake() { ui = GetParent(); AwakeAsync().Coroutine(); } private async ETVoid AwakeAsync() { //!+获取技能 M2C_GetSkill getskill = (M2C_GetSkill)await SessionComponent.Instance.Session.Call(new C2M_GetSkill()); if (getskill.Message.IsNullOrEmpty()) { ShowSkill(this.ui, getskill.SkillInfoLsit); //!+加载自动技能 int autoSkillNum = ui.m_autoSkillList.numChildren; if (autoSkillList.Count == 0) { for (int j = 0; j < autoSkillNum; j++) { autoSkillList.Add(0); } } int index = -1; foreach (var skillId in getskill.AutoSkillList) { index++; if (skillId == 0) continue; //SkillConfig skillConfig = DataTableHelper.Get(skillId * 100); //!显示图标 var item = this.ui.m_autoSkillList.GetChildAt(index).asButton; item.icon = UIPackage.GetItemURL(FUIPackage.Skill, skillId + string.Empty); //!装载数据 autoSkillList[index] = skillId; } for (int i = 0; i < autoSkillNum; i++) { var item = this.ui.m_autoSkillList.GetChildAt(i).asButton; //!放入(Drop)事件 int temp = i; item.onDrop.Set1(context => { if (!(context.data is UIDragArgs args)) return; if (args.uiType == UIDragArgs.UIType.Skill) { int skillId = args.index; args.Release(); autoSkillList[temp] = skillId; item.icon = DragDropManager.inst.dragAgent.icon; } }); //!点击事件 item.onClick.Set(() => { item.icon = null; if (autoSkillList.Count > 0) { autoSkillList[temp] = 0; } }); } //!+保存事件 this.ui.m_btnSave.onClick.Set(async () => { var c2mSaveSkill = new C2M_SaveAutoSkill(); c2mSaveSkill.AutoSkillList.AddRange(autoSkillList); M2C_SaveAutoSkill saveSKill = await SessionComponent.Instance.Call(c2mSaveSkill); if (!saveSKill.Message.IsNullOrEmpty()) { TipHelper.OpenUI(saveSKill.Message); } }); this.ui.m_btnFreeReSet.onClick.Set(async () => { string str = $"是否免费重置技能,不返还材料!"; var tipUI = TipHelper.OpenUI(str, tipType: TipType.Double); tipUI.m_btnYes.self.onClick.Clear(); tipUI.m_btnYes.self.onClick.Add(async () => { var ret = await SessionComponent.Instance.Call(new C2M_FreeReSetSkill { }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } }); }); ui.m_btnReSet.onClick.Set(async () => { var query = await SessionComponent.Instance.Call(new C2M_GetReSetSkillPrice { }); if (!query.Message.IsNullOrEmpty()) { TipHelper.OpenUI(query.Message); return; } string str = $"是否花费{query.Voucher}代金券重置技能,返还全部材料!"; var tipUI = TipHelper.OpenUI(str, tipType: TipType.Double); tipUI.m_btnYes.self.onClick.Clear(); tipUI.m_btnYes.self.onClick.Add(async () => { var ret = await SessionComponent.Instance.Call(new C2M_ReSetSkill { }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } }); }); } await ETTask.CompletedTask; } private Dictionary skillButtonDic = new Dictionary(); private void ShowSkill(FUI_SkillUI skillUI, List infoList) { var unitCharacter = ClientUnitCharacterComponent.Instance.Get(); ui.m_txtSkillPoint.text = $"可用技能点: {unitCharacter.SkillPoint}"; GComponent gComponent; switch (unitCharacter.JobType) { default: case JobType.UnKnown: gComponent = null; Log.Error($"{unitCharacter.JobType} is not right"); break; case JobType.Officer: { var ui = skillUI.m_comJob1; ui.Visible = true; gComponent = ui.self; } break; case JobType.Sportsman: { var ui = skillUI.m_comJob2; ui.Visible = true; gComponent = ui.self; } break; case JobType.Nurse: { var ui = skillUI.m_comJob3; ui.Visible = true; gComponent = ui.self; } break; case JobType.Superman: { var ui = skillUI.m_comJob4; ui.Visible = true; gComponent = ui.self; } break; } if (gComponent == null) return; foreach (var info in infoList) { int skillId = info.SkillId; if (!skillButtonDic.TryGetValue(skillId, out var btn)) { btn = gComponent.GetChild(string.Empty + skillId).asButton; if (btn == null) { Log.Error($"dic not has the key = {skillId}"); continue; } skillButtonDic.Add(skillId, btn); } btn.onClick.Clear(); //skilldata.SkillId = skillId; //skilldata.Level = info.SkillLevel; SkillConfig skillConfig = DataTableHelper.Get(skillId * 100); bool isPre = false; int tempLevel = info.SkillLevel; if (tempLevel == 0) { isPre = true; tempLevel = 1; } btn.icon = UIPackage.GetItemURL(FUIPackage.Skill, skillId + string.Empty); btn.grayed = isPre; //!显示页签 TabHelper.SetTab(btn, () => { if (DragDropManager.inst.dragging) return; TabHelper.OpenSkilUI(skillConfig, tempLevel, isPre); }); //!双击 btn.onClick.Add1(async context => { if (!context.inputEvent.isDoubleClick) return; var ret = await SessionComponent.Instance.Call(new C2M_LearnSkill { SkillId = skillId }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } }); //!开始拖拽 if (isPre) continue; btn.draggable = true; btn.onDragStart.Set1(content => { //防止直接拖动该组件 content.PreventDefault(); content.initiator.As().parent.scrollPane.CancelDragging(); //设置拖拽大小 DragDropManager.inst.StartDrag(btn, btn.icon, UIDragArgs.Create(UIDragArgs.UIType.Skill, skillId));//控制拖拽加载器中的图标 }); } } private static Queue skillNameUIQue; /// /// 战斗时显示技能名称 /// // by 左倾月 on 2020/6/28 at 9:46 /// /// /// public static void ShowNameWhenPlaySkill(Unit unit, string skillName) { skillNameUIQue = skillNameUIQue ?? new Queue(); if (skillNameUIQue.Count == 0) { var ui = FUI_SkillNameUI.CreateInstance(FUIComponent.Instance); FUIComponent.Instance.Add(ui, true); skillNameUIQue.Enqueue(ui); } var fui = skillNameUIQue.Dequeue(); fui.m_txtName.text = skillName; fui.Visible = true; fui.m_Effect.Play(CompelteCallBack); var pt = PosHelper.WorldToScreen(unit.GetComponent().HeadPoint.position); fui.self.SetXY(pt.x, pt.y); void CompelteCallBack() { fui.Visible = false; skillNameUIQue.Enqueue(fui); } } public void Destroy() { } } }