示例#1
0
    ///// <summary>
    ///// 初始化
    ///// </summary>
    ///// <param name="formulaType">行为单元类型</param>
    ///// <param name="speed">扫描速度(单位扫描次数的长度)</param>
    ///// <param name="width">扫描宽度</param>
    ///// <param name="length">扫描总长度</param>
    ///// <param name="targetCamps">目标阵营类型</param>
    //public SlideCollisionDetectionFormulaItem(int formulaType, float speed, float width, float length, TargetCampsType targetCamps)
    //{
    //    FormulaType = formulaType;
    //    Speed = speed;
    //    Width = width;
    //    Length = length;
    //    TargetCamps = targetCamps;
    //}

    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="array">数据数组</param>
    /// 0>行为单元类型
    /// 1>扫描速度(单位扫描次数的长度)
    /// 2>扫描宽度
    /// 3>扫描总长度
    /// 4>目标阵营类型
    public SlideCollisionDetectionFormulaItem(string[] array)
    {
        if (array == null)
        {
            throw new Exception("数据列表为空");
        }
        var argsCount = 7;

        // 解析参数
        if (array.Length < argsCount)
        {
            throw new Exception("参数数量错误.需求参数数量:" + argsCount + " 实际数量:" + array.Length);
        }

        // 如果该项值是以%开头的则作为替换数据
        var formulaType = GetDataOrReplace <int>("FormulaType", array, 0);
        var targetPos   = GetDataOrReplace <int>("TargetPos", array, 1);
        var startPos    = GetDataOrReplace <int>("StartPos", array, 2);
        var speed       = GetDataOrReplace <float>("Speed", array, 3);
        var width       = GetDataOrReplace <float>("Width", array, 4);
        var length      = GetDataOrReplace <float>("Length", array, 5);
        var targetCamps = GetDataOrReplace <TargetCampsType>("TargetCamps", array, 6);

        FormulaType = formulaType;
        Speed       = speed;
        Width       = width;
        Length      = length;
        TargetCamps = targetCamps;
        TargetPos   = targetPos;
        StartPos    = startPos;
    }
