summary refs log tree commit diff stats
path: root/tools/mapedit/src/widget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/mapedit/src/widget.cpp')
-rw-r--r--tools/mapedit/src/widget.cpp89
1 files changed, 82 insertions, 7 deletions
diff --git a/tools/mapedit/src/widget.cpp b/tools/mapedit/src/widget.cpp index a78caae..c1f044c 100644 --- a/tools/mapedit/src/widget.cpp +++ b/tools/mapedit/src/widget.cpp
@@ -6,6 +6,7 @@ IMPLEMENT_DYNAMIC_CLASS(MapeditWidget,wxScrolledWindow)
6BEGIN_EVENT_TABLE(MapeditWidget, wxScrolledWindow) 6BEGIN_EVENT_TABLE(MapeditWidget, wxScrolledWindow)
7 EVT_PAINT(MapeditWidget::OnPaint) 7 EVT_PAINT(MapeditWidget::OnPaint)
8 EVT_LEFT_DOWN(MapeditWidget::OnClick) 8 EVT_LEFT_DOWN(MapeditWidget::OnClick)
9 EVT_RIGHT_DOWN(MapeditWidget::OnRightClick)
9 EVT_LEFT_UP(MapeditWidget::OnMouseUp) 10 EVT_LEFT_UP(MapeditWidget::OnMouseUp)
10 EVT_MOTION(MapeditWidget::OnMouseMove) 11 EVT_MOTION(MapeditWidget::OnMouseMove)
11 EVT_LEAVE_WINDOW(MapeditWidget::OnMouseOut) 12 EVT_LEAVE_WINDOW(MapeditWidget::OnMouseOut)
@@ -24,7 +25,7 @@ MapeditWidget::MapeditWidget(wxWindow* parent, wxWindowID winid, Map* map, TileW
24 25
25void MapeditWidget::Init() 26void MapeditWidget::Init()
26{ 27{
27 tiles = wxBitmap(wxImage("../../../res/tiles.png")); 28 tiles = wxBitmap(wxImage("res/tiles.png"));
28 29
29 this->FitInside(); 30 this->FitInside();
30 this->SetScrollRate(5, 5); 31 this->SetScrollRate(5, 5);
@@ -62,10 +63,18 @@ void MapeditWidget::OnPaint(wxPaintEvent&)
62 { 63 {
63 tiles_dc.SelectObject(wxNullBitmap); 64 tiles_dc.SelectObject(wxNullBitmap);
64 65
65 wxBitmap sprite = object.object->getSprite(); 66 wxBitmap sprite = object->object->getSprite();
66 tiles_dc.SelectObject(sprite); 67 tiles_dc.SelectObject(sprite);
67 68
68 dc.StretchBlit(object.position.first*scale-vX, object.position.second*scale-vY, object.object->getWidth()*scale, object.object->getHeight()*scale, &tiles_dc, 0, 0, object.object->getWidth(), object.object->getHeight()); 69 dc.StretchBlit(object->position.first*scale-vX, object->position.second*scale-vY, object->object->getWidth()*scale, object->object->getHeight()*scale, &tiles_dc, 0, 0, object->object->getWidth(), object->object->getHeight());
70
71 if ((editMode == EditEntities) && (selectedEntity) && (object == selectedEntity))
72 {
73 wxPen pen(*wxGREEN, 2);
74 dc.SetPen(pen);
75 dc.SetBrush(*wxTRANSPARENT_BRUSH);
76 dc.DrawRectangle(object->position.first*scale-vX, object->position.second*scale-vY, object->object->getWidth()*scale, object->object->getHeight()*scale);
77 }
69 } 78 }
70 79
71 if (editMode == EditTiles) 80 if (editMode == EditTiles)
@@ -140,22 +149,87 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
140 int x = (event.GetPosition().x + vX) / scale - (addingEntity->getWidth() / 2); 149 int x = (event.GetPosition().x + vX) / scale - (addingEntity->getWidth() / 2);
141 int y = (event.GetPosition().y + vY) / scale - (addingEntity->getHeight() / 2); 150 int y = (event.GetPosition().y + vY) / scale - (addingEntity->getHeight() / 2);
142 151
143 MapObjectEntry data; 152 auto data = std::make_shared<MapObjectEntry>();
144 data.object = addingEntity; 153 data->object = addingEntity;
145 data.position = std::make_pair(x,y); 154 data->position = std::make_pair(x,y);
146 map->getObjects().push_back(data); 155 map->addObject(data);
147 156
148 addingEntity = nullptr; 157 addingEntity = nullptr;
149 158
150 frame->FinishAddingEntity(); 159 frame->FinishAddingEntity();
151 160
152 Refresh(); 161 Refresh();
162 } else {
163 int vX, vY;
164 GetViewStart(&vX, &vY);
165 int vXX, vYX;
166 GetScrollPixelsPerUnit(&vXX, &vYX);
167 vX *= vXX;
168 vY *= vYX;
169
170 int x = (event.GetPosition().x + vX) / scale;
171 int y = (event.GetPosition().y + vY) / scale;
172
173 if (selectedEntity)
174 {
175 if ((x > selectedEntity->position.first) && (x < selectedEntity->position.first + selectedEntity->object->getWidth())
176 && (y > selectedEntity->position.second) && (y < selectedEntity->position.second + selectedEntity->object->getHeight()))
177 {
178 addingEntity = selectedEntity->object;
179 map->removeObject(selectedEntity);
180 selectedEntity.reset();
181 frame->StartAddingEntity();
182 } else {
183 selectedEntity.reset();
184 }
185
186 Refresh();
187 } else {
188 for (auto object : map->getObjects())
189 {
190 if ((x >= object->position.first) && (x <= object->position.first + object->object->getWidth())
191 && (y >= object->position.second) && (y <= object->position.second + object->object->getHeight()))
192 {
193 selectedEntity = object;
194
195 Refresh();
196
197 break;
198 }
199 }
200 }
153 } 201 }
154 } 202 }
155 203
156 event.Skip(); 204 event.Skip();
157} 205}
158 206
207void MapeditWidget::OnRightClick(wxMouseEvent& event)
208{
209 if (editMode == EditEntities)
210 {
211 if (selectedEntity)
212 {
213 int vX, vY;
214 GetViewStart(&vX, &vY);
215 int vXX, vYX;
216 GetScrollPixelsPerUnit(&vXX, &vYX);
217 vX *= vXX;
218 vY *= vYX;
219
220 int x = (event.GetPosition().x + vX) / scale;
221 int y = (event.GetPosition().y + vY) / scale;
222
223 if ((x > selectedEntity->position.first) && (x < selectedEntity->position.first + selectedEntity->object->getWidth())
224 && (y > selectedEntity->position.second) && (y < selectedEntity->position.second + selectedEntity->object->getHeight()))
225 {
226 map->removeObject(selectedEntity);
227 selectedEntity.reset();
228 }
229 }
230 }
231}
232
159void MapeditWidget::OnMouseMove(wxMouseEvent& event) 233void MapeditWidget::OnMouseMove(wxMouseEvent& event)
160{ 234{
161 mousePos = event.GetPosition(); 235 mousePos = event.GetPosition();
@@ -216,6 +290,7 @@ void MapeditWidget::SetEditMode(EditMode editMode)
216void MapeditWidget::StartAddingEntity(MapObject* object) 290void MapeditWidget::StartAddingEntity(MapObject* object)
217{ 291{
218 addingEntity = object; 292 addingEntity = object;
293 selectedEntity = nullptr;
219} 294}
220 295
221void MapeditWidget::CancelAddingEntity() 296void MapeditWidget::CancelAddingEntity()