summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--maps/second.xml18
-rwxr-xr-xres/disk.pngbin0 -> 620 bytes
-rwxr-xr-xres/folder_page.pngbin0 -> 688 bytes
-rwxr-xr-xres/page_add.pngbin0 -> 739 bytes
-rw-r--r--tools/mapedit/src/frame.cpp23
-rw-r--r--tools/mapedit/src/frame.h2
-rw-r--r--tools/mapedit/src/map.cpp28
-rw-r--r--tools/mapedit/src/map.h7
8 files changed, 59 insertions, 19 deletions
diff --git a/maps/second.xml b/maps/second.xml index b6c2419..f9212c0 100644 --- a/maps/second.xml +++ b/maps/second.xml
@@ -1,6 +1,5 @@
1<map-def> 1<?xml version="1.0" encoding="ISO-8859-1"?>
2 <name>It's A Trap!</name> 2<map-def><name>It's A Trap!</name><environment>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3 <environment>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0, 30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,
50,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0, 40,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,
60,0,0,0,0,0,0,19,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 50,0,0,0,0,0,0,19,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -14,7 +13,7 @@
140,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 130,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
150,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 140,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
160,20,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 150,20,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
170,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,29,-1,30,31,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 160,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,29,0,30,31,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
180,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 170,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
190,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,34,35,36,37,38,39,40,41,0,0,0,0,0,0,0,0,0,0,0,0,0, 180,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,34,35,36,37,38,39,40,41,0,0,0,0,0,0,0,0,0,0,0,0,0,
200,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 190,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -23,12 +22,5 @@
230,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 220,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
240,0,0,27,2,2,3,3,3,4,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 230,0,0,27,2,2,3,3,3,4,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
250,20,0,0,0,0,0,19,0,0,27,1,1,1,2,2,2,26,0,0,0,0,0,0,0,0,0,0,24,4,2,2,1,3,2,2,1,2,2,3, 240,20,0,0,0,0,0,19,0,0,27,1,1,1,2,2,2,26,0,0,0,0,0,0,0,0,0,0,24,4,2,2,1,3,2,2,1,2,2,3,
260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,42,42,42,42,42,42,42,42,42,42,12,0,0,0,0,0,19,0,0,0,0,0,</environment> 250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,42,42,42,42,42,42,42,42,42,42,12,0,0,0,0,0,19,0,0,0,0,0,
27 <entities> 26</environment><leftmap></leftmap><rightmap>embarass</rightmap><entities><entity><entity-type>checkpoint</entity-type><entity-position>257,160</entity-position></entity></entities></map-def>
28 <entity>
29 <entity-type>checkpoint</entity-type>
30 <entity-position>257,160</entity-position>
31 </entity>
32 </entities>
33 <rightmap>embarass</rightmap>
34</map-def>
diff --git a/res/disk.png b/res/disk.png new file mode 100755 index 0000000..99d532e --- /dev/null +++ b/res/disk.png
Binary files differ
diff --git a/res/folder_page.png b/res/folder_page.png new file mode 100755 index 0000000..1ef6e11 --- /dev/null +++ b/res/folder_page.png
Binary files differ
diff --git a/res/page_add.png b/res/page_add.png new file mode 100755 index 0000000..d5bfa07 --- /dev/null +++ b/res/page_add.png
Binary files differ
diff --git a/tools/mapedit/src/frame.cpp b/tools/mapedit/src/frame.cpp index 0b03448..a38b861 100644 --- a/tools/mapedit/src/frame.cpp +++ b/tools/mapedit/src/frame.cpp
@@ -14,7 +14,10 @@ enum {
14 MENU_FILE_NEW, 14 MENU_FILE_NEW,
15 MENU_FILE_OPEN, 15 MENU_FILE_OPEN,
16 MENU_FILE_SAVE, 16 MENU_FILE_SAVE,
17 MENU_FILE_CLOSE 17 MENU_FILE_CLOSE,
18 TOOL_FILE_NEW,
19 TOOL_FILE_OPEN,
20 TOOL_FILE_SAVE
18}; 21};
19 22
20wxBEGIN_EVENT_TABLE(MapeditFrame, wxFrame) 23wxBEGIN_EVENT_TABLE(MapeditFrame, wxFrame)
@@ -24,12 +27,17 @@ wxBEGIN_EVENT_TABLE(MapeditFrame, wxFrame)
24 EVT_MENU(MENU_FILE_NEW, MapeditFrame::OnNew) 27 EVT_MENU(MENU_FILE_NEW, MapeditFrame::OnNew)
25 EVT_MENU(MENU_FILE_OPEN, MapeditFrame::OnOpen) 28 EVT_MENU(MENU_FILE_OPEN, MapeditFrame::OnOpen)
26 EVT_MENU(MENU_FILE_SAVE, MapeditFrame::OnSave) 29 EVT_MENU(MENU_FILE_SAVE, MapeditFrame::OnSave)
30 EVT_TOOL(TOOL_FILE_NEW, MapeditFrame::OnNew)
31 EVT_TOOL(TOOL_FILE_OPEN, MapeditFrame::OnOpen)
32 EVT_TOOL(TOOL_FILE_SAVE, MapeditFrame::OnSave)
27 EVT_MENU(MENU_FILE_CLOSE, MapeditFrame::OnClose) 33 EVT_MENU(MENU_FILE_CLOSE, MapeditFrame::OnClose)
28 EVT_CLOSE(MapeditFrame::OnExit) 34 EVT_CLOSE(MapeditFrame::OnExit)
29wxEND_EVENT_TABLE() 35wxEND_EVENT_TABLE()
30 36
31MapeditFrame::MapeditFrame(Map map, std::string filename) : wxFrame(NULL, wxID_ANY, "Map Editor", wxDefaultPosition, wxSize(GAME_WIDTH*3, GAME_HEIGHT*2)), map(map), filename(filename) 37MapeditFrame::MapeditFrame(Map map, std::string filename) : wxFrame(NULL, wxID_ANY, "Map Editor", wxDefaultPosition, wxSize(GAME_WIDTH*3, GAME_HEIGHT*2)), map(map), filename(filename)
32{ 38{
39 this->map.frame = this;
40
33 wxMenu* menuFile = new wxMenu; 41 wxMenu* menuFile = new wxMenu;
34 menuFile->Append(MENU_FILE_NEW, "New\tCtrl-N"); 42 menuFile->Append(MENU_FILE_NEW, "New\tCtrl-N");
35 menuFile->Append(MENU_FILE_OPEN, "Open\tCtrl-O"); 43 menuFile->Append(MENU_FILE_OPEN, "Open\tCtrl-O");
@@ -137,6 +145,14 @@ MapeditFrame::MapeditFrame(Map map, std::string filename) : wxFrame(NULL, wxID_A
137 splitterSizer->Add(propertyEditor, 0, wxALIGN_TOP, wxALIGN_LEFT, 0); 145 splitterSizer->Add(propertyEditor, 0, wxALIGN_TOP, wxALIGN_LEFT, 0);
138 layout3->SetSizer(splitterSizer); 146 layout3->SetSizer(splitterSizer);
139 splitterSizer->SetSizeHints(layout3); 147 splitterSizer->SetSizeHints(layout3);
148
149 // Toolbar time!
150 toolbar = CreateToolBar();
151 toolbar->AddTool(TOOL_FILE_NEW, "New", wxBitmap(wxImage("res/page_add.png")));
152 toolbar->AddTool(TOOL_FILE_OPEN, "Open", wxBitmap(wxImage("res/folder_page.png")));
153 toolbar->AddTool(TOOL_FILE_SAVE, "Save", wxBitmap(wxImage("res/disk.png")));
154 toolbar->EnableTool(TOOL_FILE_SAVE, this->map.getDirty());
155 toolbar->Realize();
140} 156}
141 157
142void MapeditFrame::OnExit(wxCloseEvent& event) 158void MapeditFrame::OnExit(wxCloseEvent& event)
@@ -314,3 +330,8 @@ void MapeditFrame::FinishAddingEntity()
314 addEntityButton->Enable(); 330 addEntityButton->Enable();
315 cancelEntityButton->Disable(); 331 cancelEntityButton->Disable();
316} 332}
333
334void MapeditFrame::MapDirtyDidChange(bool dirty)
335{
336 toolbar->EnableTool(TOOL_FILE_SAVE, dirty);
337}
diff --git a/tools/mapedit/src/frame.h b/tools/mapedit/src/frame.h index 1cce4f3..4aa44c5 100644 --- a/tools/mapedit/src/frame.h +++ b/tools/mapedit/src/frame.h
@@ -21,6 +21,7 @@ class MapeditFrame : public wxFrame {
21 MapeditWidget* GetMapEditor(); 21 MapeditWidget* GetMapEditor();
22 void StartAddingEntity(); 22 void StartAddingEntity();
23 void FinishAddingEntity(); 23 void FinishAddingEntity();
24 void MapDirtyDidChange(bool dirty);
24 25
25 static void NewMap(); 26 static void NewMap();
26 static void OpenMap(const char* filename); 27 static void OpenMap(const char* filename);
@@ -53,6 +54,7 @@ class MapeditFrame : public wxFrame {
53 wxChoice* entityTypeBox; 54 wxChoice* entityTypeBox;
54 wxButton* addEntityButton; 55 wxButton* addEntityButton;
55 wxButton* cancelEntityButton; 56 wxButton* cancelEntityButton;
57 wxToolBar* toolbar;
56 58
57 bool addingEntity = false; 59 bool addingEntity = false;
58 60
diff --git a/tools/mapedit/src/map.cpp b/tools/mapedit/src/map.cpp index 2799a4e..f9c07fc 100644 --- a/tools/mapedit/src/map.cpp +++ b/tools/mapedit/src/map.cpp
@@ -2,6 +2,7 @@
2#include <libxml/parser.h> 2#include <libxml/parser.h>
3#include <libxml/xmlwriter.h> 3#include <libxml/xmlwriter.h>
4#include <sstream> 4#include <sstream>
5#include "frame.h"
5 6
6Map::Map() 7Map::Map()
7{ 8{
@@ -96,6 +97,7 @@ Map::Map(const Map& map)
96 rightmap = map.rightmap; 97 rightmap = map.rightmap;
97 dirty = map.dirty; 98 dirty = map.dirty;
98 objects = map.objects; 99 objects = map.objects;
100 frame = map.frame;
99} 101}
100 102
101Map::Map(Map&& map) : Map() 103Map::Map(Map&& map) : Map()
@@ -123,6 +125,7 @@ void swap(Map& first, Map& second)
123 std::swap(first.rightmap, second.rightmap); 125 std::swap(first.rightmap, second.rightmap);
124 std::swap(first.dirty, second.dirty); 126 std::swap(first.dirty, second.dirty);
125 std::swap(first.objects, second.objects); 127 std::swap(first.objects, second.objects);
128 std::swap(first.frame, second.frame);
126} 129}
127 130
128#define MY_ENCODING "ISO-8859-1" 131#define MY_ENCODING "ISO-8859-1"
@@ -197,7 +200,7 @@ void Map::save(std::string name)
197 200
198 xmlFreeTextWriter(writer); 201 xmlFreeTextWriter(writer);
199 202
200 dirty = false; 203 setDirty(false);
201} 204}
202 205
203bool Map::hasUnsavedChanges() const 206bool Map::hasUnsavedChanges() const
@@ -207,7 +210,7 @@ bool Map::hasUnsavedChanges() const
207 210
208void Map::setTileAt(int x, int y, int tile) 211void Map::setTileAt(int x, int y, int tile)
209{ 212{
210 dirty = true; 213 setDirty(true);
211 mapdata[x+y*MAP_WIDTH] = tile; 214 mapdata[x+y*MAP_WIDTH] = tile;
212} 215}
213 216
@@ -223,7 +226,7 @@ std::string Map::getTitle() const
223 226
224void Map::setTitle(std::string title) 227void Map::setTitle(std::string title)
225{ 228{
226 dirty = true; 229 setDirty(true);
227 this->title = title; 230 this->title = title;
228} 231}
229 232
@@ -234,12 +237,27 @@ const std::list<std::shared_ptr<MapObjectEntry>>& Map::getObjects() const
234 237
235void Map::addObject(std::shared_ptr<MapObjectEntry>& obj) 238void Map::addObject(std::shared_ptr<MapObjectEntry>& obj)
236{ 239{
237 dirty = true; 240 setDirty(true);
238 objects.push_back(obj); 241 objects.push_back(obj);
239} 242}
240 243
241void Map::removeObject(std::shared_ptr<MapObjectEntry>& obj) 244void Map::removeObject(std::shared_ptr<MapObjectEntry>& obj)
242{ 245{
243 dirty = true; 246 setDirty(true);
244 objects.remove(obj); 247 objects.remove(obj);
245} 248}
249
250bool Map::getDirty() const
251{
252 return dirty;
253}
254
255void Map::setDirty(bool dirty)
256{
257 this->dirty = dirty;
258
259 if (frame != nullptr)
260 {
261 frame->MapDirtyDidChange(dirty);
262 }
263}
diff --git a/tools/mapedit/src/map.h b/tools/mapedit/src/map.h index 16bbb4c..a2b9cb8 100644 --- a/tools/mapedit/src/map.h +++ b/tools/mapedit/src/map.h
@@ -8,6 +8,8 @@
8#include "object.h" 8#include "object.h"
9#include <memory> 9#include <memory>
10 10
11class MapeditFrame;
12
11const int TILE_WIDTH = 8; 13const int TILE_WIDTH = 8;
12const int TILE_HEIGHT = 8; 14const int TILE_HEIGHT = 8;
13const int GAME_WIDTH = 320; 15const int GAME_WIDTH = 320;
@@ -72,8 +74,13 @@ class Map {
72 const std::list<std::shared_ptr<MapObjectEntry>>& getObjects() const; 74 const std::list<std::shared_ptr<MapObjectEntry>>& getObjects() const;
73 void addObject(std::shared_ptr<MapObjectEntry>& obj); 75 void addObject(std::shared_ptr<MapObjectEntry>& obj);
74 void removeObject(std::shared_ptr<MapObjectEntry>& obj); 76 void removeObject(std::shared_ptr<MapObjectEntry>& obj);
77 bool getDirty() const;
78
79 MapeditFrame* frame;
75 80
76 private: 81 private:
82 void setDirty(bool dirty);
83
77 std::list<std::shared_ptr<MapObjectEntry>> objects; 84 std::list<std::shared_ptr<MapObjectEntry>> objects;
78 int* mapdata; 85 int* mapdata;
79 std::string title; 86 std::string title;