示例#2
0
    ///// <summary>
    ///// 创建技能数据包装类
    ///// 对象对对象方式
    ///// </summary>
    ///// <param name="skill">技能对象</param>
    ///// <param name="startObj">起始对象</param>
    ///// <param name="targetObj">目标对象</param>
    ///// <param name="triggerData">触发数据</param>
    ///// <param name="isNotLethal">是否不致死</param>
    ///// <returns>数据包装类</returns>
    //public FormulaParamsPacker GetFormulaParamsPacker(SkillBase skill, DisplayOwner startObj, DisplayOwner targetObj, TriggerData triggerData, bool isNotLethal = false)
    //{
    //    var result = new FormulaParamsPacker()
    //    {
    //        DataList = skill.DataList,
    //        // TODO 技能等级, 最大目标数量
    //        SkillLevel = 1,
    //        SkillNum = skill.Num,
    //        ReceiverMenber = startObj,
    //        ReleaseMember = targetObj,
    //        StartPos = startObj.ClusterData.gameObject.transform.position,
    //        TargetPos = targetObj.ClusterData.gameObject.transform.position,
    //        IsNotLethal = isNotLethal,
    //        Skill = skill,
    //        TriggerData = triggerData
    //    };

    //    return result;
    //}


    ///// <summary>
    ///// 获取图形范围内的单位数据包列表
    ///// </summary>
    ///// <param name="graphics">图形类</param>
    ///// <param name="startObj">起始点(释放技能单位)</param>
    ///// <param name="camp">阵营</param>
    ///// <param name="skill">被释放技能</param>
    ///// <param name="targetMaxCount">获取最大数量单位</param>
    ///// <returns></returns>
    //public IList<FormulaParamsPacker> GetFormulaParamsPackerList(ICollisionGraphics graphics, DisplayOwner startObj, TargetCampsType camp, SkillBase skill, int targetMaxCount)
    //{
    //    if (graphics == null || startObj == null)
    //    {
    //        return null;
    //    }
    //    // 获取集群中的单位列表
    //    IList<FormulaParamsPacker> result = null;

    //    var positionObjList = ClusterManager.Single.GetPositionObjectListByGraphics(graphics);
    //    if (positionObjList != null && positionObjList.Count != 0)
    //    {
    //        result = new List<FormulaParamsPacker>();
    //        for (var i = 0; i < positionObjList.Count; i++)
    //        {
    //            // 最大数量
    //            if (targetMaxCount > 0 && result.Count >= targetMaxCount)
    //            {
    //                break;
    //            }
    //            var posObj = positionObjList[i];

    //            //判断阵营
    //            var camps = -1;
    //            switch (camp)
    //            {
    //                // 非己方
    //                case TargetCampsType.Different:
    //                    camps = 1;
    //                    break;
    //                // 己方
    //                case TargetCampsType.Same:
    //                    camps = 2;
    //                    break;
    //            }
    //            // 如果不是对应阵营排除
    //            if (posObj.AllData.MemberData.Camp == camps)
    //            {
    //                continue;
    //            }

    //            // 查询外层持有类
    //            var targetDisplayOwner = DisplayerManager.Single.GetElementById(posObj.AllData.MemberData.ObjID);
    //            // 加入列表
    //            result.Add(new FormulaParamsPacker()
    //            {
    //                ReleaseMember = startObj,
    //                StartPos = startObj.GameObj.transform.position,
    //                ReceiverMenber = targetDisplayOwner,
    //                TargetPos = posObj.transform.position,
    //                Skill = skill
    //            });
    //        }
    //    }

    //    return result;
    //}

    /// <summary>
    /// 获取图形范围内的单位数据包列表
    /// </summary>
    /// <param name="graphics">图形类</param>
    /// <param name="startPos">起始点(释放技能单位)</param>
    /// <param name="camp">阵营</param>
    /// <param name="skill">被释放技能</param>
    /// <param name="targetMaxCount">获取最大数量单位</param>
    /// <returns></returns>
    public IList <FormulaParamsPacker> GetFormulaParamsPackerList(ICollisionGraphics graphics, Vector3 startPos, TargetCampsType camp, SkillBase skill, int targetMaxCount)
    {
        if (graphics == null)
        {
            return(null);
        }
        // 获取集群中的单位列表
        IList <FormulaParamsPacker> result = null;

        var positionObjList = ClusterManager.Single.GetPositionObjectListByGraphics(graphics);

        if (positionObjList != null && positionObjList.Count != 0)
        {
            result = new List <FormulaParamsPacker>();
            for (var i = 0; i < positionObjList.Count; i++)
            {
                // 最大数量
                if (targetMaxCount > 0 && result.Count >= targetMaxCount)
                {
                    break;
                }
                var posObj = positionObjList[i];

                // 排除障碍物
                if (posObj is FixtureData)
                {
                    continue;
                }

                //判断阵营
                var camps = -1;
                switch (camp)
                {
                // 非己方
                case TargetCampsType.Different:
                    camps = 1;
                    break;

                // 己方
                case TargetCampsType.Same:
                    camps = 2;
                    break;
                }
                // 如果不是对应阵营排除
                if (posObj.AllData.MemberData.Camp == camps)
                {
                    continue;
                }

                // 查询外层持有类
                var targetDisplayOwner = DisplayerManager.Single.GetElementById(posObj.AllData.MemberData.ObjID);
                // 加入列表
                result.Add(new FormulaParamsPacker()
                {
                    StartPos       = startPos,
                    ReceiverMenber = targetDisplayOwner,
                    TargetPos      = posObj.transform.position,
                    Skill          = skill
                });
            }
        }

        return(result);
    }