| | |
| | | public static TweenerCore<Vector2, Vector2, DG.Tweening.Plugins.Options.VectorOptions> MoveToTarget( |
| | | RectTransform transform, RectTransform target, Vector2 offset, Action onComplete = null, float speed = 500f) |
| | | { |
| | | // 获取目标节点的世界坐标(锚点位置) |
| | | Vector3 worldPos = target.position; |
| | | |
| | | // 获取目标节点的世界坐标(中心点) |
| | | Vector3 worldPos = target.TransformPoint(target.rect.center + offset); |
| | | // 如果需要加 offset,需考虑 scale |
| | | Vector3 offsetWorld = target.TransformVector(offset); |
| | | worldPos += offsetWorld; |
| | | |
| | | RectTransform canvasRect = transform.parent as RectTransform; |
| | | |
| | |
| | | null, |
| | | out localPoint); |
| | | |
| | | // 创建RawImage |
| | | float distance = Vector2.Distance(transform.anchoredPosition, localPoint); |
| | | |
| | | float duration = distance / speed; // 假设速度为1000单位/秒,可以根据需要调整 |
| | | float duration = distance / speed; |
| | | |
| | | var tween = transform.DOAnchorPos(localPoint, duration).SetEase(Ease.Linear); |
| | | tween.onComplete += () => |
| | | { |
| | | onComplete?.Invoke(); |
| | | }; |
| | | |
| | | // MarkStartAndEnd(transform as RectTransform, target); |
| | | |
| | | |
| | | // // 1. 获取目标的世界坐标(加 offset) |
| | | // Vector3 targetWorldPos = target.TransformPoint(target.anchoredPosition + offset); |
| | | |
| | | // // 2. 获取源节点的 parent |
| | | // RectTransform sourceParent = transform.parent as RectTransform; |
| | | // if (sourceParent == null) |
| | | // { |
| | | // BattleDebug.LogError("源节点没有父节点,无法转换坐标!"); |
| | | // return null; |
| | | // } |
| | | |
| | | // // 3. 把目标世界坐标转换到源 parent 的本地坐标 |
| | | // Vector2 targetAnchoredPos; |
| | | // RectTransformUtility.ScreenPointToLocalPointInRectangle( |
| | | // sourceParent, |
| | | // RectTransformUtility.WorldToScreenPoint(CameraManager.uiCamera, targetWorldPos), |
| | | // CameraManager.uiCamera, |
| | | // out targetAnchoredPos); |
| | | |
| | | // // 4. DOTween 移动 |
| | | // var tween = transform.DOAnchorPos(targetAnchoredPos, duration).SetEase(Ease.Linear); |
| | | // tween.onComplete += () => |
| | | // { |
| | | // onComplete?.Invoke(); |
| | | // }; |
| | | |
| | | return tween; |
| | | } |
| | |
| | | var numChar = (char)GetDamageNumKey(config, basePowerStr[i]); |
| | | if (numChar > 0) |
| | | { |
| | | result += numChar; |
| | | result += numChar; |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | public static string DisplayDamageNum(BattleDmg damage) |
| | | { |
| | | var config = DamageNumConfig.Get(damage.attackType); |
| | | |
| | | string result = string.Empty; |
| | | |
| | | // 如果是闪避 则只显示闪避两个字 |
| | | if (damage.IsType(DamageType.Dodge)) |
| | | { |
| | | result += (char)config.prefix; |
| | | } |
| | | else |
| | | { |
| | | result = ConvertToArtFont(config, damage.damage); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | static string ConvertToArtFont(DamageNumConfig config, float _num) |
| | | { |
| | | var stringBuild = new System.Text.StringBuilder(); |
| | | |
| | | if (0 != config.plus) |
| | | stringBuild.Append((char)config.plus); |
| | | if (0 != config.prefix) |
| | | stringBuild.Append((char)config.prefix); |
| | | |
| | | var chars = UIHelper.ReplaceLargeArtNum(_num); |
| | | for (var i = 0; i < chars.Length; i++) |
| | | { |
| | | int numChar = GetDamageNumKey(config, (int)chars[i]); |
| | | |
| | | if (numChar > 0) |
| | | { |
| | | stringBuild.Append((char)numChar); |
| | | } |
| | | } |
| | | |
| | | return stringBuild.ToString(); |
| | | } |
| | | |
| | | public static int GetMainTargetPositionNum(BattleObject caster, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> targetList, SkillConfig skillConfig) |
| | |
| | | // 1、2、3号位为前排,默认2号位置为主目标,当1、2、3号位置角色全部死亡,前排将替换成后排,5号位置变更为主目标, |
| | | // 若配置TagAffect细分目标,且人数小于3,则所有被选择目标均为主目标(施法位置会用客户端配置) |
| | | // (即前排默认2号位或5号位规则无效,实际作用多少人就是多少个主目标) (YL : TagAffect>0 && TagAffect != 3就是全体都是主目标 后排一样 ) |
| | | if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3) |
| | | if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3) |
| | | { |
| | | uint objId = targetList[0].ObjID; |
| | | BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId); |
| | |
| | | else |
| | | { |
| | | // 看看对面前排是否都活着 |
| | | List<BattleObject> front = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum < 3 select bo); |
| | | List<BattleObject> front = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum < 3 select bo); |
| | | if (front.Count > 0) |
| | | { |
| | | returnIndex = 1; |
| | |
| | | } |
| | | break; |
| | | case 3: |
| | | if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3) |
| | | if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3) |
| | | { |
| | | uint objId = targetList[0].ObjID; |
| | | BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId); |
| | |
| | | { |
| | | var pack = packList[i]; |
| | | // 寻找死亡包 找到死亡包之后要找掉落包 不能超过技能包 |
| | | if (pack is HB422_tagMCTurnFightObjDead) |
| | | if (pack is HB422_tagMCTurnFightObjDead deadPack) |
| | | { |
| | | var deadPack = pack as HB422_tagMCTurnFightObjDead; |
| | | deadPacks.Add(deadPack); |
| | | } |
| | | else if (pack is CustomHB426CombinePack) |
| | | { |
| | | // 找死亡包不要越过技能包 |
| | | var combinePack = pack as CustomHB426CombinePack; |
| | | if (combinePack.startTag.Tag.StartsWith("Skill_")) |
| | | { |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | // Debug.LogError("find dead pack " + deadPacks.Count); |
| | | return deadPacks; |
| | | } |
| | | |
| | | |
| | | public static List<HB423_tagMCTurnFightObjReborn> FindRebornPack(List<GameNetPackBasic> packList) |
| | | { |
| | | List<HB423_tagMCTurnFightObjReborn> rebornPack = new List<HB423_tagMCTurnFightObjReborn>(); |
| | | List<HB423_tagMCTurnFightObjReborn> rebornPackList = new List<HB423_tagMCTurnFightObjReborn>(); |
| | | for (int i = 0; i < packList.Count; i++) |
| | | { |
| | | var pack = packList[i]; |
| | | // 寻找死亡包 找到死亡包之后要找掉落包 不能超过技能包 |
| | | if (pack is HB423_tagMCTurnFightObjReborn) |
| | | if (pack is HB423_tagMCTurnFightObjReborn rebornPack) |
| | | { |
| | | var deadPack = pack as HB423_tagMCTurnFightObjReborn; |
| | | rebornPack.Add(deadPack); |
| | | rebornPackList.Add(rebornPack); |
| | | } |
| | | else if (pack is CustomHB426CombinePack) |
| | | { |
| | | // 找死亡包不要越过技能包 |
| | | var combinePack = pack as CustomHB426CombinePack; |
| | | if (combinePack.startTag.Tag.StartsWith("Skill_")) |
| | | { |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | return rebornPack; |
| | | return rebornPackList; |
| | | } |
| | | } |