Exemplo n.º 1
0
        //移除指定的执行者
        void RemoveUnitFromTask(TUnit unit)
        {
            if (unit == null)
            {
                return;
            }
            if (!UnitTask.ContainsKey(unit))
            {
                return;
            }
            var objective = UnitTask[unit];

            UnitTask.Remove(unit);
            var units = TaskUnit[objective];

            units.Remove(unit);
            if (units.Count <= 0)
            {
                TaskUnit.Remove(objective);
                AssignedTask[objective.EnumIndex].Remove(objective);
                GlobalObjer?.RemoveTarget(objective);
            }
        }
Exemplo n.º 2
0
        //添加单位到下一个任务中
        protected bool AddUnitToTask(Task objAction, TUnit specificUnit = null)
        {
            if (objAction == null)
            {
                return(false);
            }
            TUnit unit      = null;
            int   enumIndex = objAction.EnumIndex;
            TEnum enumType  = objAction.Type;

            //从空闲列表里面取出一个
            if (specificUnit == null)
            {
                if (PreTask != objAction)
                {
                    //排序Unit
                    var calcImport = ConfigData[enumIndex].CalcUnitImport;
                    foreach (var item in TypeIdles[enumIndex])
                    {
                        item.Importance = calcImport(item, objAction);
                    }
                    TypeIdles[enumIndex].Sort((x, y) => { return(x.Importance > y.Importance ? -1 : 1); });
                }
                unit = TypeIdles[enumIndex].FirstOrDefault();
            }
            //填入指定的Unit
            else if (TypeIdles[enumIndex].Contains(specificUnit))
            {
                unit = specificUnit;
            }
            if (unit == null)
            {
                return(false);
            }
            PreTask = objAction;
            //添加单位任务映射
            if (!UnitTask.ContainsKey(unit))
            {
                UnitTask.Add(unit, objAction);
            }
            else
            {
                UnitTask[unit] = objAction;
            }
            //添加任务单位映射表
            if (!TaskUnit.ContainsKey(objAction))
            {
                TaskUnit.Add(objAction, new HashSet <TUnit>());
            }
            var units = TaskUnit[objAction];

            units.Add(unit);
            //标记已经被分配任务
            AssignedTask[enumIndex].Add(objAction);
            GlobalObjer?.AddTarget(objAction);
            //删除已经被分配的空闲单位
            Enum <TEnum> .ForIndex(e =>
            {
                TypeIdles[e].Remove(unit);
            });

            return(true);
        }