///// <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; }
///// <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); }