public void AddRoad(TubeType type, int number) { var tileSpawn = grid.CellToLocal(nextTilePosition); var start = tileSpawn - (nextRotation * Vector3.up * grid.cellSize.x / 2); Object prefab = null; Object border = null; TubeTile tile = null; switch (type) { case TubeType.Forward: tile = new ForwardTubeTile(start, nextRotation); prefab = prefabStorage.GetForward(number); border = prefabStorage.forwardComplete; break; case TubeType.Left: tile = new LeftTubeTile(start, nextRotation); prefab = prefabStorage.GetAngle(number); border = prefabStorage.angleComplete; break; case TubeType.Right: tile = new RightTubeTile(start, nextRotation); prefab = prefabStorage.GetAngle(number); border = prefabStorage.angleComplete; nextRotation *= Quaternion.Euler(0, 180, 0); break; } GameObject.Instantiate(prefab, grid.CellToWorld(nextTilePosition), nextRotation, grid.gameObject.transform); GameObject.Instantiate(border, grid.CellToWorld(nextTilePosition) + new Vector3(0, 0, -1), nextRotation, grid.gameObject.transform); tiles.Add(tile); nextTilePosition += tile.GetNextTile(); nextRotation = tile.GetNextRotation(); }