CTT/Unity/Assets/HotfixView/UI/TaskUI/NPCTaskUI.cs

148 lines
6.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Cal.DataTable;
using ET;
using FairyGUI;
using System;
using System.Collections.Generic;
namespace ET
{
public class NPCTaskUIAwakeSyatem : AwakeSystem<NPCTaskUI,List<NPCTask>>
{
public override void Awake(NPCTaskUI self,List<NPCTask> list)
{
self.Awake(list);
}
}
public class NPCTaskUIDestroySyatem : DestroySystem<NPCTaskUI>
{
public override void Destroy(NPCTaskUI self)
{
self.Destroy();
}
}
public class NPCTaskUI : Entity
{
public FUI_NPCTaskUI ui;
public List<NPCTask> taskList;
private Scene zoneScene;
public void Awake(List<NPCTask> list)
{
zoneScene = this.ZoneScene();
ui = GetParent<FUI_NPCTaskUI>();
taskList = list;
AwakeAsync().Coroutine();
}
private async ETVoid AwakeAsync()
{
//!切换控制器
ui.m_contrl.selectedIndex = 0;
//!显示第一页内容
if (taskList.Count == 0) return;
TaskBase taskBase = DataTableHelper.Get<TaskBase>(taskList[0].Id);
NPCBase npcBase = DataTableHelper.Get<NPCBase>(taskBase.GiveNPCId);
//!窗口名字
ui.m_frame.self.title = npcBase.Name;
//!对话内容
ui.m_txtDialog.text = " " + npcBase.Dialog;
int _taskId = 0;
bool isAccept = false;
ui.m_taskList.RemoveChildrenToPool();
foreach (NPCTask npcTask in taskList)
{
GButton btn = ui.m_taskList.AddItemFromPool().asButton;
taskBase = DataTableHelper.Get<TaskBase>(npcTask.Id);
btn.title = $"{taskBase.Name}({GetTaskStateString(npcTask.TaskState)})";
TaskBase tempTaskBase = taskBase;
btn.onClick.Set(() =>
{
//!给Id变量赋值
switch (npcTask.TaskState)
{
case TaskState.TaskWaiting:
isAccept = true;
ui.m_btnAccept.self.visible = true;
ui.m_btnAccept.self.title = "接受任务";
break;
case TaskState.TaskRunning:
ui.m_btnAccept.self.visible = false;
break;
case TaskState.TaskCompleted:
isAccept = false;
ui.m_btnAccept.self.visible = true;
ui.m_btnAccept.self.title = "领取奖励";
break;
}
_taskId = npcTask.Id;
//!切换控制器
ui.m_contrl.selectedIndex = 1;
ui.m_txtTaskName.text = tempTaskBase.Name;
ui.m_txtContent.text = " " + tempTaskBase.DialogDesc;
ui.m_txtTarget.text = " " + tempTaskBase.TaskTargetDesc;
npcBase = DataTableHelper.Get<NPCBase>(tempTaskBase.SubmitNPCId);
Sys_Scene sysScene = DataTableHelper.Get<Sys_Scene>(npcBase.SceneId);
ui.m_txtTargetUnitOrPos.text = $" {npcBase.Name}{sysScene.Desc}{(npcBase.MapLayer == 1 ? "" : $"-{npcBase.MapLayer}")}";
ui.m_txtRewardCount.text = TaskUI.GetRewardCount(taskBase.RwardCount);
ui.m_RewardList.RemoveChildrenToPool();
for (int i = 0; i < tempTaskBase.RewardArr.Length; i++)
{
TaskBase.Reward reward = tempTaskBase.RewardArr[i];
GButton rewardItem = ui.m_RewardList.AddItemFromPool(FUI_ButtonTaskRewardItem.URL).asButton;
(string itemName, string IconName) = BagHelper.GetIconName(reward.Reward_Id);
rewardItem.icon = UIPackage.GetItemURL(FUIPackage.Bag, IconName);
rewardItem.title = $"{itemName}\r\n数量{reward.Reward_Count}";
//!显示页签
rewardItem.onRollOver.Set(() =>
{
TabHelper.OpenUI(reward.Reward_Id);
});
//!隐藏页签
rewardItem.onRollOut.Set(TabHelper.HideUI);
//TabHelper.SetTab(rewardItem, () => TabHelper.OpenUI(reward.RewardId));
}
});
}
ui.m_btnAccept.self.onClick.Set(async () =>
{
if (isAccept)
{
M2C_AcceptTask ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_AcceptTask>(new C2M_AcceptTask() { TaskId = _taskId });
if (!ret.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(ret.Message);
}
}
else
{
C2M_CompleteTask proto = new C2M_CompleteTask() { TaskId = _taskId };
proto.IndexList.AddRange(ui.m_RewardList.GetSelection());
M2C_CompleteTask ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_CompleteTask>(proto);
if (!ret.Message.IsNullOrEmpty())
{
TipHelper.OpenUI(ret.Message);
}
}
ui.GetComponent<FUIWindowComponent>().Hide();
});
string GetTaskStateString(TaskState state)
{
switch (state)
{
default:
case TaskState.TaskWaiting: return "可接受";
case TaskState.TaskRunning: return "进行中";
case TaskState.TaskCompleted: return "已完成";
}
}
await ETTask.CompletedTask;
}
public void Destroy()
{
}
}
}