少年修仙传客户端代码仓库
client_Wu Xijin
2019-05-23 9a808cbdb6dcb0ce36888290b13b2f2cdc210faa
System/MainInterfacePanel/TaskFeedbackModel.cs
@@ -14,6 +14,8 @@
        TaskModel taskModel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
        AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
        EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
        EquipStrengthModel equipStrengthModel { get { return ModelCenter.Instance.GetModel<EquipStrengthModel>(); } }
        public override void Init()
        {
@@ -164,9 +166,13 @@
                                if (feedback.failFuns != null)
                                {
                                    var index = Mathf.Min(condition, feedback.failFuns.Count - 1);
                                    taskFeedbackFuncs.Clear();
                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    List<int> succFuncs;
                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
                                    {
                                        taskFeedbackFuncs.Clear();
                                        taskFeedbackFuncs.AddRange(succFuncs);
                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    }
                                }
                            }
                        }
@@ -197,9 +203,13 @@
                                if (feedback.failFuns != null)
                                {
                                    var index = Mathf.Min(condition, feedback.failFuns.Count - 1);
                                    taskFeedbackFuncs.Clear();
                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    List<int> succFuncs;
                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
                                    {
                                        taskFeedbackFuncs.Clear();
                                        taskFeedbackFuncs.AddRange(succFuncs);
                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    }
                                }
                            }
                        }
@@ -223,9 +233,13 @@
                                {
                                    var taskIndex = feedback.IndexOfSideTasks(condition);
                                    var index = Mathf.Min(taskIndex, feedback.failFuns.Count - 1);
                                    taskFeedbackFuncs.Clear();
                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    List<int> succFuncs;
                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
                                    {
                                        taskFeedbackFuncs.Clear();
                                        taskFeedbackFuncs.AddRange(succFuncs);
                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    }
                                }
                            }
                        }
@@ -250,9 +264,13 @@
                                    IsSatisfySideTask(feedback.sideTasks, out sideTaskId);
                                    var taskIndex = feedback.IndexOfSideTasks(sideTaskId);
                                    var index = Mathf.Min(taskIndex, feedback.failFuns.Count - 1);
                                    taskFeedbackFuncs.Clear();
                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    List<int> succFuncs;
                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
                                    {
                                        taskFeedbackFuncs.Clear();
                                        taskFeedbackFuncs.AddRange(succFuncs);
                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
                                    }
                                }
                            }
                        }
@@ -408,6 +426,68 @@
            }
            return true;
        }
        public bool TryGetSatisfyConditionFuncs(int[] funcs, out List<int> succFuncs)
        {
            succFuncs = null;
            if (funcs != null && funcs.Length > 0)
            {
                succFuncs = new List<int>();
                for (int i = 0; i < funcs.Length; i++)
                {
                    if (IsSatisfyFuncConfition(funcs[i]))
                    {
                        succFuncs.Add(funcs[i]);
                    }
                }
                return succFuncs.Count > 0;
            }
            return false;
        }
        public bool IsSatisfyFuncConfition(int func)
        {
            var config = TaskFeedbackFuncConfig.Get(func);
            if (config != null)
            {
                switch (config.type)
                {
                    case 1:
                        foreach (var item in config.itemCondition)
                        {
                            var count = packModel.GetItemCountByID(PackType.Item, item.x);
                            if (count < item.y)
                            {
                                return false;
                            }
                        }
                        return true;
                    case 2:
                        return reikiRootModel.freePoint > 0;
                    case 3:
                        foreach (var equipSet in equipModel.GetUnLockedEquipSets())
                        {
                            if (equipModel.ExistBetterEquip(equipSet, EquipModel.realmEquipTypes))
                            {
                                return true;
                            }
                        }
                        return false;
                    case 4:
                        MissionDetailDates taskData;
                        if (taskModel.TryGetTaskData(config.condition, out taskData))
                        {
                            return taskData.MissionState != 3;
                        }
                        return false;
                    case 5:
                        return equipStrengthModel.ExistAnySatisfyStrengh();
                    default:
                        return true;
                }
            }
            return false;
        }
    }
    public struct TaskFeedback