1 /******************************************************************************* 2 * Copyright 2011 See AUTHORS file. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 ******************************************************************************/ 16 17 package com.badlogic.gdx.maps.tiled; 18 19 import java.util.Iterator; 20 21 import com.badlogic.gdx.utils.Array; 22 23 /** @brief Collection of {@link TiledMapTileSet} */ 24 public class TiledMapTileSets implements Iterable<TiledMapTileSet> { 25 26 private Array<TiledMapTileSet> tilesets; 27 28 /** Creates an empty collection of tilesets. */ 29 public TiledMapTileSets () { 30 tilesets = new Array<TiledMapTileSet>(); 31 } 32 33 /** @param index index to get the desired {@link TiledMapTileSet} at. 34 * @return tileset at index */ 35 public TiledMapTileSet getTileSet (int index) { 36 return tilesets.get(index); 37 } 38 39 /** @param name Name of the {@link TiledMapTileSet} to retrieve. 40 * @return tileset with matching name, null if it doesn't exist */ 41 public TiledMapTileSet getTileSet (String name) { 42 for (TiledMapTileSet tileset : tilesets) { 43 if (name.equals(tileset.getName())) { 44 return tileset; 45 } 46 } 47 return null; 48 } 49 50 /** @param tileset set to be added to the collection */ 51 public void addTileSet (TiledMapTileSet tileset) { 52 tilesets.add(tileset); 53 } 54 55 /** Removes tileset at index 56 * 57 * @param index index at which to remove a tileset. */ 58 public void removeTileSet (int index) { 59 tilesets.removeIndex(index); 60 } 61 62 /** @param tileset set to be removed */ 63 public void removeTileSet (TiledMapTileSet tileset) { 64 tilesets.removeValue(tileset, true); 65 } 66 67 /** @param id id of the {@link TiledMapTile} to get. 68 * @return tile with matching id, null if it doesn't exist */ 69 public TiledMapTile getTile (int id) { 70 // The purpose of backward iteration here is to maintain backwards compatibility 71 // with maps created with earlier versions of a shared tileset. The assumption 72 // is that the tilesets are in order of ascending firstgid, and by backward 73 // iterating precedence for conflicts is given to later tilesets in the list, 74 // which are likely to be the earlier version of any given gid. 75 // See TiledMapModifiedExternalTilesetTest for example of this issue. 76 for (int i = tilesets.size-1; i >= 0; i--) { 77 TiledMapTileSet tileset = tilesets.get(i); 78 TiledMapTile tile = tileset.getTile(id); 79 if (tile != null) { 80 return tile; 81 } 82 } 83 return null; 84 } 85 86 /** @return iterator to tilesets */ 87 @Override 88 public Iterator<TiledMapTileSet> iterator () { 89 return tilesets.iterator(); 90 } 91 92 } 93