| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 | 
							- using System;
 
- using DG.Tweening;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- using Random = UnityEngine.Random;
 
- public interface IUpdate
 
- {
 
-     public void Update() { }
 
- }
 
- public abstract class Move
 
- {
 
-     protected List<SpineAnimationLoader> _gos;
 
-     protected List<SpineAnimationLoader> _setList = new List<SpineAnimationLoader>();//已经设置好坐标的靶子
 
-     protected static int RamdomNum = 50;
 
-     /// <summary>
 
-     /// 是否和已生成的重叠
 
-     /// </summary>
 
-     /// <param name="target"></param>
 
-     /// <returns></returns>
 
-     protected bool CheckOverLap(SpineAnimationLoader target, Vector2 newPos)
 
-     {
 
-         foreach (var item in _setList)
 
-         {
 
-             var distanceMin = item.Radius() + target.Radius();
 
-             if (distanceMin >= Vector2.Distance(item.transform.localPosition, newPos))
 
-             {
 
-                 //有重叠的
 
-                 return true;
 
-             }
 
-         }
 
-         return false;
 
-     }
 
-     protected Func<SpineAnimationLoader, Vector2, bool, bool> IsUIBlock = (SpineAnimationLoader target, Vector2 pos, bool log) =>
 
-     {
 
-         var radius = target.Radius();
 
-         var canvasSize = GeneratingTarget.gm.GetCanvasSize();
 
-         float halfW = canvasSize.x / 2;
 
-         float halfH = canvasSize.y / 2;
 
-         var paddingLeft = Math.Abs(pos.x - radius - (-halfW));
 
-         var paddingTop = Math.Abs(halfH - (pos.y + radius));
 
-         var paddingRight = Math.Abs(halfW - (pos.x + radius));
 
-         var paddingDown = Math.Abs(pos.y - radius - (-halfH));
 
-         if (log)
 
-             Debug.Log($"pos={pos}   paddingLeft={paddingLeft}  paddingTop={paddingTop}  paddingRight={paddingRight}  paddingDown={paddingDown}");
 
-         //上方157  左方 392
 
-         if (paddingTop <= 157 && paddingLeft <= 392)
 
-             return true;
 
-         //上方170  右方133
 
-         if (paddingTop <= 170 && paddingRight <= 133)
 
-             return true;
 
-         //下148  左方 370
 
-         if (paddingDown <= 148f && paddingLeft <= 370)
 
-             return true;
 
-         //下216  右方 133
 
-         if (paddingDown <= 216 && paddingRight <= 330)
 
-             return true;
 
-         //右方 133
 
-         if (paddingRight <= 133)
 
-             return true;
 
-         return false;
 
-     };
 
-     public void SetGo(List<SpineAnimationLoader> gos)
 
-     {
 
-         _setList.Clear();
 
-         _gos = gos;
 
-         InitPos(gos);
 
-     }
 
-     public abstract void InitPos(List<SpineAnimationLoader> gos);
 
-     public int ScreenWidth()
 
-     {
 
-         var ScreenWidth = Screen.width;
 
-         return ScreenWidth;
 
-     }
 
-     public int ScreenHeight()
 
-     {
 
-         var ScreenHeight = Screen.height;
 
-         return ScreenHeight;
 
-     }
 
- }
 
- /// <summary>
 
- /// 随机位置静止
 
- /// </summary>
 
- public class Stay : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         float ScaleX(float value)
 
-         {
 
-             var width = ScreenWidth();
 
-             var scale = 1280f / (float)width;
 
-             value *= scale;
 
-             return value;
 
-         }
 
-         //随机不重叠的位置
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var randomPos = gos[i].GetRandomPos();
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) || (CheckOverLap(gos[i], randomPos) && count > 0))
 
-             {
 
-                 randomPos = gos[i].GetRandomPos();
 
-                 count--;
 
-             }
 
-             // Debug.Log($"i ={i}  IsUIBlock={IsUIBlock(gos[i], randomPos, true)}  CheckOverLap={CheckOverLap(gos[i], randomPos)}  count={count}");
 
-             gos[i].SetPos(randomPos);
 
-             _setList.Add(gos[i]);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 左右水平移动
 
- /// </summary>
 
- public class LeftToRight : Move, IUpdate
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕左侧位置
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var randomPos = gos[i].GetRandomPos(PosType.Left);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(PosType.Left);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是横向对称的位置
 
-             go.transform.DOLocalMoveX(-go.transform.localPosition.x, go.GetDuration()).SetEase(Ease.InSine);
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 右左水平移动
 
- /// </summary>
 
- public class RightToLeft : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕右侧位置
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var randomPos = gos[i].GetRandomPos(PosType.Right);
 
-             int count = RamdomNum;
 
