3 using System.Collections;
6 public class TileGroup {
8 public ArrayList Tiles = new ArrayList();
10 public void Write(LispWriter writer) {
11 writer.StartList("tilegroup");
13 writer.Write("name", Name);
14 writer.Write("tiles", Tiles);
16 writer.EndList("tilegroup");
19 public void Parse(Lisp.Parser parser) {
21 while(parser.Parse() && parser.Depth >= d) {
22 if(parser.Depth == d+1) {
23 if(parser.Type != Parser.LispType.SYMBOL)
24 throw new Exception("expected SYMBOL");
25 string symbol = parser.SymbolValue;
29 Name = parser.StringValue;
33 Tiles.Add(parser.IntegerValue);
34 } while(parser.Parse()
35 && parser.Type == Parser.LispType.INTEGER);
38 Console.WriteLine("Unknown section " + symbol);
46 public class TileSet {
47 private bool tooNew = false;
49 /// <summary>Whether version of tileset file is too new</summary>
56 public ArrayList Tiles = new ArrayList();
57 public ArrayList TileGroups = new ArrayList();
59 public void Write(string filename) {
60 FileStream fs = new FileStream(filename, FileMode.Create);
62 TextWriter tw = new StreamWriter(fs);
63 LispWriter writer = new LispWriter(tw);
65 writer.WriteComment("Generated by tiler");
66 writer.StartList("supertux-tiles");
67 foreach(TileGroup tilegroup in TileGroups) {
68 tilegroup.Write(writer);
70 foreach(Tile tile in Tiles) {
76 writer.EndList("supertux-tiles");
81 public void Parse(string filename) {
82 FileStream fs = new FileStream(filename, FileMode.Open);
83 StreamReader stream = new StreamReader(fs);
85 Lisp.Parser parser = new Lisp.Parser(stream);
87 if(parser.Type != Parser.LispType.START_LIST)
88 throw new Exception("Expected START_LIST");
90 if(parser.Type != Parser.LispType.SYMBOL)
91 throw new Exception("Expected symbol");
92 if(parser.SymbolValue != "supertux-tiles")
93 throw new Exception("not a supertux tile files but " +
101 public void ParseTiles(Lisp.Parser parser) {
103 int d = parser.Depth;
104 while(parser.Parse() && parser.Depth >= d) {
105 if(parser.Depth == d && parser.Type != Parser.LispType.START_LIST) {
106 Console.WriteLine("non-cons type in list...");
110 if(parser.Depth == d+1) {
111 if(parser.Type != Parser.LispType.SYMBOL) {
112 throw new Exception("Expected symbol in list element");
114 switch(parser.SymbolValue) {
119 TileGroup tilegroup = new TileGroup();
120 tilegroup.Parse(parser);
121 TileGroups.Add(tilegroup);
124 Tile tile = new Tile();
127 while(tile.ID >= Tiles.Count)
129 Tiles[tile.ID] = tile;
135 "Warning: new syntax of \"More tiles in one image\" file isn't currently supported");
137 "And this means: YOU WON'T BE ABLE TO SAVE YOUR CHANGES !!!");
140 throw new Exception("Unexpected listentry: " +
147 private void SkipList(Lisp.Parser parser) {
148 int d = parser.Depth;
149 while(parser.Parse() && parser.Depth >= d)