summary refs log tree commit diff stats
path: root/tools/mapedit/src/widget.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2015-03-15 23:24:22 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2015-03-15 23:24:22 -0400
commit213cab3c04b81428ab715f340bd7c12438fdb980 (patch)
tree295d25eac4b94357ac5b9bb4b3fd03130181b956 /tools/mapedit/src/widget.cpp
parent25240241e91dc913d20fbb93aa4acc9433dda6a0 (diff)
downloadtherapy-213cab3c04b81428ab715f340bd7c12438fdb980.tar.gz
therapy-213cab3c04b81428ab715f340bd7c12438fdb980.tar.bz2
therapy-213cab3c04b81428ab715f340bd7c12438fdb980.zip
Map editor can now add entities to maps
Also fixed a big bug regarding scrolling
Diffstat (limited to 'tools/mapedit/src/widget.cpp')
-rw-r--r--tools/mapedit/src/widget.cpp123
1 files changed, 101 insertions, 22 deletions
diff --git a/tools/mapedit/src/widget.cpp b/tools/mapedit/src/widget.cpp index d7f1a51..ba3b6a5 100644 --- a/tools/mapedit/src/widget.cpp +++ b/tools/mapedit/src/widget.cpp
@@ -1,4 +1,5 @@
1#include "widget.h" 1#include "widget.h"
2#include "frame.h"
2 3
3IMPLEMENT_DYNAMIC_CLASS(MapeditWidget,wxScrolledWindow) 4IMPLEMENT_DYNAMIC_CLASS(MapeditWidget,wxScrolledWindow)
4 5
@@ -36,13 +37,17 @@ wxSize MapeditWidget::DoGetBestSize() const
36 return {GAME_WIDTH*2, GAME_HEIGHT*2}; 37 return {GAME_WIDTH*2, GAME_HEIGHT*2};
37} 38}
38 39
39void MapeditWidget::OnPaint(wxPaintEvent& event) 40void MapeditWidget::OnPaint(wxPaintEvent&)
40{ 41{
41 wxPaintDC dc(this); 42 wxPaintDC dc(this);
42 wxMemoryDC tiles_dc; 43 wxMemoryDC tiles_dc;
43 tiles_dc.SelectObject(tiles); 44 tiles_dc.SelectObject(tiles);
44 int vX, vY; 45 int vX, vY;
45 GetViewStart(&vX, &vY); 46 GetViewStart(&vX, &vY);
47 int vXX, vYX;
48 GetScrollPixelsPerUnit(&vXX, &vYX);
49 vX *= vXX;
50 vY *= vYX;
46 51
47 for (int y=0; y<MAP_HEIGHT; y++) 52 for (int y=0; y<MAP_HEIGHT; y++)
48 { 53 {
@@ -63,20 +68,38 @@ void MapeditWidget::OnPaint(wxPaintEvent& event)
63 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()); 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());
64 } 69 }
65 70
66 if (mouseIsIn) 71 if (editMode == EditTiles)
67 { 72 {
68 int tile = tileWidget->getSelected(); 73 if (mouseIsIn)
69 int x = (mousePos.x + vX) / (TILE_WIDTH * scale); 74 {
70 int y = (mousePos.y + vY) / (TILE_HEIGHT * scale); 75 int tile = tileWidget->getSelected();
76 int x = (mousePos.x + vX) / (TILE_WIDTH * scale);
77 int y = (mousePos.y + vY) / (TILE_HEIGHT * scale);
71 78
72 tiles_dc.SelectObject(wxNullBitmap); 79 tiles_dc.SelectObject(wxNullBitmap);
73 tiles_dc.SelectObject(tiles); 80 tiles_dc.SelectObject(tiles);
74 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); 81 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);
75 82
76 wxPen pen(*wxGREEN, 2); 83 wxPen pen(*wxGREEN, 2);
77 dc.SetPen(pen); 84 dc.SetPen(pen);
78 dc.SetBrush(*wxTRANSPARENT_BRUSH); 85 dc.SetBrush(*wxTRANSPARENT_BRUSH);
79 dc.DrawRectangle(x*TILE_WIDTH*scale-vX, y*TILE_HEIGHT*scale-vY, TILE_WIDTH*scale, TILE_HEIGHT*scale); 86 dc.DrawRectangle(x*TILE_WIDTH*scale-vX, y*TILE_HEIGHT*scale-vY, TILE_WIDTH*scale, TILE_HEIGHT*scale);
87 }
88 } else if (editMode == EditEntities)
89 {
90 if ((addingEntity != nullptr) && (mouseIsIn))
91 {
92 wxBitmap sprite = addingEntity->getSprite();
93 tiles_dc.SelectObject(wxNullBitmap);
94 tiles_dc.SelectObject(sprite);
95
96 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());
97
98 wxPen pen(*wxGREEN, 2);
99 dc.SetPen(pen);
100 dc.SetBrush(*wxTRANSPARENT_BRUSH);
101 dc.DrawRectangle(mousePos.x - addingEntity->getWidth()/2*scale, mousePos.y - addingEntity->getHeight()/2*scale, addingEntity->getWidth()*scale, addingEntity->getHeight()*scale);
102 }
80 } 103 }
81} 104}
82 105
@@ -84,6 +107,10 @@ void MapeditWidget::SetTile(wxPoint pos)
84{ 107{
85 int vX, vY; 108 int vX, vY;
86 GetViewStart(&vX, &vY); 109 GetViewStart(&vX, &vY);
110 int vXX, vYX;
111 GetScrollPixelsPerUnit(&vXX, &vYX);
112 vX *= vXX;
113 vY *= vYX;
87 114
88 int x = (pos.x + vX) / (TILE_WIDTH * scale); 115 int x = (pos.x + vX) / (TILE_WIDTH * scale);
89 int y = (pos.y + vY) / (TILE_HEIGHT * scale); 116 int y = (pos.y + vY) / (TILE_HEIGHT * scale);
@@ -96,32 +123,64 @@ void MapeditWidget::OnClick(wxMouseEvent& event)
96{ 123{
97 mouseIsDown = true; 124 mouseIsDown = true;
98 125
99 SetTile(event.GetPosition()); 126 if (editMode == EditTiles)
127 {
128 SetTile(event.GetPosition());
129 } else if (editMode == EditEntities)
130 {
131 if (addingEntity != nullptr)
132 {
133 int vX, vY;
134 GetViewStart(&vX, &vY);
135 int vXX, vYX;
136 GetScrollPixelsPerUnit(&vXX, &vYX);
137 vX *= vXX;
138 vY *= vYX;
139
140 int x = (event.GetPosition().x + vX) / scale - (addingEntity->getWidth() / 2);
141 int y = (event.GetPosition().y + vY) / scale - (addingEntity->getHeight() / 2);
142 printf("%d,%d\n",x,y);
143 MapObjectEntry data;
144 data.object = addingEntity;
145 data.position = std::make_pair(x,y);
146 map->getObjects().push_back(data);
147
148 addingEntity = nullptr;
149
150 frame->FinishAddingEntity();
151
152 Refresh();
153 }
154 }
100 155
101 event.Skip(); 156 event.Skip();
102} 157}
103 158
104void MapeditWidget::OnMouseMove(wxMouseEvent& event) 159void MapeditWidget::OnMouseMove(wxMouseEvent& event)
105{ 160{
106 if (mouseIsDown) 161 mousePos = event.GetPosition();
162 mouseIsIn = true;
163
164 if (editMode == EditTiles)
107 { 165 {
108 SetTile(event.GetPosition()); 166 if (mouseIsDown)
167 {
168 SetTile(event.GetPosition());
169 }
109 } 170 }
110 171
111 mouseIsIn = true;
112 mousePos = event.GetPosition();
113 Refresh(); 172 Refresh();
114} 173}
115 174
116void MapeditWidget::OnMouseUp(wxMouseEvent& event) 175void MapeditWidget::OnMouseUp(wxMouseEvent&)
117{ 176{
118 mouseIsDown = false; 177 mouseIsDown = false;
119} 178}
120 179
121void MapeditWidget::OnMouseOut(wxMouseEvent& event) 180void MapeditWidget::OnMouseOut(wxMouseEvent&)
122{ 181{
123 mouseIsIn = false; 182 mouseIsIn = false;
124 183
125 Refresh(); 184 Refresh();
126} 185}
127 186
@@ -132,7 +191,10 @@ void MapeditWidget::ZoomIn()
132 191
133void MapeditWidget::ZoomOut() 192void MapeditWidget::ZoomOut()
134{ 193{
135 SetZoomSize(scale-1); 194 if (scale > 1)
195 {
196 SetZoomSize(scale-1);
197 }
136} 198}
137 199
138void MapeditWidget::SetZoomSize(int zoom) 200void MapeditWidget::SetZoomSize(int zoom)
@@ -141,5 +203,22 @@ void MapeditWidget::SetZoomSize(int zoom)
141 203
142 SetVirtualSize(MAP_WIDTH*TILE_WIDTH*scale, MAP_HEIGHT*TILE_HEIGHT*scale); 204 SetVirtualSize(MAP_WIDTH*TILE_WIDTH*scale, MAP_HEIGHT*TILE_HEIGHT*scale);
143 205
144 GetParent()->Refresh(); 206 Refresh();
207}
208
209void MapeditWidget::SetEditMode(EditMode editMode)
210{
211 this->editMode = editMode;
212
213 Refresh();
214}
215
216void MapeditWidget::StartAddingEntity(MapObject* object)
217{
218 addingEntity = object;
219}
220
221void MapeditWidget::CancelAddingEntity()
222{
223 addingEntity = nullptr;
145} 224}