private List <float> DetermineIfTurn(CreateMaze.Coordinate coordinateTo) { Vector2 coordinateFrom = CreateMaze.Instance.GetWorldPoint(transform.position - transform.forward); Vector2 coordinateAt = CreateMaze.Instance.GetWorldPoint(transform.position); Direction facing; Direction needToFace; facing = DetermineFacing(coordinateFrom, coordinateAt); needToFace = DetermineFacing(coordinateAt, new Vector2(coordinateTo.x, coordinateTo.y)); return(FindTurningDifference(facing, needToFace)); }
private IEnumerator MoveOne(CreateMaze.Coordinate coordinate) { foreach (var turn in DetermineIfTurn(coordinate)) { if (turn < 0) { SnapToGrid(); var fromAngle = transform.rotation; var toAngle = Quaternion.Euler(transform.eulerAngles + Vector3.down * 90); StartWalkingAnimation(); for (var t = 0f; t < 1; t += Time.deltaTime / TurnTime) { transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t); yield return(null); } SnapToGrid(); m_blockInput = false; } else if (turn > 0) { SnapToGrid(); var fromAngle = transform.rotation; var toAngle = Quaternion.Euler(transform.eulerAngles + Vector3.up * 90); StartWalkingAnimation(); for (var t = 0f; t < 1; t += Time.deltaTime / TurnTime) { transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t); yield return(null); } SnapToGrid(); m_blockInput = false; } } var moveTo = transform.position + transform.forward * 2; StartWalkingAnimation(); SnapToGrid(); var offset = (moveTo - transform.position); for (var t = 0f; t < 1; t += Time.deltaTime / TurnTime) { transform.position += offset * (Time.deltaTime / TurnTime); yield return(null); } m_blockInput = false; SnapToGrid(); DataHandler.instance.data.enemy.toCoordinate(moveTo); DataHandler.instance.saveData(); }