TiledSharp  0.9.1 r0
A .NET C# library for importing Tiled TMX tile maps
 All Classes Namespaces Files Functions Variables Enumerations Properties Pages
Tileset.cs
Go to the documentation of this file.
1 /* Distributed as part of TiledSharp, Copyright 2012 Marshall Ward
2  * Licensed under the Apache License, Version 2.0
3  * http://www.apache.org/licenses/LICENSE-2.0 */
4 using System;
5 using System.Collections.Generic;
6 using System.IO;
7 using System.Xml.Linq;
8 
9 namespace TiledSharp
10 {
12  {
13  public int FirstGid {get; private set;}
14  public string Name {get; private set;}
15  public int TileWidth {get; private set;}
16  public int TileHeight {get; private set;}
17  public int Spacing {get; private set;}
18  public int Margin {get; private set;}
19 
20  public TmxTileOffset TileOffset {get; private set;}
21  public TmxImage Image {get; private set;}
22  public TmxList<TmxTerrain> Terrains {get; private set;}
23  public List<TmxTilesetTile> Tiles {get; private set;}
24  public PropertyDict Properties {get; private set;}
25 
26  // TSX file constructor
27  public TmxTileset(XDocument xDoc, string tmxDir) :
28  this(xDoc.Element("tileset"), tmxDir) { }
29 
30  // TMX tileset element constructor
31  public TmxTileset(XElement xTileset, string tmxDir = "")
32  {
33  var xFirstGid = xTileset.Attribute("firstgid");
34  var source = (string)xTileset.Attribute("source");
35 
36  if (source != null)
37  {
38  // Prepend the parent TMX directory if necessary
39  source = Path.Combine(tmxDir, source);
40 
41  // source is always preceded by firstgid
42  FirstGid = (int)xFirstGid;
43 
44  // Everything else is in the TSX file
45  var xDocTileset = ReadXml(source);
46  var ts = new TmxTileset(xDocTileset, TmxDirectory);
47 
48  Name = ts.Name;
49  TileWidth = ts.TileWidth;
50  TileHeight = ts.TileHeight;
51  Spacing = ts.Spacing;
52  Margin = ts.Margin;
53  TileOffset = ts.TileOffset;
54  Image = ts.Image;
55  Terrains = ts.Terrains;
56  Tiles = ts.Tiles;
57  Properties = ts.Properties;
58  }
59  else
60  {
61  // firstgid is always in TMX, but not TSX
62  if (xFirstGid != null)
63  FirstGid = (int)xFirstGid;
64 
65  Name = (string)xTileset.Attribute("name");
66  TileWidth = (int)xTileset.Attribute("tilewidth");
67  TileHeight = (int)xTileset.Attribute("tileheight");
68  Spacing = (int?)xTileset.Attribute("spacing") ?? 0;
69  Margin = (int?)xTileset.Attribute("margin") ?? 0;
70 
71  TileOffset = new TmxTileOffset(xTileset.Element("tileoffset"));
72  Image = new TmxImage(xTileset.Element("image"), tmxDir);
73 
74  Terrains = new TmxList<TmxTerrain>();
75  var xTerrainType = xTileset.Element("terraintypes");
76  if (xTerrainType != null) {
77  foreach (var e in xTerrainType.Elements("terrain"))
78  Terrains.Add(new TmxTerrain(e));
79  }
80 
81  Tiles = new List<TmxTilesetTile>();
82  foreach (var xTile in xTileset.Elements("tile"))
83  {
84  var tile = new TmxTilesetTile(xTile, Terrains, tmxDir);
85  Tiles.Add(tile);
86  }
87 
88  Properties = new PropertyDict(xTileset.Element("properties"));
89  }
90  }
91  }
92 
93  public class TmxTileOffset
94  {
95  public int X {get; private set;}
96  public int Y {get; private set;}
97 
98  public TmxTileOffset(XElement xTileOffset)
99  {
100  if (xTileOffset == null) {
101  X = 0;
102  Y = 0;
103  } else {
104  X = (int)xTileOffset.Attribute("x");
105  Y = (int)xTileOffset.Attribute("y");
106  }
107  }
108  }
109 
110  public class TmxTerrain : ITmxElement
111  {
112  public string Name {get; private set;}
113  public int Tile {get; private set;}
114 
115  public PropertyDict Properties {get; private set;}
116 
117  public TmxTerrain(XElement xTerrain)
118  {
119  Name = (string)xTerrain.Attribute("name");
120  Tile = (int)xTerrain.Attribute("tile");
121  Properties = new PropertyDict(xTerrain.Element("properties"));
122  }
123  }
124 
125  public class TmxTilesetTile
126  {
127  public int Id {get; private set;}
128  public List<TmxTerrain> TerrainEdges {get; private set;}
129  public double Probability {get; private set;}
130 
131  public TmxImage Image {get; private set;}
132  public PropertyDict Properties {get; private set;}
133 
134  // Human-readable aliases to the Terrain markers
136  get { return TerrainEdges[0]; }
137  }
138 
140  get { return TerrainEdges[1]; }
141  }
142 
144  get { return TerrainEdges[2]; }
145  }
147  get { return TerrainEdges[3]; }
148  }
149 
150  public TmxTilesetTile(XElement xTile, TmxList<TmxTerrain> Terrains,
151  string tmxDir = "")
152  {
153  Id = (int)xTile.Attribute("id");
154 
155  TerrainEdges = new List<TmxTerrain>(4);
156 
157  int result;
158  TmxTerrain edge;
159 
160  var strTerrain = (string)xTile.Attribute("terrain") ?? ",,,";
161  foreach (var v in strTerrain.Split(',')) {
162  var success = int.TryParse(v, out result);
163  if (success)
164  edge = Terrains[result];
165  else
166  edge = null;
167  TerrainEdges.Add(edge);
168  }
169 
170  Probability = (double?)xTile.Attribute("probability") ?? 1.0;
171  Image = new TmxImage(xTile.Element("image"), tmxDir);
172  Properties = new PropertyDict(xTile.Element("properties"));
173  }
174  }
175 }
int Id
Local tile ID.
Definition: Tileset.cs:127
Terrain tile information.
Definition: Tileset.cs:125
PropertyDict Properties
User-defined tile properties.
Definition: Tileset.cs:132
TmxTerrain(XElement xTerrain)
Terrain constructor.
Definition: Tileset.cs:117
TMX document importer.
Definition: TiledCore.cs:16
string Name
Terrain name.
Definition: Tileset.cs:112
string TmxDirectory
Parent directory of TMX file.
Definition: TiledCore.cs:18
List< TmxTerrain > TerrainEdges
Active terrain generation corners.
Definition: Tileset.cs:128
TmxList< TmxTerrain > Terrains
Terrain generation definitions.
Definition: Tileset.cs:22
int Spacing
The pixel spacing between tiles (excluding the margin)
Definition: Tileset.cs:17
int X
X (rightward) tile offset.
Definition: Tileset.cs:95
TMX element interface.
Definition: TiledCore.cs:49
TmxImage Image
Tileset image source.
Definition: Tileset.cs:21
PropertyDict Properties
User-defined tileset properties.
Definition: Tileset.cs:24
XDocument ReadXml(string filepath)
Parse XML content of TMX file.
Definition: TiledCore.cs:20
Pixel offset when drawing a tile from a related tileset.
Definition: Tileset.cs:93
Tilesets for a TMX Map.
Definition: Tileset.cs:11
int Y
Y (downward) tile offset.
Definition: Tileset.cs:96
int FirstGid
The global ID of the first tile in the tileset.
Definition: Tileset.cs:13
TmxTerrain TopLeft
Top-left terrain generation.
Definition: Tileset.cs:135
Tiled terrain generation tool.
Definition: Tileset.cs:110
int TileHeight
The (maximum) pixel height of the tiles.
Definition: Tileset.cs:16
double Probability
Terrain selection probability.
Definition: Tileset.cs:129
int Tile
Local ID of tile used to represent the terrain.
Definition: Tileset.cs:113
TmxTileOffset(XElement xTileOffset)
Tile offset constructor.
Definition: Tileset.cs:98
PropertyDict Properties
User-defiend terrain properties.
Definition: Tileset.cs:115
TmxTileset(XDocument xDoc, string tmxDir)
Tileset constructor for external TSX file.
Definition: Tileset.cs:27
TmxTerrain BottomRight
Bottom-right terrain generation.
Definition: Tileset.cs:146
string Name
Name of the tileset.
Definition: Tileset.cs:14
TmxTileset(XElement xTileset, string tmxDir="")
Tileset constructor for TMX source element.
Definition: Tileset.cs:31
TmxTilesetTile(XElement xTile, TmxList< TmxTerrain > Terrains, string tmxDir="")
Terrain tile constructor.
Definition: Tileset.cs:150
TmxTerrain TopRight
Top-right terrain generation.
Definition: Tileset.cs:139
List< TmxTilesetTile > Tiles
Terrain generation tiles.
Definition: Tileset.cs:23
int TileWidth
The (maximum) pixel width of the tiles.
Definition: Tileset.cs:15
TmxTerrain BottomLeft
Bottom-left terrain generation.
Definition: Tileset.cs:143
TmxImage Image
External tile image reference.
Definition: Tileset.cs:131
User-defined property list.
Definition: TiledCore.cs:90
TmxTileOffset TileOffset
Pixel offset when drawing a tile from a related tileset.
Definition: Tileset.cs:20
int Margin
The pixel margin (or border) of the tileset.
Definition: Tileset.cs:18