Exemple #1
0
 public void Update(WorldRender rend)
 {
     if (pendingUpdate || state == ChunkState.Empty)
     {
         FillSprites(rend);
         pendingUpdate = false;
     }
 }
Exemple #2
0
    // Clears all SpriteRenderer objects from this
    // chunk and returns them to a pool.
    public void ClearSprites(WorldRender rend)
    {
        for (int i = 0; i < rects.Count; ++i)
        {
            rend.ReturnTileRect(rects[i]);
        }

        rects.Clear();

        state = ChunkState.Empty;
    }
Exemple #3
0
    // Adds sprites that fit the tile data for this chunk,
    // making it able to be rendered.
    private void FillSprites(WorldRender rend)
    {
        if (rects.Count > 0)
        {
            ClearSprites(rend);
        }

        for (int i = 0; i < Size2; ++i)
        {
            Tile tile = tiles[i];

            if (tile != TileType.Air)
            {
                mask.Set(i, tile.data.visible);
            }
            else
            {
                mask.Set(i, false);
            }
        }

        int x = 0, y = 0;

        while (true)
        {
            SpriteRect rect = GetNextRectStart(x, y);

            if (rect == null)
            {
                break;
            }

            RectScanX(rect);
            RectScanY(rect);

            SetSprite(rend, rect);

            x = rect.startX + rect.width;
            y = rect.startY;

            if (x == Size)
            {
                x = 0;
                ++y;
            }
        }

        state = ChunkState.Filled;
    }
Exemple #4
0
    // Fills an area of the chunk with a tile as determined by
    // the given SpriteRect object.
    private void SetSprite(WorldRender rend, SpriteRect rect)
    {
        Tile tile = rect.tile;

        SpriteRenderer tileRect = rend.GetTileRect();

        tileRect.sprite       = tile.data.sprite;
        tileRect.sortingOrder = tile.data.sortingOrder;
        tileRect.color        = new Color(1.0f, 1.0f, 1.0f, tile.data.alpha);
        tileRect.drawMode     = rect.width > 1 || rect.height > 1 ? SpriteDrawMode.Tiled : SpriteDrawMode.Simple;
        tileRect.size         = new Vector2(rect.width, rect.height);

        Transform t = tileRect.transform;

        t.position   = new Vector3(wPos.x + rect.startX, wPos.y + rect.startY);
        t.localScale = Vector3.one;

        rects.Add(tileRect);
    }