FTilemap.buildTiles C# (CSharp) Méthode

buildTiles() protected méthode

protected buildTiles ( ) : void
Résultat void
    protected void buildTiles()
    {
        // clear pos so next update fixes tiles
        _clipPos = Vector2.zero;

        // figure out needed size
        int clipTilesWide = Mathf.CeilToInt(_clipWidth / _tileWidth) + 2;
        if (_tilesWide < clipTilesWide || _clipWidth == 0 || _skipZero) {
            clipTilesWide = _tilesWide;
        }
        int clipTilesHigh = Mathf.CeilToInt(_clipHeight / _tileHeight) + 2;
        if (_tilesHigh < clipTilesHigh || _clipHeight == 0 || _skipZero) {
            clipTilesHigh = _tilesHigh;
        }

        // update count of tiles
        if (!_skipZero) {
            int totalNeeded = clipTilesWide * clipTilesHigh;

            // make sure we have the right amount of tiles for the current clip size
            if (_tiles.Count <= 0) {
                for (int i = 0; i < totalNeeded; i++) {
                    FSprite sprite = new FSprite(_baseName + "_1"); // set to 1
                    sprite.shader = _shader;

                    // add to this collection
                    _tiles.Add(sprite);
                    AddChild(sprite);
                }
            } else if (_tiles.Count < totalNeeded) {
                int start = _tiles.Count;
                for (int i = start; i < totalNeeded; i++) {
                        FSprite sprite = new FSprite(_baseName + "_1");
                        sprite.shader = _shader;

                        // add to this collection
                        _tiles.Add(sprite);
                        AddChild(sprite);
                }
            } else if (_tiles.Count > totalNeeded) {
                int removeThisMany = _tiles.Count - totalNeeded;
                for (int i = 0; i < removeThisMany; i++) {
                    // remove from the beginning of array
                    RemoveChild(_tiles[0]);
                    _tiles.RemoveAt(0);
                }
            }
        }

        // set clipWidth to the whole size if it doesn't exist
        if (_clipWidth == 0) {
            _clipWidth = _tilesWide * _tileWidth;
        }
        if (_clipHeight == 0) {
            _clipHeight = _tilesHigh * _tileHeight;
        }

        // make array of sprites
        for (int i = 0; i < clipTilesWide; i++) {
            for (int j = 0; j < clipTilesHigh; j++) {
                int frame = _tileArray[i + (j*_tilesWide)];

                if (!_skipZero || frame > 0) {
                    FSprite sprite;
                    if (_skipZero) {
                        sprite = new FSprite(_baseName + "_"+frame);
                        sprite.shader = _shader;
                        AddChild(sprite);
                    } else {
                        sprite = _tiles[i + (j*clipTilesWide)];
                        sprite.element = Futile.atlasManager.GetElementWithName(_baseName+"_"+frame);
                    }

                    // offset sprite coordinates
                    sprite.x = i * _tileWidth + _tileWidth / 2;
                    sprite.y = -j * _tileHeight - _tileHeight / 2;

                    if (frame == 0) {
                        sprite.isVisible = false;
                    } else {
                        sprite.isVisible = true;
                    }
                }
            }
        }
    }