FTilemap.Update C# (CSharp) Method

Update() public method

public Update ( ) : void
return void
    public virtual void Update()
    {
        if (_clipNode != null && !_skipZero) {
            // get position of _clipNode relative to this
            Vector2 relPos = StageToLocal(_clipNode.GetPosition());

            float xMin = relPos.x - _clipWidth / 2 - _tileWidth * 0.75f;
            float yMin = relPos.y - _clipHeight / 2 - _tileHeight * 0.75f;

            // check if the _clipNode has moved enough to check tile positions
            if (Mathf.Round(xMin / _tileWidth) == _clipPos.x && Mathf.Round(yMin / _tileHeight) == _clipPos.y) {
                return;
            }
            _clipPos = new Vector2(Mathf.Round(xMin / _tileWidth), Mathf.Round(yMin / _tileHeight));

            float tileOffsetX = (Mathf.Floor(_clipWidth / _tileWidth) + 2) * _tileWidth;
            float tileOffsetY = (Mathf.Floor(_clipHeight / _tileHeight) + 2) * _tileHeight;

            float xMax = xMin + tileOffsetX;
            float yMax = yMin + tileOffsetY;

            foreach (FSprite tile in _tiles) {
                bool tileChangedX = false;
                bool tileChangedY = false;
                while (tile.x < xMin) {
                    tile.x += tileOffsetX;
                    tileChangedX = true;
                }
                if (!tileChangedX) {
                    while (tile.x > xMax) {
                        tile.x -= tileOffsetX;
                        tileChangedX = true;
                    }
                }
                while (tile.y < yMin) {
                    tile.y += tileOffsetY;
                    tileChangedY = true;
                }
                if (!tileChangedY) {
                    while (tile.y > yMax) {
                        tile.y -= tileOffsetY;
                        tileChangedY = true;
                    }
                }

                if (tileChangedX || tileChangedY) {
                    int tileX = Mathf.FloorToInt((tile.x - _tileWidth / 2) / _tileWidth);
                    int tileY = Mathf.FloorToInt((-tile.y - _tileHeight / 2) / _tileHeight);

                    if (repeatX) {
                        while (tileX < 0) {
                            tileX += _tilesWide;
                        }
                        while (tileX >= _tilesWide) {
                            tileX -= _tilesWide ;
                        }
                    } else if (tileX < 0 || tileX >= _tilesWide) { // display empty tile, outside of known data
                        tileX = -1;
                        tileY = -1;
                    }
                    if (repeatY) {
                        while (tileY < 0) {
                            tileY += _tilesHigh;
                        }
                        while (tileY >= _tilesHigh) {
                            tileY -= _tilesHigh;
                        }
                    } else if (tileY < 0 || tileY >= _tilesHigh) { // display empty tile, outside of known data
                        tileX = -1;
                        tileY = -1;
                    }

                    int frame = tileX + tileY * _tilesWide;
                    if (frame >= 0 && frame < _tileArray.GetLength(0)) {
                        int frameNum = _tileArray[frame];
                        tile.element = Futile.atlasManager.GetElementWithName(_baseName+"_"+frameNum);
                        tile.isVisible = true;
                    } else {
                        tile.isVisible = false;
                    }
                }
            }
        }
    }