Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [SerializeField] internal GameBoard _gameBoard;
- //Проверка на то, удалился ли один элемент или нет
- internal bool _isOnePartDestroyed = false;
- private Snake _snake;
- //Для того чтобы корутина не вызывалась при каждом вызове Update
- private bool _isMoving = false;
- private Vector3 MoveDirection= new Vector3(1,0,0);
- private Transform Head;
- private int HeadPosition;
- private void Start()
- {
- _snake = GetComponent<Snake>();
- StartCoroutine(GetHeadCourutine());
- HeadPosition = GetBodyPart(Head).PlaceInList;
- Invoke("StartDownMove",0);
- //InvokeRepeating("StartMove",0,0.5f);
- }
- private void Update()
- {
- if (!_isOnePartDestroyed)
- {
- StartCoroutine(GetHeadCourutine());
- }
- HeadPosition = GetBodyPart(Head).PlaceInList;
- if (!_isMoving)
- {
- StartCoroutine(moveCourutine(Head, HeadPosition));
- }
- }
- private IEnumerator moveCourutine(Transform Head, int HeadPosition)
- {
- _isMoving = true;
- Move(Head,HeadPosition);
- yield return new WaitForSeconds(0.3f);
- _isMoving = false;
- }
- void StartDownMove()
- {
- DownMoving(Head,HeadPosition);
- }
- private void Move(Transform Head, int HeadPosition)
- {
- if (!GameStates.isCreatingSomethingNew)
- {
- var arrayIndex = ++HeadPosition;
- var temp = Head.position;
- var SecondTemp = new Vector3();
- if (IsValidPosition(Head.position + MoveDirection))
- {
- if (!IsClearRoad(Head.position + MoveDirection))
- {
- Head.position += MoveDirection;
- for (int i = arrayIndex; i < _snake.SnakeParts.Count; i++)
- {
- SecondTemp = _snake.SnakeParts[i].position;
- _snake.SnakeParts[i].position = temp;
- temp = SecondTemp;
- }
- }
- else
- {
- DownMoving(Head, HeadPosition);
- MoveDirection *= -1;
- }
- }
- else
- {
- DownMoving(Head, HeadPosition);
- MoveDirection *= -1;
- }
- }
- }
- private void DownMoving(Transform Head, int HeadPosition)
- {
- if (!GameStates.isCreatingSomethingNew)
- {
- var arrayIndex = ++HeadPosition;
- var temp = Head.position;
- var SecondTemp = new Vector3();
- Head.position += new Vector3(0, -1, 0);
- for (int i = arrayIndex ; i < _snake.SnakeParts.Count; i++)
- {
- SecondTemp = _snake.SnakeParts[i].position;
- _snake.SnakeParts[i].position = temp;
- temp = SecondTemp;
- }
- }
- }
- private Transform GetHead(List<Transform> snakeParts)
- {
- if (!GameStates.isCreatingSomethingNew)
- {
- foreach (var part in snakeParts)
- {
- if (part.GetComponent<BodyPart>().isThisHead)
- {
- Head = part;
- }
- }
- }
- return null;
- }
- private IEnumerator GetHeadCourutine()
- {
- if (!_isOnePartDestroyed)
- {
- GetHead(_snake.SnakeParts);
- }
- else
- {
- yield break;
- }
- }
- private BodyPart GetBodyPart(Transform _transform)
- {
- return _transform.GetComponent<BodyPart>();
- }
- private bool IsClearRoad(Vector3 position)
- {
- return _gameBoard.Grid[(int)position.x, (int)position.y]._IsThatCellHaveSomething;
- }
- private bool IsValidPosition(Vector3 position)
- {
- return position.x > 0 && position.x < _gameBoard.Widht && position.y > 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement