X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=tools%2Ftilemanager%2FApplication.cs;h=deaf73b967a864a1fe80c73df71c9d711c68fce0;hb=2ad3ecbc14b77d373c796ad04d6389489666cc01;hp=2b0c5ae7ebd2d5cf10bdf8496922d46fa9b4baf7;hpb=ae48931792caf6b9b55a130c9c445e83b297e04c;p=supertux.git diff --git a/tools/tilemanager/Application.cs b/tools/tilemanager/Application.cs index 2b0c5ae7e..deaf73b96 100644 --- a/tools/tilemanager/Application.cs +++ b/tools/tilemanager/Application.cs @@ -1,3 +1,4 @@ +// $Id$ using System; using System.IO; using System.Collections; @@ -9,8 +10,11 @@ public class Application { [Glade.Widget] private Gtk.Window MainWindow; [Glade.Widget] + private Gtk.CheckMenuItem useNewSyntax; + [Glade.Widget] private Gtk.DrawingArea DrawingArea; [Glade.Widget] + //Flags CheckButtons private Gtk.CheckButton SolidCheckButton; [Glade.Widget] private Gtk.CheckButton UniSolidCheckButton; @@ -19,12 +23,25 @@ public class Application { [Glade.Widget] private Gtk.CheckButton WaterCheckButton; [Glade.Widget] + private Gtk.CheckButton HurtsCheckButton; + [Glade.Widget] + private Gtk.CheckButton FireCheckButton; + [Glade.Widget] + private Gtk.CheckButton BrickCheckButton; + [Glade.Widget] + private Gtk.CheckButton CoinCheckButton; + [Glade.Widget] + private Gtk.CheckButton FullBoxCheckButton; + [Glade.Widget] private Gtk.CheckButton SlopeCheckButton; [Glade.Widget] + private Gtk.CheckButton GoalCheckButton; + [Glade.Widget] private Gtk.CheckButton DontUseCheckButton; [Glade.Widget] private Gtk.CheckButton HiddenCheckButton; [Glade.Widget] + private Gtk.Entry DataEntry; [Glade.Widget] private Gtk.Entry AnimFpsEntry; @@ -93,12 +110,12 @@ public class Application { fileChooser.DefaultResponse = Gtk.ResponseType.Ok; Gtk.FileFilter filter; filter = new Gtk.FileFilter(); - filter.Name = "Supertux 0.1.x tilesets"; + filter.Name = "Supertux tilesets"; + filter.AddPattern("*.strf"); filter.AddPattern("*.stgt"); fileChooser.AddFilter( filter ); filter = new Gtk.FileFilter(); - filter.Name = "Supertux tilesets"; - filter.AddPattern("*.strf"); + filter.Name = "Supertux 0.1.x tilesets"; filter.AddPattern("*.stgt"); fileChooser.AddFilter( filter ); filter = new Gtk.FileFilter(); @@ -132,6 +149,11 @@ public class Application { SelectionChanged(); FillTileGroupComboBox(); FillTileList(); + + useNewSyntax.Active = tileset.IsNew; + if (tileset.IsNew) + Console.WriteLine("Warning: new syntax of 0.3.x files \"More tiles in one image\" isn't currently supported for WRITING"); + } protected void OnImportImage(object o, EventArgs e) { @@ -169,7 +191,7 @@ public class Application { tile.ID = startid + i; ImageRegion region = new ImageRegion(); region.ImageFile = currentimage; - region.Region = new System.Drawing.Rectangle(x*32, y*32, 32, 32); + region.Region = new System.Drawing.Rectangle(x*TileSet.TILE_WIDTH, y*TileSet.TILE_HEIGHT, TileSet.TILE_WIDTH, TileSet.TILE_HEIGHT); tile.Images.Add(region); if(Tiles[i] != null) { Console.WriteLine( @@ -191,15 +213,15 @@ public class Application { } try { pixbuf = new Pixbuf(tilesetdir + "/" + file); - if(pixbuf.Width % 32 != 0 || pixbuf.Height % 32 != 0) + if(pixbuf.Width % TileSet.TILE_WIDTH != 0 || pixbuf.Height % TileSet.TILE_HEIGHT != 0) Console.WriteLine("Warning: Image Width or Height is not a multiple of 32"); } catch(Exception e) { ShowException(e); return; } currentimage = new FileInfo(file).Name; - TilesX = pixbuf.Width / 32; - TilesY = pixbuf.Height / 32; + TilesX = pixbuf.Width / TileSet.TILE_WIDTH; + TilesY = pixbuf.Height / TileSet.TILE_HEIGHT; SelectionArray = new bool[TilesX * TilesY]; Tiles = new Tile[TilesX * TilesY]; @@ -211,8 +233,8 @@ public class Application { continue; ImageRegion region = (ImageRegion) tile.Images[0]; if(region.ImageFile == currentimage) { - int px = region.Region.X / 32; - int py = region.Region.Y / 32; + int px = region.Region.X / TileSet.TILE_WIDTH; + int py = region.Region.Y / TileSet.TILE_HEIGHT; int i = py*TilesX+px; if(i < 0 || i >= Tiles.Length) { Console.WriteLine("Invalid Imageregion at tile " + @@ -221,7 +243,7 @@ public class Application { } if(Tiles[i] != null) { Console.WriteLine("Multiple tiles for region " + - px*32 + " , " + py*32); + px*TileSet.TILE_WIDTH + " , " + py*TileSet.TILE_HEIGHT); continue; } Tiles[i] = tile; @@ -236,11 +258,14 @@ public class Application { } protected void OnSave(object o, EventArgs e) { - if (tileset.TooNew) - Console.WriteLine( - "Sorry, the file you are editing is too new, there will be huge data loss if you save this."); - else + if (tileset.IsNew && useNewSyntax.Active) { + MessageDialog dialog = new MessageDialog(MainWindow, DialogFlags.Modal | DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, + "Sorry, the file you are editing is too new and 0.3.x syntax is not supported yet."); + dialog.Run(); + dialog.Destroy(); + } else { tileset.Write(tilesetfile); + } } protected void OnQuit(object o, EventArgs e) { @@ -373,7 +398,7 @@ public class Application { } private void select(int x, int y) { - int tile = y/32 * TilesX + x/32; + int tile = y/TileSet.TILE_HEIGHT * TilesX + x/TileSet.TILE_WIDTH; if(tile < 0 || tile >= SelectionArray.Length) return; @@ -403,8 +428,20 @@ public class Application { tile.SetAttribute(Attribute.ICE, IceCheckButton.Active); if(sender == WaterCheckButton) tile.SetAttribute(Attribute.WATER, WaterCheckButton.Active); + if(sender == HurtsCheckButton) + tile.SetAttribute(Attribute.HURTS, HurtsCheckButton.Active); + if(sender == FireCheckButton) + tile.SetAttribute(Attribute.FIRE, FireCheckButton.Active); + if(sender == BrickCheckButton) + tile.SetAttribute(Attribute.BRICK, BrickCheckButton.Active); + if(sender == CoinCheckButton) + tile.SetAttribute(Attribute.COIN, CoinCheckButton.Active); + if(sender == FullBoxCheckButton) + tile.SetAttribute(Attribute.FULLBOX, FullBoxCheckButton.Active); if(sender == SlopeCheckButton) tile.SetAttribute(Attribute.SLOPE, SlopeCheckButton.Active); + if(sender == GoalCheckButton) + tile.SetAttribute(Attribute.GOAL, GoalCheckButton.Active); if(sender == HiddenCheckButton) tile.Hidden = HiddenCheckButton.Active; if(sender == DontUseCheckButton) @@ -456,7 +493,13 @@ public class Application { UniSolidCheckButton.Active = tile.HasAttribute(Attribute.UNISOLID); IceCheckButton.Active = tile.HasAttribute(Attribute.ICE); WaterCheckButton.Active = tile.HasAttribute(Attribute.WATER); + HurtsCheckButton.Active = tile.HasAttribute(Attribute.HURTS); + FireCheckButton.Active = tile.HasAttribute(Attribute.FIRE); + BrickCheckButton.Active = tile.HasAttribute(Attribute.BRICK); + CoinCheckButton.Active = tile.HasAttribute(Attribute.COIN); + FullBoxCheckButton.Active = tile.HasAttribute(Attribute.FULLBOX); SlopeCheckButton.Active = tile.HasAttribute(Attribute.SLOPE); + GoalCheckButton.Active = tile.HasAttribute(Attribute.GOAL); HiddenCheckButton.Active = tile.Hidden; DontUseCheckButton.Active = tile.ID == -1; DataEntry.Text = tile.Data.ToString();