diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2015-03-16 10:30:31 -0400 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2015-03-16 10:30:31 -0400 |
commit | c46db36fe1c319a76cb6bd089b25952db0d98e11 (patch) | |
tree | a4ede892db1dc292a221ff33f991e1b92028a9b4 /tools/mapedit/src/widget.cpp | |
parent | 54eee8e0a79898825b39749b38134f4369ccd3ab (diff) | |
download | therapy-c46db36fe1c319a76cb6bd089b25952db0d98e11.tar.gz therapy-c46db36fe1c319a76cb6bd089b25952db0d98e11.tar.bz2 therapy-c46db36fe1c319a76cb6bd089b25952db0d98e11.zip |
Added ability to edit and remove entities to map editor
Diffstat (limited to 'tools/mapedit/src/widget.cpp')
-rw-r--r-- | tools/mapedit/src/widget.cpp | 89 |
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) | |||
6 | BEGIN_EVENT_TABLE(MapeditWidget, wxScrolledWindow) | 6 | BEGIN_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 | ||
25 | void MapeditWidget::Init() | 26 | void 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 | ||
207 | void 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 | |||
159 | void MapeditWidget::OnMouseMove(wxMouseEvent& event) | 233 | void MapeditWidget::OnMouseMove(wxMouseEvent& event) |
160 | { | 234 | { |
161 | mousePos = event.GetPosition(); | 235 | mousePos = event.GetPosition(); |
@@ -216,6 +290,7 @@ void MapeditWidget::SetEditMode(EditMode editMode) | |||
216 | void MapeditWidget::StartAddingEntity(MapObject* object) | 290 | void MapeditWidget::StartAddingEntity(MapObject* object) |
217 | { | 291 | { |
218 | addingEntity = object; | 292 | addingEntity = object; |
293 | selectedEntity = nullptr; | ||
219 | } | 294 | } |
220 | 295 | ||
221 | void MapeditWidget::CancelAddingEntity() | 296 | void MapeditWidget::CancelAddingEntity() |