diff options
author | Kevin Chabowski <kevin@kch42.de> | 2013-11-06 23:15:51 +0100 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2013-11-06 23:15:51 +0100 |
commit | 291506b5ed49ffbefd9046a9c9f5a297f3e198ab (patch) | |
tree | 63060f6cf67f8bb0d45acc995a95dd0f516609d5 /main.go | |
parent | 8150778cbdf2e2f72d300a548c669b07b6e98d0c (diff) | |
download | biomed-291506b5ed49ffbefd9046a9c9f5a297f3e198ab.tar.gz biomed-291506b5ed49ffbefd9046a9c9f5a297f3e198ab.tar.bz2 biomed-291506b5ed49ffbefd9046a9c9f5a297f3e198ab.zip |
Worlds are now opened by their level.dat and are centered properly.
The world spawn will be read from the level.dat and the view will be
centered to that position.
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 31 |
1 files changed, 27 insertions, 4 deletions
@@ -7,6 +7,7 @@ import ( "github.com/mattn/go-gtk/glib" "github.com/mattn/go-gtk/gtk" "os" + "path" ) type GUI struct { @@ -31,23 +32,45 @@ type GUI struct { } func (g *GUI) openWorldDlg() { - dlg := gtk.NewFileChooserDialog("Open World (region directory)", g.window, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, "Open Region dir", gtk.RESPONSE_OK, "Cancel", gtk.RESPONSE_CANCEL) + dlg := gtk.NewFileChooserDialog("Open World (level.dat)", g.window, gtk.FILE_CHOOSER_ACTION_OPEN, "Open", gtk.RESPONSE_OK, "Cancel", gtk.RESPONSE_CANCEL) + filter := gtk.NewFileFilter() + filter.AddPattern("level.dat") + filter.SetName("level.dat") + dlg.AddFilter(filter) if dlg.Run() == gtk.RESPONSE_OK { g.openWorld(dlg.GetFilename()) } dlg.Destroy() } -func (g *GUI) openWorld(path string) { - region, err := mcmap.OpenRegion(path, false) +func readWorld(p string) (*mcmap.Region, int, int, error) { + f, err := os.Open(p) if err != nil { - dlg := gtk.NewMessageDialog(g.window, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, "Could not load world %s:\n%s", path, err.Error()) + return nil, 0, 0, err + } + defer f.Close() + + x, z, err := getMapCenter(f) + if err != nil { + return nil, 0, 0, err + } + + dir, _ := path.Split(p) + region, err := mcmap.OpenRegion(path.Join(dir, "region"), false) + return region, x, z, err +} + +func (g *GUI) openWorld(p string) { + region, centerX, centerZ, err := readWorld(p) + if err != nil { + dlg := gtk.NewMessageDialog(g.window, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, "Could not load world %s:\n%s", p, err.Error()) dlg.Run() dlg.Destroy() } g.menuitemSave.SetSensitive(true) + g.mapw.SetCenter(centerX, centerZ) g.mapw.SetRegion(region) } |