Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.17 KB | None | 0 0
  1. [SerializeField] internal GameBoard _gameBoard;
  2.     //Проверка на то, удалился ли один элемент или нет
  3.     internal bool _isOnePartDestroyed = false;
  4.     private Snake _snake;
  5.     //Для того чтобы корутина не вызывалась при каждом вызове Update
  6.     private bool _isMoving = false;
  7.     private Vector3 MoveDirection= new Vector3(1,0,0);
  8.     private Transform Head;
  9.     private int HeadPosition;
  10.     private void Start()
  11.     {
  12.         _snake = GetComponent<Snake>();
  13.         StartCoroutine(GetHeadCourutine());
  14.         HeadPosition = GetBodyPart(Head).PlaceInList;
  15.         Invoke("StartDownMove",0);
  16.         //InvokeRepeating("StartMove",0,0.5f);
  17.     }
  18.  
  19.     private void Update()
  20.     {
  21.  
  22.         if (!_isOnePartDestroyed)
  23.         {
  24.             StartCoroutine(GetHeadCourutine());
  25.         }
  26.         HeadPosition = GetBodyPart(Head).PlaceInList;
  27.         if (!_isMoving)
  28.         {
  29.             StartCoroutine(moveCourutine(Head, HeadPosition));
  30.         }
  31.        
  32.     }
  33.  
  34.     private IEnumerator moveCourutine(Transform Head, int HeadPosition)
  35.     {
  36.         _isMoving = true;
  37.         Move(Head,HeadPosition);
  38.         yield return new WaitForSeconds(0.3f);
  39.         _isMoving = false;
  40.     }
  41.     void StartDownMove()
  42.     {
  43.         DownMoving(Head,HeadPosition);
  44.     }
  45.     private void Move(Transform Head, int HeadPosition)
  46.     {
  47.         if (!GameStates.isCreatingSomethingNew)
  48.         {
  49.             var arrayIndex = ++HeadPosition;
  50.             var temp = Head.position;
  51.             var SecondTemp = new Vector3();
  52.             if (IsValidPosition(Head.position + MoveDirection))
  53.             {
  54.                 if (!IsClearRoad(Head.position + MoveDirection))
  55.                 {
  56.                     Head.position += MoveDirection;
  57.                     for (int i = arrayIndex; i < _snake.SnakeParts.Count; i++)
  58.                     {
  59.                         SecondTemp = _snake.SnakeParts[i].position;
  60.                         _snake.SnakeParts[i].position = temp;
  61.                         temp = SecondTemp;
  62.                     }
  63.                 }
  64.                 else
  65.                 {
  66.                     DownMoving(Head, HeadPosition);
  67.                     MoveDirection *= -1;
  68.                 }
  69.             }
  70.             else
  71.             {
  72.                 DownMoving(Head, HeadPosition);
  73.                 MoveDirection *= -1;
  74.             }
  75.         }
  76.        
  77.     }
  78.  
  79.     private void DownMoving(Transform Head, int HeadPosition)
  80.     {
  81.  
  82.         if (!GameStates.isCreatingSomethingNew)
  83.         {
  84.             var arrayIndex = ++HeadPosition;
  85.             var temp = Head.position;
  86.             var SecondTemp = new Vector3();
  87.             Head.position += new Vector3(0, -1, 0);
  88.             for (int i = arrayIndex ; i < _snake.SnakeParts.Count; i++)
  89.             {
  90.                 SecondTemp = _snake.SnakeParts[i].position;
  91.                 _snake.SnakeParts[i].position = temp;
  92.                 temp = SecondTemp;
  93.             }
  94.         }
  95.     }
  96.     private Transform GetHead(List<Transform> snakeParts)
  97.     {
  98.         if (!GameStates.isCreatingSomethingNew)
  99.         {
  100.             foreach (var part in snakeParts)
  101.             {
  102.                
  103.                 if (part.GetComponent<BodyPart>().isThisHead)
  104.                 {
  105.                     Head = part;
  106.                 }
  107.             }
  108.         }
  109.         return null;
  110.     }
  111.  
  112.     private IEnumerator GetHeadCourutine()
  113.     {
  114.         if (!_isOnePartDestroyed)
  115.         {
  116.             GetHead(_snake.SnakeParts);
  117.         }
  118.         else
  119.         {
  120.             yield break;
  121.         }
  122.     }
  123.     private BodyPart GetBodyPart(Transform _transform)
  124.     {
  125.         return _transform.GetComponent<BodyPart>();
  126.     }
  127.  
  128.     private bool IsClearRoad(Vector3 position)
  129.     {
  130.         return _gameBoard.Grid[(int)position.x, (int)position.y]._IsThatCellHaveSomething;
  131.     }
  132.  
  133.     private bool IsValidPosition(Vector3 position)
  134.     {
  135.         return position.x > 0 && position.x < _gameBoard.Widht && position.y > 0;
  136.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement