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); } }
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; } }
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(); } }
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)); } }
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)); } }
/// <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); }
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); } } } }
/// <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); } }
/// <summary> /// Проверяет находится ли робот в полёте или падении /// </summary> /// <returns>true если падаем</returns> public bool CheckForFly() { return(BoardModel.CheckForEmpty(_transform.position + Vector3.up)); }