using System.Collections.Generic; using UnityEngine; using System.Linq; using System; using System.Threading.Tasks; using Common.Utility.CombatEvent; using Excel2Json; using Fort23.Mono; using Fort23.UTool; using GameLogic.Combat; using Utility; public class TaskManager : Singleton { private List allTasks; private Dictionary allTsk; public TaskManager() { allTasks = ConfigComponent.Instance.GetAll().ToList(); allTsk = new Dictionary(); foreach (var playerDataTask in AccountFileInfo.Instance.playerData.tasks) { allTsk.Add(playerDataTask.taskID, playerDataTask); } } // 接取任务 public void AcceptTask(int taskID) { if (!allTsk.ContainsKey(taskID)) { AccountFileInfo.TaskData taskData = new AccountFileInfo.TaskData(); taskData.taskID = taskID; allTsk.Add(taskID, taskData); AccountFileInfo.Instance.playerData.tasks.Clear(); AccountFileInfo.Instance.playerData.tasks.AddRange(allTsk.Values); AccountFileInfo.Instance.SavePlayerData(); } } public void TriggerTask(int taskId) { if (allTsk.ContainsKey(taskId)) { TaskConfig taskConfig = ConfigComponent.Instance.Get(taskId); if (taskConfig.finishConditionType == 3) { //触发对话 DialoguePanel.OpenDialoguePanel(taskConfig.finishVlaue,null, ShowDialogueEventData.MessageShowType.Verbatim, (int? s) => { OnDialog(taskConfig.ID); }); } else if (taskConfig.finishConditionType == 2) { CombatDrive.Instance.LoadLevelBattleCombat(taskConfig.finishVlaue[0], (iswin) => { if (iswin) { OnMonsterKilled(taskConfig.finishVlaue[0]); } }); //进入战斗 } //不能直接做任务 通过其他系统检测完成任务条件 //这里直接弹出提示 else { } } } public void OnDialog(int taskId) { foreach (var taskData in allTsk) { TaskConfig taskConfig = ConfigComponent.Instance.Get(taskData.Key); if (!IsTaskComplete(taskData.Key) && taskConfig.finishConditionType == 3 && taskConfig.ID== taskId) { taskData.Value.fishCount++; if (IsTaskComplete(taskData.Key)) { CompleteTask(taskData.Key); } AccountFileInfo.Instance.SavePlayerData(); } } } // 击杀怪物 public void OnMonsterKilled(int leveBattleId) { foreach (var taskData in allTsk) { TaskConfig taskConfig = ConfigComponent.Instance.Get(taskData.Key); if (!IsTaskComplete(taskData.Key) && taskConfig.finishConditionType == 2 && taskConfig.finishVlaue[0] == leveBattleId) { taskData.Value.fishCount++; if (IsTaskComplete(taskData.Key)) { CompleteTask(taskData.Key); } AccountFileInfo.Instance.SavePlayerData(); } } } // 收集道具 public void OnItemCollected(int itemID) { foreach (var taskData in allTsk) { TaskConfig taskConfig = ConfigComponent.Instance.Get(taskData.Key); if (!IsTaskComplete(taskData.Key) && taskConfig.finishConditionType == 1 && taskConfig.finishVlaue[0] == itemID) { taskData.Value.fishCount++; if (IsTaskComplete(taskData.Key)) { CompleteTask(taskData.Key); } AccountFileInfo.Instance.SavePlayerData(); } } } // 完成任务 private void CompleteTask(int taskID) { TaskConfig taskConfig = ConfigComponent.Instance.Get(taskID); GrantReward(taskID); // 触发下一个任务(主线) if (taskConfig.nextTaskID != 0) { AcceptTask(taskConfig.nextTaskID); } //发送事件 更新主线任务 } // 发放奖励 private void GrantReward(int taskID) { } //获取任务数据 public AccountFileInfo.TaskData GetTaskData(int taskID) { if (allTsk.ContainsKey(taskID)) { return allTsk[taskID]; } return null; } //任务是否完成 public bool IsTaskComplete(int taskID) { if (allTsk.ContainsKey(taskID)) { TaskConfig taskConfig = ConfigComponent.Instance.Get(taskID); return allTsk[taskID].fishCount >= taskConfig.finishCount; } return false; } //获得主线任务 public AccountFileInfo.TaskData GetMainTaskData() { foreach (var keyValuePair in allTsk) { TaskConfig taskConfig = ConfigComponent.Instance.Get(keyValuePair.Key); if (taskConfig.taskType == 10 && !IsTaskComplete(keyValuePair.Key)) { return keyValuePair.Value; } } return null; } }