diff options
| author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2015-03-15 11:19:20 -0400 |
|---|---|---|
| committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2015-03-15 11:19:20 -0400 |
| commit | 3e989517ec46c40a82671620577c40765c94a41f (patch) | |
| tree | b7732fafbae6cca98290f91d869504d41c536539 /tools/mapedit/src/widget.cpp | |
| parent | b563953a4846bab720cae17ef4ab5a8296730c7c (diff) | |
| download | therapy-3e989517ec46c40a82671620577c40765c94a41f.tar.gz therapy-3e989517ec46c40a82671620577c40765c94a41f.tar.bz2 therapy-3e989517ec46c40a82671620577c40765c94a41f.zip | |
Added basic ability to set tiles in map editor
Diffstat (limited to 'tools/mapedit/src/widget.cpp')
| -rw-r--r-- | tools/mapedit/src/widget.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
| diff --git a/tools/mapedit/src/widget.cpp b/tools/mapedit/src/widget.cpp new file mode 100644 index 0000000..030e556 --- /dev/null +++ b/tools/mapedit/src/widget.cpp | |||
| @@ -0,0 +1,91 @@ | |||
| 1 | #include "widget.h" | ||
| 2 | |||
| 3 | IMPLEMENT_DYNAMIC_CLASS(MapeditWidget,wxControl) | ||
| 4 | |||
| 5 | BEGIN_EVENT_TABLE(MapeditWidget, wxControl) | ||
| 6 | EVT_PAINT(MapeditWidget::OnPaint) | ||
| 7 | EVT_LEFT_DOWN(MapeditWidget::OnClick) | ||
| 8 | EVT_LEFT_UP(MapeditWidget::OnMouseUp) | ||
| 9 | EVT_MOTION(MapeditWidget::OnMouseMove) | ||
| 10 | END_EVENT_TABLE() | ||
| 11 | |||
| 12 | MapeditWidget::MapeditWidget() | ||
| 13 | { | ||
| 14 | Init(); | ||
| 15 | } | ||
| 16 | |||
| 17 | MapeditWidget::MapeditWidget(wxWindow* parent, wxWindowID winid, Map* map, TileWidget* tileWidget, const wxPoint& pos, const wxSize& size) | ||
| 18 | : wxControl(parent, winid, pos, size), map(map), tileWidget(tileWidget) | ||
| 19 | { | ||
| 20 | Init(); | ||
| 21 | } | ||
| 22 | |||
| 23 | void MapeditWidget::Init() | ||
| 24 | { | ||
| 25 | tiles = wxBitmap(wxImage("../../../res/tiles.png")); | ||
| 26 | } | ||
| 27 | |||
| 28 | wxSize MapeditWidget::DoGetBestSize() const | ||
| 29 | { | ||
| 30 | return {GAME_WIDTH*2, GAME_HEIGHT*2}; | ||
| 31 | } | ||
| 32 | |||
| 33 | void MapeditWidget::OnPaint(wxPaintEvent& event) | ||
| 34 | { | ||
| 35 | wxPaintDC dc(this); | ||
| 36 | wxMemoryDC tiles_dc; | ||
| 37 | tiles_dc.SelectObject(tiles); | ||
| 38 | wxRegionIterator upd(GetUpdateRegion()); | ||
| 39 | int vW = upd.GetW(); | ||
| 40 | int vH = upd.GetH(); | ||
| 41 | |||
| 42 | double endWidth = TILE_WIDTH * ((double) vW / (double) GAME_WIDTH); | ||
| 43 | double endHeight = TILE_HEIGHT * ((double) vH / (double) GAME_HEIGHT); | ||
| 44 | |||
| 45 | for (int y=0; y<MAP_HEIGHT; y++) | ||
| 46 | { | ||
| 47 | for (int x=0; x<MAP_WIDTH; x++) | ||
| 48 | { | ||
| 49 | int tile = map->mapdata[x+y*MAP_WIDTH]; | ||
| 50 | dc.StretchBlit(x*endWidth, y*endHeight, endWidth, endHeight, &tiles_dc, tile%8*TILE_WIDTH, tile/8*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT); | ||
| 51 | } | ||
| 52 | } | ||
| 53 | } | ||
| 54 | |||
| 55 | void MapeditWidget::SetTile(wxPoint pos) | ||
| 56 | { | ||
| 57 | wxRegionIterator upd(GetUpdateRegion()); | ||
| 58 | int vW = upd.GetW(); | ||
| 59 | int vH = upd.GetH(); | ||
| 60 | |||
| 61 | double endWidth = TILE_WIDTH * ((double) vW / (double) GAME_WIDTH); | ||
| 62 | double endHeight = TILE_HEIGHT * ((double) vH / (double) GAME_HEIGHT); | ||
| 63 | |||
| 64 | int x = pos.x / endWidth; | ||
| 65 | int y = pos.y / endHeight; | ||
| 66 | |||
| 67 | map->mapdata[x+y*MAP_WIDTH] = tileWidget->getSelected(); | ||
| 68 | Refresh(); | ||
| 69 | } | ||
| 70 | |||
| 71 | void MapeditWidget::OnClick(wxMouseEvent& event) | ||
| 72 | { | ||
| 73 | mouseIsDown = true; | ||
| 74 | |||
| 75 | SetTile(event.GetPosition()); | ||
| 76 | |||
| 77 | event.Skip(); | ||
| 78 | } | ||
| 79 | |||
| 80 | void MapeditWidget::OnMouseMove(wxMouseEvent& event) | ||
| 81 | { | ||
| 82 | if (mouseIsDown) | ||
| 83 | { | ||
| 84 | SetTile(event.GetPosition()); | ||
| 85 | } | ||
| 86 | } | ||
| 87 | |||
| 88 | void MapeditWidget::OnMouseUp(wxMouseEvent& event) | ||
| 89 | { | ||
| 90 | mouseIsDown = false; | ||
| 91 | } | ||