-             while (CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(PosType.Right);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是横向对称的位置
 
-             go.transform.DOLocalMoveX(-go.transform.localPosition.x, go.GetDuration()).SetEase(Ease.InSine);
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 相对水平移动
 
- /// </summary>
 
- public class RelativeHor : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕左右侧位置  一左一右
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var tempPos = i % 2 == 0 ? PosType.Left : PosType.Right;
 
-             var randomPos = gos[i].GetRandomPos(tempPos);
 
-             int count = RamdomNum;
 
-             while (CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(tempPos);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是横向对称的位置
 
-             go.transform.DOLocalMoveX(-go.transform.localPosition.x, go.GetDuration()).SetEase(Ease.InSine);
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 相对垂直移动
 
- /// </summary>
 
- public class RelativeVet : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕上下侧位置  一上一下
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var tempPos = i % 2 == 0 ? PosType.Top : PosType.Down;
 
-             var randomPos = gos[i].GetRandomPos(tempPos);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(tempPos);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是纵向对称的位置
 
-             go.transform.DOLocalMoveY(-go.transform.localPosition.y, go.GetDuration()).SetEase(Ease.InSine);
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 同步斜向移动
 
- /// </summary>
 
- public class Diagonal : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕对角侧位置  一上一下
 
-         var random = Random.Range(0, 1);
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var temp = i % 2 == 0;
 
-             PosType posType;
 
-             if (random == 0)
 
-                 posType = temp ? PosType.LeftTop : PosType.LeftDown;
 
-             else
 
-                 posType = temp ? PosType.RightTop : PosType.RightDown;
 
-             var randomPos = gos[i].GetRandomPos(posType);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(posType);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是对角位置
 
-             go.transform.DOLocalMoveY(-go.transform.localPosition.y, go.GetDuration());
 
-             go.transform.DOLocalMoveX(-go.transform.localPosition.x, go.GetDuration());
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 同步W型移动
 
- /// </summary>
 
- public class W : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //从左侧开始 一上一下 往右W轨迹运动
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var tempPos = i % 2 == 0 ? PosType.LeftTop : PosType.LeftDown;
 
-             var randomPos = gos[i].GetRandomPos(tempPos);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(tempPos);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             _setList.Add(go);
 
-             Vector3[] positions = new Vector3[5];
 
-             positions[0] = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, 0);
 
-             positions[4] = new Vector3(-positions[0].x, positions[0].y, 0);
 
-             positions[2] = new Vector3(0, positions[0].y, 0);
 
-             positions[1] = new Vector3(positions[0].x * 0.5f, -positions[0].y, 0);
 
-             positions[3] = new Vector3(positions[0].x * -0.5f, -positions[0].y, 0);
 
-             go.transform.DOLocalPath(positions, go.GetDuration(), PathType.CatmullRom).SetEase(Ease.Linear);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 相对W型移动
 
- /// </summary>
 
- public class W2 : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         List<PosType> temp = new List<PosType>();
 
-         //四个角落随机创建 W运动
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             if (temp.Count <= 0)
 
-             {
 
-                 temp.Add(PosType.LeftTop);
 
-                 temp.Add(PosType.LeftDown);
 
-                 temp.Add(PosType.RightDown);
 
-                 temp.Add(PosType.RightTop);
 
-             }
 
-             var random = Random.Range(0, temp.Count - 1);
 
-             var tempPos = temp[random];
 
-             temp.RemoveAt(random);
 
-             var randomPos = gos[i].GetRandomPos(tempPos);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(tempPos);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             _setList.Add(go);
 
-             Vector3[] positions = new Vector3[5];
 
-             positions[0] = new Vector3(go.transform.localPosition.x, go.transform.localPosition.y, 0);
 
-             positions[4] = new Vector3(-positions[0].x, positions[0].y, 0);
 
-             positions[2] = new Vector3(0, positions[0].y, 0);
 
-             positions[1] = new Vector3(positions[0].x * 0.5f, -positions[0].y, 0);
 
-             positions[3] = new Vector3(positions[0].x * -0.5f, -positions[0].y, 0);
 
-             go.transform.DOLocalPath(positions, go.GetDuration(), PathType.CatmullRom).SetEase(Ease.Linear);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 横排同步水平移动 垂直运动
 
- /// </summary>
 
- public class HOR : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕上下侧位置
 
-         var random = Random.Range(0, 1);
 
-         var tempPos = random == 0 ? PosType.Top : PosType.Down;
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var randomPos = gos[i].GetRandomPos(tempPos);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(tempPos);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是纵向
 
-             go.transform.DOLocalMoveY(-go.transform.localPosition.y, go.GetDuration());
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 垂直同步水平移动
 
- /// </summary>
 
- public class VET : Move
 
- {
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         //随机屏幕左右侧位置
 
-         var random = Random.Range(0, 1);
 
-         var tempPos = random == 0 ? PosType.Left : PosType.Right;
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var randomPos = gos[i].GetRandomPos(tempPos);
 
-             int count = RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(tempPos);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             //目标点是横向
 
-             go.transform.DOLocalMoveX(-go.transform.localPosition.x, go.GetDuration());
 
-             _setList.Add(go);
 
-         }
 
-     }
 
- }
 
- /// <summary>
 
- /// 旋转移动
 
- /// </summary>
 
- public class ROT : Move, IUpdate
 
- {
 
-     private float speed;
 
-     public override void InitPos(List<SpineAnimationLoader> gos)
 
-     {
 
-         for (int i = 0; i < gos.Count; i++)
 
-         {
 
-             var randomPos = gos[i].GetRandomPos(PosType.Rotate);
 
-             int count = 2 * RamdomNum;
 
-             while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
 
-             {
 
-                 randomPos = gos[i].GetRandomPos(PosType.Rotate);
 
-                 count--;
 
-             }
 
-             var go = gos[i];
 
-             go.SetPos(randomPos);
 
-             speed = 360f / go.GetDuration();
 
-             _setList.Add(go);
 
-         }
 
-     }
 
-     public void Update()
 
-     {
 
-         var center = new Vector3(ScreenWidth() * 0.5f, ScreenHeight() * 0.5f);
 
-         foreach (var item in _setList)
 
-         {
 
-             if (!item.Equals(null))
 
-             {
 
-                 var angle = speed * Time.deltaTime;
 
-                 item.rectTransform.Rotate(Vector3.forward, -angle);
 
-                 //center = Camera.main.ScreenToWorldPoint(new Vector3(center.x, center.y, 0));
 
-                 item.rectTransform.RotateAround(center, Vector3.forward, angle);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |