예제 #1
0
        private IEnumerable <Vector3> CalculatePath(Vector3 point)
        {
            yield return(point);

            while (true)
            {
                //проверка на падение
                if (BoardModel.CheckForEmpty(point + Vector3.down))
                {
                    point += Vector3.down;
                }

                //проверка на шаг вправо
                else if (BoardModel.CheckForEmptyOrPlatform(point + Vector3.right))
                {
                    point += Vector3.right;
                }

                //проверка на шаг по диагонали
                else if (BoardModel.CheckForEmptyOrPlatform(point + Vector3.up) &&
                         BoardModel.CheckForEmptyOrPlatform(point + new Vector3(1, 1, 0)))
                {
                    yield return(point += new Vector3(1, 1, 0));
                }

                else
                {
                    break;
                }

                point = UtilityFunctions.Leveling(point);
                yield return(point);
            }
        }
예제 #2
0
        private IEnumerator MoveForward()
        {
            //проверка на падение
            if (BoardModel.CheckForEmpty(_transform.position + Vector3.down))
            {
                yield return(StartCoroutine(MakeStepDown()));
            }

            //проверка на шаг вправо
            else if (BoardModel.CheckForEmptyOrPlatform(_transform.position + Vector3.right))
            {
                yield return(StartCoroutine(MakeStepRight()));
            }

            //проверка на шаг по диагонали
            else if (BoardModel.CheckForEmptyOrPlatform(_transform.position + Vector3.up) &&
                     BoardModel.CheckForEmptyOrPlatform(_transform.position + new Vector3(1, 1, 0)))
            {
                yield return(StartCoroutine(MakeStepRightUp()));
            }

            else
            {
                _robot.ForwardFlag = false;
            }
        }
예제 #3
0
        private IEnumerator MoveBackward()
        {
            //проверка на падение
            if (BoardModel.CheckForEmpty(_transform.position + Vector3.down))
            {
                yield return(StartCoroutine(MakeStepDown()));
            }

            //проверка на шаг влево
            else if (BoardModel.CheckForEmptyOrPlatform(_transform.position + Vector3.left))
            {
                yield return(StartCoroutine(MakeStepLeft()));
            }

            //проверка на шаг по диагонали
            else if (BoardModel.CheckForEmptyOrPlatform(_transform.position + Vector3.up) &&
                     BoardModel.CheckForEmptyOrPlatform(_transform.position + new Vector3(-1, 1, 0)))
            {
                yield return(StartCoroutine(MakeStepLeftUp()));
            }

            else if (BoardModel.CheckForPlatform(_transform.position))
            {
                _robot.OnReturnAction();
            }

            else
            {
                _robot.OnStoppageAction();
            }
        }
예제 #4
0
        IEnumerator ShiftToLeft()
        {
            Movable block;

            if (BoardModel.GetBlock <Movable>(_transform.position + Vector3.left, out block))
            {
                yield return(StartCoroutine(block.MoveTo(Vector3.left)));

                yield return(new WaitForSeconds(1));
            }
        }
예제 #5
0
        IEnumerator DigToLeft()
        {
            Destructible block;

            if (BoardModel.GetBlock <Destructible>(_transform.position + Vector3.left, out block))
            {
                block.Destruct(1);
                _sound.PlayRandomClip(ClipStorage.instance.drillInstrumentClips);
                yield return(new WaitForSeconds(1));
            }
        }
예제 #6
0
        /// <summary>
        /// Использовать инструмент
        /// </summary>
        /// <param name="direction">Направление движения шасси</param>
        /// <returns>Сопрограмма</returns>
        public IEnumerator Use(bool direction)
        {
            for (int x = -1; x <= 1; x++)
            {
                for (int y = -1; y <= 1; y++)
                {
                    Collected block;

                    if (BoardModel.GetBlock <Collected>(_transform.position + new Vector3(x, y, 0), out block))
                    {
                        block.Collect();
                    }
                }
            }

            yield return(null);
        }
예제 #7
0
        void Boom()
        {
            _source.PlayOneShot(boomClip);

            for (int x = -1; x <= 1; x++)
            {
                for (int y = -1; y <= 1; y++)
                {
                    Destructible block;

                    if (BoardModel.GetBlock <Destructible>(_transform.position + new Vector3(x, y, 0), out block))
                    {
                        block.Destruct(2);
                    }
                }
            }
        }
예제 #8
0
        /// <summary>
        /// Передвинуть
        /// </summary>
        /// <param name="direction">Направление движения</param>
        /// <returns>Сопрограмма</returns>
        public IEnumerator MoveTo(Vector3 direction)
        {
            if (BoardModel.CheckForEmpty(_transform.position + direction))
            {
                _source.PlayOneShot(moveClip);

                float   t   = 0;
                Vector3 pos = _transform.position;

                while (t <= MovingSpeed)
                {
                    _transform.position = Vector3.Lerp(pos, pos + direction, t / MovingSpeed);
                    t += Time.deltaTime;
                    yield return(null);
                }

                UtilityFunctions.Leveling(_transform);
            }
        }
예제 #9
0
 /// <summary>
 /// Проверяет находится ли робот в полёте или падении
 /// </summary>
 /// <returns>true если падаем</returns>
 public bool CheckForFly()
 {
     return(BoardModel.CheckForEmpty(_transform.position + Vector3.up));
 }