X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=tools%2Ftilemanager%2FApplication.cs;h=deaf73b967a864a1fe80c73df71c9d711c68fce0;hb=2ad3ecbc14b77d373c796ad04d6389489666cc01;hp=a8fe0a936bd3cb8702570c3ef061f058fae1426f;hpb=43db9a6c44b6ee544e7694d1bb234ba559b0849c;p=supertux.git diff --git a/tools/tilemanager/Application.cs b/tools/tilemanager/Application.cs index a8fe0a936..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; @@ -396,15 +421,27 @@ public class Application { return; foreach(Tile tile in Selection) { if(sender == SolidCheckButton) - tile.Solid = SolidCheckButton.Active; + tile.SetAttribute(Attribute.SOLID, SolidCheckButton.Active); if(sender == UniSolidCheckButton) - tile.UniSolid = UniSolidCheckButton.Active; + tile.SetAttribute(Attribute.UNISOLID, UniSolidCheckButton.Active); if(sender == IceCheckButton) - tile.Ice = IceCheckButton.Active; + tile.SetAttribute(Attribute.ICE, IceCheckButton.Active); if(sender == WaterCheckButton) - tile.Water = WaterCheckButton.Active; + 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.Slope = SlopeCheckButton.Active; + 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) @@ -452,11 +489,17 @@ public class Application { string nextimage = ""; foreach(Tile tile in Selection) { if(first) { - SolidCheckButton.Active = tile.Solid; - UniSolidCheckButton.Active = tile.UniSolid; - IceCheckButton.Active = tile.Ice; - WaterCheckButton.Active = tile.Water; - SlopeCheckButton.Active = tile.Slope; + SolidCheckButton.Active = tile.HasAttribute(Attribute.SOLID); + 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();