Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.45 KB | None | 0 0
  1. public class ServerTmxMapLoader extends TmxMapLoader
  2. {
  3. @Override
  4. public TiledMap load(String fileName, Parameters parameters) {
  5. this.convertObjectToTileSpace = parameters.convertObjectToTileSpace;
  6. this.flipY = parameters.flipY;
  7. FileHandle tmxFile = resolve(fileName);
  8. try {
  9. root = xml.parse(tmxFile);
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }
  13.  
  14. return loadTilemap(root, tmxFile, null);
  15. }
  16.  
  17. @Override
  18. protected TiledMap loadTilemap(XmlReader.Element root, FileHandle tmxFile, ImageResolver imageResolver) {
  19. TiledMap map = new TiledMap();
  20.  
  21. String mapOrientation = root.getAttribute("orientation", null);
  22. int mapWidth = root.getIntAttribute("width", 0);
  23. int mapHeight = root.getIntAttribute("height", 0);
  24. int tileWidth = root.getIntAttribute("tilewidth", 0);
  25. int tileHeight = root.getIntAttribute("tileheight", 0);
  26. int hexSideLength = root.getIntAttribute("hexsidelength", 0);
  27. String staggerAxis = root.getAttribute("staggeraxis", null);
  28. String staggerIndex = root.getAttribute("staggerindex", null);
  29. String mapBackgroundColor = root.getAttribute("backgroundcolor", null);
  30.  
  31. MapProperties mapProperties = map.getProperties();
  32. if (mapOrientation != null) {
  33. mapProperties.put("orientation", mapOrientation);
  34. }
  35. mapProperties.put("width", mapWidth);
  36. mapProperties.put("height", mapHeight);
  37. mapProperties.put("tilewidth", tileWidth);
  38. mapProperties.put("tileheight", tileHeight);
  39. mapProperties.put("hexsidelength", hexSideLength);
  40. if (staggerAxis != null) {
  41. mapProperties.put("staggeraxis", staggerAxis);
  42. }
  43. if (staggerIndex != null) {
  44. mapProperties.put("staggerindex", staggerIndex);
  45. }
  46. if (mapBackgroundColor != null) {
  47. mapProperties.put("backgroundcolor", mapBackgroundColor);
  48. }
  49. mapTileWidth = tileWidth;
  50. mapTileHeight = tileHeight;
  51. mapWidthInPixels = mapWidth * tileWidth;
  52. mapHeightInPixels = mapHeight * tileHeight;
  53.  
  54. if (mapOrientation != null) {
  55. if ("staggered".equals(mapOrientation)) {
  56. if (mapHeight > 1) {
  57. mapWidthInPixels += tileWidth / 2;
  58. mapHeightInPixels = mapHeightInPixels / 2 + tileHeight / 2;
  59. }
  60. }
  61. }
  62.  
  63. XmlReader.Element properties = root.getChildByName("properties");
  64. if (properties != null) {
  65. loadProperties(map.getProperties(), properties);
  66. }
  67. Array<XmlReader.Element> tilesets = root.getChildrenByName("tileset");
  68. for (XmlReader.Element element : tilesets) {
  69. loadTileSet(map, element, tmxFile, imageResolver);
  70. root.removeChild(element);
  71. }
  72. for (int i = 0, j = root.getChildCount(); i < j; i++) {
  73. XmlReader.Element element = root.getChild(i);
  74. String name = element.getName();
  75. if (name.equals("layer")) {
  76. loadTileLayer(map, element);
  77. } else if (name.equals("objectgroup")) {
  78. loadObjectGroup(map, element);
  79. }
  80. }
  81. return map;
  82. }
  83.  
  84. @Override
  85. protected void loadTileSet (TiledMap map, XmlReader.Element element, FileHandle tmxFile, ImageResolver imageResolver) {
  86. if (element.getName().equals("tileset")) {
  87. String name = element.get("name", null);
  88. int firstgid = element.getIntAttribute("firstgid", 1);
  89. int tilewidth = element.getIntAttribute("tilewidth", 0);
  90. int tileheight = element.getIntAttribute("tileheight", 0);
  91. int spacing = element.getIntAttribute("spacing", 0);
  92. int margin = element.getIntAttribute("margin", 0);
  93. String source = element.getAttribute("source", null);
  94.  
  95. int offsetX = 0;
  96. int offsetY = 0;
  97.  
  98. String imageSource = "";
  99. int imageWidth = 0, imageHeight = 0;
  100.  
  101. FileHandle image = null;
  102. if (source != null) {
  103. FileHandle tsx = getRelativeFileHandle(tmxFile, source);
  104. try {
  105. element = xml.parse(tsx);
  106. name = element.get("name", null);
  107. tilewidth = element.getIntAttribute("tilewidth", 0);
  108. tileheight = element.getIntAttribute("tileheight", 0);
  109. spacing = element.getIntAttribute("spacing", 0);
  110. margin = element.getIntAttribute("margin", 0);
  111. XmlReader.Element offset = element.getChildByName("tileoffset");
  112. if (offset != null) {
  113. offsetX = offset.getIntAttribute("x", 0);
  114. offsetY = offset.getIntAttribute("y", 0);
  115. }
  116. XmlReader.Element imageElement = element.getChildByName("image");
  117. if (imageElement != null) {
  118. imageSource = imageElement.getAttribute("source");
  119. imageWidth = imageElement.getIntAttribute("width", 0);
  120. imageHeight = imageElement.getIntAttribute("height", 0);
  121. image = getRelativeFileHandle(tsx, imageSource);
  122. }
  123. } catch (SerializationException e) {
  124. throw new GdxRuntimeException("Error parsing external tileset.");
  125. } catch (IOException e) {
  126. e.printStackTrace();
  127. }
  128. } else {
  129. XmlReader.Element offset = element.getChildByName("tileoffset");
  130. if (offset != null) {
  131. offsetX = offset.getIntAttribute("x", 0);
  132. offsetY = offset.getIntAttribute("y", 0);
  133. }
  134. XmlReader.Element imageElement = element.getChildByName("image");
  135. if (imageElement != null) {
  136. imageSource = imageElement.getAttribute("source");
  137. imageWidth = imageElement.getIntAttribute("width", 0);
  138. imageHeight = imageElement.getIntAttribute("height", 0);
  139. image = getRelativeFileHandle(tmxFile, imageSource);
  140. }
  141. }
  142.  
  143. TiledMapTileSet tileset = new TiledMapTileSet();
  144. tileset.setName(name);
  145. tileset.getProperties().put("firstgid", firstgid);
  146.  
  147. Array<XmlReader.Element> tileElements = element.getChildrenByName("tile");
  148. for (XmlReader.Element tileElement : tileElements) {
  149. XmlReader.Element imageElement = tileElement.getChildByName("image");
  150. if (imageElement != null) {
  151. imageSource = imageElement.getAttribute("source");
  152. imageWidth = imageElement.getIntAttribute("width", 0);
  153. imageHeight = imageElement.getIntAttribute("height", 0);
  154.  
  155. if (source != null) {
  156. image = getRelativeFileHandle(getRelativeFileHandle(tmxFile, source), imageSource);
  157. } else {
  158. image = getRelativeFileHandle(tmxFile, imageSource);
  159. }
  160. }
  161.  
  162. TiledMapTile tile = new StaticTiledMapTile((TextureRegion) null);
  163. tile.setId(firstgid + tileElement.getIntAttribute("id"));
  164. tile.setOffsetX(offsetX);
  165. tile.setOffsetY(flipY ? -offsetY : offsetY);
  166. tileset.putTile(tile.getId(), tile);
  167. }
  168.  
  169.  
  170. Array<AnimatedTiledMapTile> animatedTiles = new Array<AnimatedTiledMapTile>();
  171.  
  172. for (XmlReader.Element tileElement : tileElements) {
  173. int localtid = tileElement.getIntAttribute("id", 0);
  174. TiledMapTile tile = tileset.getTile(firstgid + localtid);
  175. if (tile != null) {
  176. XmlReader.Element animationElement = tileElement.getChildByName("animation");
  177. if (animationElement != null) {
  178.  
  179. Array<StaticTiledMapTile> staticTiles = new Array<StaticTiledMapTile>();
  180. IntArray intervals = new IntArray();
  181. for (XmlReader.Element frameElement: animationElement.getChildrenByName("frame")) {
  182. staticTiles.add((StaticTiledMapTile) tileset.getTile(firstgid + frameElement.getIntAttribute("tileid")));
  183. intervals.add(frameElement.getIntAttribute("duration"));
  184. }
  185.  
  186. AnimatedTiledMapTile animatedTile = new AnimatedTiledMapTile(intervals, staticTiles);
  187. animatedTile.setId(tile.getId());
  188. animatedTiles.add(animatedTile);
  189. tile = animatedTile;
  190. }
  191.  
  192. XmlReader.Element objectgroupElement = tileElement.getChildByName("objectgroup");
  193. if (objectgroupElement != null) {
  194.  
  195. for (XmlReader.Element objectElement: objectgroupElement.getChildrenByName("object")) {
  196. loadObject(map, (MapLayer) tile, objectElement);
  197. }
  198. }
  199.  
  200. String terrain = tileElement.getAttribute("terrain", null);
  201. if (terrain != null) {
  202. tile.getProperties().put("terrain", terrain);
  203. }
  204. String probability = tileElement.getAttribute("probability", null);
  205. if (probability != null) {
  206. tile.getProperties().put("probability", probability);
  207. }
  208. XmlReader.Element properties = tileElement.getChildByName("properties");
  209. if (properties != null) {
  210. loadProperties(tile.getProperties(), properties);
  211. }
  212. }
  213. }
  214.  
  215. for (AnimatedTiledMapTile tile : animatedTiles) {
  216. tileset.putTile(tile.getId(), tile);
  217. }
  218.  
  219. XmlReader.Element properties = element.getChildByName("properties");
  220. if (properties != null) {
  221. loadProperties(tileset.getProperties(), properties);
  222. }
  223. map.getTileSets().addTileSet(tileset);
  224. }
  225. }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement