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;
}
}
}
}
}