Example #1
0
    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();
    }