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.cpp138
1 files changed, 103 insertions, 35 deletions
diff --git a/tools/mapedit/src/widget.cpp b/tools/mapedit/src/widget.cpp index d50cf91..6cbedcd 100644 --- a/tools/mapedit/src/widget.cpp +++ b/tools/mapedit/src/widget.cpp
@@ -66,48 +66,91 @@ void MapeditWidget::OnPaint(wxPaintEvent&)
66 wxBitmap sprite = object->object->getSprite(); 66 wxBitmap sprite = object->object->getSprite();
67 tiles_dc.SelectObject(sprite); 67 tiles_dc.SelectObject(sprite);
68 68
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()); 69 wxPoint pos {(int) object->position.first*scale-vX, (int) object->position.second*scale-vY};
70 wxSize size {object->object->getWidth()*scale, object->object->getHeight()*scale};
71 dc.StretchBlit(pos.x, pos.y, size.GetWidth(), size.GetHeight(), &tiles_dc, 0, 0, object->object->getWidth(), object->object->getHeight());
70 72
71 if ((editMode == EditEntities) && (selectedEntity) && (object == selectedEntity)) 73 if (editMode == EditEntities)
72 { 74 {
73 wxPen pen(*wxGREEN, 2); 75 if (!selectedEntity)
74 dc.SetPen(pen); 76 {
75 dc.SetBrush(*wxTRANSPARENT_BRUSH); 77 wxPen pen(*wxYELLOW, 2);
76 dc.DrawRectangle(object->position.first*scale-vX, object->position.second*scale-vY, object->object->getWidth()*scale, object->object->getHeight()*scale); 78 dc.SetPen(pen);
79 dc.SetBrush(*wxTRANSPARENT_BRUSH);
80 dc.DrawRectangle(pos.x, pos.y, size.GetWidth(), size.GetHeight());
81 } else if (object == selectedEntity)
82 {
83 wxPen pen(*wxGREEN, 2);
84 dc.SetPen(pen);
85 dc.SetBrush(*wxTRANSPARENT_BRUSH);
86 dc.DrawRectangle(pos.x, pos.y, size.GetWidth(), size.GetHeight());
87 }
77 } 88 }
78 } 89 }
79 90
80 if (editMode == EditTiles) 91 if (map->getWorld()->getStartingMap()->getID() == map->getID())
92 {
93 wxBitmap sprite = wxImage("res/Starla.png");
94 tiles_dc.SelectObject(wxNullBitmap);
95 tiles_dc.SelectObject(sprite);
96
97 std::pair<double, double> startPos = map->getWorld()->getStartingPosition();
98
99 wxPoint pos {(int) startPos.first*scale-vX, (int) startPos.second*scale-vY};
100 wxSize size {PLAYER_WIDTH[currentPlayer]*scale, PLAYER_HEIGHT[currentPlayer]*scale};
101
102 dc.StretchBlit(pos.x, pos.y, size.GetWidth(), size.GetHeight(), &tiles_dc, 0, 0, PLAYER_WIDTH[currentPlayer], PLAYER_HEIGHT[currentPlayer]);
103 }
104
105 if (mouseIsIn)
81 { 106 {
82 if (mouseIsIn) 107 if (isSettingPos)
108 {
109 wxBitmap sprite = wxImage("res/Starla.png");
110 tiles_dc.SelectObject(wxNullBitmap);
111 tiles_dc.SelectObject(sprite);
112
113 wxPoint pos {mousePos.x - PLAYER_WIDTH[currentPlayer]/2*scale, mousePos.y - PLAYER_HEIGHT[currentPlayer]/2*scale};
114 wxSize size {PLAYER_WIDTH[currentPlayer]*scale, PLAYER_HEIGHT[currentPlayer]*scale};
115
116 dc.StretchBlit(pos.x, pos.y, size.GetWidth(), size.GetHeight(), &tiles_dc, 0, 0, PLAYER_WIDTH[currentPlayer], PLAYER_HEIGHT[currentPlayer]);
117
118 wxPen pen(*wxGREEN, 2);
119 dc.SetPen(pen);
120 dc.SetBrush(*wxTRANSPARENT_BRUSH);
121 dc.DrawRectangle(pos.x, pos.y, size.GetWidth(), size.GetHeight());
122 } else if (editMode == EditTiles)
83 { 123 {
84 int tile = tileWidget->getSelected(); 124 int tile = tileWidget->getSelected();
85 int x = (mousePos.x + vX) / (TILE_WIDTH * scale); 125 int x = (mousePos.x + vX) / (TILE_WIDTH * scale);
86 int y = (mousePos.y + vY) / (TILE_HEIGHT * scale); 126 int y = (mousePos.y + vY) / (TILE_HEIGHT * scale);
87 127
128 wxPoint pos {x*TILE_WIDTH*scale-vX, y*TILE_HEIGHT*scale-vY};
129 wxSize size {TILE_WIDTH*scale, TILE_HEIGHT*scale};
130
88 tiles_dc.SelectObject(wxNullBitmap); 131 tiles_dc.SelectObject(wxNullBitmap);
89 tiles_dc.SelectObject(tiles); 132 tiles_dc.SelectObject(tiles);
90 dc.StretchBlit(x*TILE_WIDTH*scale-vX, y*TILE_HEIGHT*scale-vY, TILE_WIDTH*scale, TILE_HEIGHT*scale, &tiles_dc, tile%8*TILE_WIDTH, tile/8*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT); 133 dc.StretchBlit(pos.x, pos.y, size.GetWidth(), size.GetHeight(), &tiles_dc, tile%8*TILE_WIDTH, tile/8*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
91 134
92 wxPen pen(*wxGREEN, 2); 135 wxPen pen(*wxGREEN, 2);
93 dc.SetPen(pen); 136 dc.SetPen(pen);
94 dc.SetBrush(*wxTRANSPARENT_BRUSH); 137 dc.SetBrush(*wxTRANSPARENT_BRUSH);
95 dc.DrawRectangle(x*TILE_WIDTH*scale-vX, y*TILE_HEIGHT*scale-vY, TILE_WIDTH*scale, TILE_HEIGHT*scale); 138 dc.DrawRectangle(pos.x, pos.y, size.GetWidth(), size.GetHeight());
96 } 139 } else if ((editMode == EditEntities) && (addingEntity != nullptr))
97 } else if (editMode == EditEntities)
98 {
99 if ((addingEntity != nullptr) && (mouseIsIn))
100 { 140 {
101 wxBitmap sprite = addingEntity->getSprite(); 141 wxBitmap sprite = addingEntity->getSprite();
102 tiles_dc.SelectObject(wxNullBitmap); 142 tiles_dc.SelectObject(wxNullBitmap);
103 tiles_dc.SelectObject(sprite); 143 tiles_dc.SelectObject(sprite);
104 144
105 dc.StretchBlit(mousePos.x - addingEntity->getWidth()/2*scale, mousePos.y - addingEntity->getHeight()/2*scale, addingEntity->getWidth()*scale, addingEntity->getHeight()*scale, &tiles_dc, 0, 0, addingEntity->getWidth(), addingEntity->getHeight()); 145 wxPoint pos {mousePos.x - addingEntity->getWidth()/2*scale, mousePos.y - addingEntity->getHeight()/2*scale};
106 146 wxSize size {addingEntity->getWidth()*scale, addingEntity->getHeight()*scale};
147
148 dc.StretchBlit(pos.x, pos.y, size.GetWidth(), size.GetHeight(), &tiles_dc, 0, 0, addingEntity->getWidth(), addingEntity->getHeight());
149
107 wxPen pen(*wxGREEN, 2); 150 wxPen pen(*wxGREEN, 2);
108 dc.SetPen(pen); 151 dc.SetPen(pen);
109 dc.SetBrush(*wxTRANSPARENT_BRUSH); 152 dc.SetBrush(*wxTRANSPARENT_BRUSH);
110 dc.DrawRectangle(mousePos.x - addingEntity->getWidth()/2*scale, mousePos.y - addingEntity->getHeight()/2*scale, addingEntity->getWidth()*scale, addingEntity->getHeight()*scale); 153 dc.DrawRectangle(pos.x, pos.y, size.GetWidth(), size.GetHeight());
111 } 154 }
112 } 155 }
113} 156}
@@ -132,6 +175,13 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
132{ 175{
133 mouseIsDown = true; 176 mouseIsDown = true;
134 177
178 int vX, vY;
179 GetViewStart(&vX, &vY);
180 int vXX, vYX;
181 GetScrollPixelsPerUnit(&vXX, &vYX);
182 vX *= vXX;
183 vY *= vYX;
184
135 if (editMode == EditTiles) 185 if (editMode == EditTiles)
136 { 186 {
137 SetTile(event.GetPosition()); 187 SetTile(event.GetPosition());
@@ -139,13 +189,6 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
139 { 189 {
140 if (addingEntity != nullptr) 190 if (addingEntity != nullptr)
141 { 191 {
142 int vX, vY;
143 GetViewStart(&vX, &vY);
144 int vXX, vYX;
145 GetScrollPixelsPerUnit(&vXX, &vYX);
146 vX *= vXX;
147 vY *= vYX;
148
149 int x = (event.GetPosition().x + vX) / scale - (addingEntity->getWidth() / 2); 192 int x = (event.GetPosition().x + vX) / scale - (addingEntity->getWidth() / 2);
150 int y = (event.GetPosition().y + vY) / scale - (addingEntity->getHeight() / 2); 193 int y = (event.GetPosition().y + vY) / scale - (addingEntity->getHeight() / 2);
151 194
@@ -156,17 +199,10 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
156 199
157 addingEntity = nullptr; 200 addingEntity = nullptr;
158 201
159 frame->FinishAddingEntity(); 202 frame->SetIsAddingEntity(false);
160 203
161 Refresh(); 204 Refresh();
162 } else { 205 } 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; 206 int x = (event.GetPosition().x + vX) / scale;
171 int y = (event.GetPosition().y + vY) / scale; 207 int y = (event.GetPosition().y + vY) / scale;
172 208
@@ -178,7 +214,7 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
178 addingEntity = selectedEntity->object; 214 addingEntity = selectedEntity->object;
179 map->removeObject(selectedEntity); 215 map->removeObject(selectedEntity);
180 selectedEntity.reset(); 216 selectedEntity.reset();
181 frame->StartAddingEntity(); 217 frame->SetIsAddingEntity(true);
182 } else { 218 } else {
183 selectedEntity.reset(); 219 selectedEntity.reset();
184 } 220 }
@@ -201,6 +237,18 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
201 } 237 }
202 } 238 }
203 239
240 if (isSettingPos)
241 {
242 int x = (event.GetPosition().x + vX) / scale - (PLAYER_WIDTH[currentPlayer] / 2);
243 int y = (event.GetPosition().y + vY) / scale - (PLAYER_HEIGHT[currentPlayer] / 2);
244
245 map->getWorld()->setStart(map, {x, y});
246 isSettingPos = false;
247 frame->SetIsSettingStart(false);
248
249 Refresh();
250 }
251
204 event.Skip(); 252 event.Skip();
205} 253}
206 254
@@ -225,6 +273,8 @@ void MapeditWidget::OnRightClick(wxMouseEvent& event)
225 { 273 {
226 map->removeObject(selectedEntity); 274 map->removeObject(selectedEntity);
227 selectedEntity.reset(); 275 selectedEntity.reset();
276
277 Refresh();
228 } 278 }
229 } 279 }
230 } 280 }
@@ -290,7 +340,11 @@ void MapeditWidget::SetEditMode(EditMode editMode)
290void MapeditWidget::StartAddingEntity(MapObject* object) 340void MapeditWidget::StartAddingEntity(MapObject* object)
291{ 341{
292 addingEntity = object; 342 addingEntity = object;
343
344 // Turn everything else off
293 selectedEntity = nullptr; 345 selectedEntity = nullptr;
346 isSettingPos = false;
347 frame->SetIsSettingStart(false);
294} 348}
295 349
296void MapeditWidget::CancelAddingEntity() 350void MapeditWidget::CancelAddingEntity()
@@ -298,6 +352,20 @@ void MapeditWidget::CancelAddingEntity()
298 addingEntity = nullptr; 352 addingEntity = nullptr;
299} 353}
300 354
355void MapeditWidget::SetIsSettingStart(bool isSetting)
356{
357 if (isSetting)
358 {
359 isSettingPos = true;
360
361 frame->SetIsAddingEntity(false);
362 addingEntity = nullptr;
363 selectedEntity = nullptr;
364 } else {
365 isSettingPos = false;
366 }
367}
368
301void MapeditWidget::SetMap(Map* map) 369void MapeditWidget::SetMap(Map* map)
302{ 370{
303 this->map = map; 371 this->map = map;