| | |
| | | |
| | | public static TweenerCore<Vector2, Vector2, DG.Tweening.Plugins.Options.VectorOptions> MoveToTarget(RectTransform transform, RectTransform target, Vector2 offset, float duration, Action onComplete = null) |
| | | { |
| | | Vector3 targetWorldPos = target.TransformPoint(target.anchoredPosition + offset); |
| | | // 1. 获取目标的最终 anchoredPosition(加上 offset) |
| | | Vector2 targetAnchoredPos = target.anchoredPosition + offset; |
| | | Vector3 worldAnchorPos = target.TransformPoint(targetAnchoredPos); |
| | | |
| | | RectTransform parentRect = transform.parent as RectTransform; |
| | | |
| | | Vector2 targetAnchoredPos; |
| | | // 转换 target 的 anchoredPosition 到 sourceParent 的坐标系 |
| | | Vector2 localPoint; |
| | | RectTransformUtility.ScreenPointToLocalPointInRectangle( |
| | | parentRect, |
| | | RectTransformUtility.WorldToScreenPoint(null, targetWorldPos), |
| | | null, |
| | | out targetAnchoredPos); |
| | | transform, |
| | | RectTransformUtility.WorldToScreenPoint(CameraManager.uiCamera, worldAnchorPos), |
| | | CameraManager.uiCamera, |
| | | out localPoint); |
| | | |
| | | // 3. DOTween 移动 |
| | | return transform.DOAnchorPos(targetAnchoredPos, duration) |
| | | .SetEase(Ease.Linear) |
| | | .OnComplete(() => onComplete?.Invoke()); |
| | | var tween = transform.DOAnchorPos(localPoint, duration).SetEase(Ease.Linear); |
| | | tween.onComplete += () => |
| | | { |
| | | onComplete?.Invoke(); |
| | | }; |
| | | |
| | | return tween; |
| | | } |
| | | |
| | | public static string DisplayDamageNum(long num, int attackType) |
| | |
| | | return config.nums[_num - 48]; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 保证所有分配项加起来等于totalDamage,避免因整除导致的误差 |
| | | /// </summary> |
| | | public static List<long> DivideDamageToList(int[] damageDivide, long totalDamage) |
| | | { |
| | | List<long> fixedDamageList = new List<long>(); |
| | | long assigned = 0; |
| | | int count = damageDivide.Length; |
| | | |
| | | for (int i = 0; i < count; i++) |
| | | { |
| | | long damage; |
| | | if (i == count - 1) |
| | | { |
| | | // 最后一个分配项修正为剩余 |
| | | damage = totalDamage - assigned; |
| | | } |
| | | else |
| | | { |
| | | damage = (totalDamage * damageDivide[i] + 5000) / 10000; // 四舍五入 |
| | | assigned += damage; |
| | | } |
| | | fixedDamageList.Add(damage); |
| | | } |
| | | return fixedDamageList; |
| | | } |
| | | |
| | | public static List<HB422_tagMCTurnFightObjDead> FindDeadPack(List<GameNetPackBasic> packList) |
| | | { |
| | | List<HB422_tagMCTurnFightObjDead> deadPacks = new List<HB422_tagMCTurnFightObjDead>(); |
| | | for (int i = 0; i < packList.Count; i++) |
| | | { |
| | | var pack = packList[i]; |
| | | // 寻找死亡包 找到死亡包之后要找掉落包 不能超过技能包 |
| | | if (pack is HB422_tagMCTurnFightObjDead) |
| | | { |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | return deadPacks; |
| | | } |
| | | |
| | | |
| | | public static List<HB423_tagMCTurnFightObjReborn> FindRebornPack(List<GameNetPackBasic> packList) |
| | | { |
| | | List<HB423_tagMCTurnFightObjReborn> rebornPack = new List<HB423_tagMCTurnFightObjReborn>(); |
| | | for (int i = 0; i < packList.Count; i++) |
| | | { |
| | | var pack = packList[i]; |
| | | // 寻找死亡包 找到死亡包之后要找掉落包 不能超过技能包 |
| | | if (pack is HB423_tagMCTurnFightObjReborn) |
| | | { |
| | | var deadPack = pack as HB423_tagMCTurnFightObjReborn; |
| | | rebornPack.Add(deadPack); |
| | | } |
| | | else if (pack is CustomHB426CombinePack) |
| | | { |
| | | // 找死亡包不要越过技能包 |
| | | var combinePack = pack as CustomHB426CombinePack; |
| | | if (combinePack.startTag.Tag.StartsWith("Skill_")) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return rebornPack; |
| | | } |
| | | } |