diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-08-10 17:59:05 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-08-10 17:59:05 (GMT) |
| commit | 3499cb3035e64ed91adfbabdfa9b979e9f8e0885 (patch) | |
| tree | 1036f4f2fab5301981457a07a8a39df5021fe727 /src/game/GameView.cpp | |
| parent | cd051924d9ca6d5c39e02111bc311fda9126435e (diff) | |
| download | powder-3499cb3035e64ed91adfbabdfa9b979e9f8e0885.zip powder-3499cb3035e64ed91adfbabdfa9b979e9f8e0885.tar.gz | |
Wall brush, fixes #63
Diffstat (limited to 'src/game/GameView.cpp')
| -rw-r--r-- | src/game/GameView.cpp | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp index 85d0e8d..073d8da 100644 --- a/src/game/GameView.cpp +++ b/src/game/GameView.cpp @@ -174,7 +174,8 @@ GameView::GameView(): showHud(true), showDebug(false), introText(2048), - introTextMessage(introTextData) + introTextMessage(introTextData), + wallBrush(false) { int currentX = 1; @@ -642,6 +643,18 @@ void GameView::NotifyActiveToolsChanged(GameModel * sender) } } +void GameView::NotifyLastToolChanged(GameModel * sender) +{ + if(sender->GetLastTool()->GetResolution() == CELL) + { + wallBrush = true; + } + else + { + wallBrush = false; + } +} + void GameView::NotifyToolListChanged(GameModel * sender) { //int currentY = YRES+MENUSIZE-36; @@ -1637,22 +1650,29 @@ void GameView::OnDraw() if(selectMode == SelectNone && activeBrush && currentMouse.X > 0 && currentMouse.X < XRES && currentMouse.Y > 0 && currentMouse.Y < YRES) { ui::Point finalCurrentMouse = c->PointTranslate(currentMouse); + ui::Point initialDrawPoint = drawPoint1; + + if(wallBrush) + { + finalCurrentMouse = c->NormaliseBlockCoord(finalCurrentMouse); + initialDrawPoint = c->NormaliseBlockCoord(initialDrawPoint); + } if(drawMode==DrawRect && isMouseDown) { if(drawSnap) { - finalCurrentMouse = rectSnapCoords(c->PointTranslate(drawPoint1), finalCurrentMouse); + finalCurrentMouse = rectSnapCoords(c->PointTranslate(initialDrawPoint), finalCurrentMouse); } - activeBrush->RenderRect(ren, c->PointTranslate(drawPoint1), finalCurrentMouse); + activeBrush->RenderRect(ren, c->PointTranslate(initialDrawPoint), finalCurrentMouse); } else if(drawMode==DrawLine && isMouseDown) { if(drawSnap) { - finalCurrentMouse = lineSnapCoords(c->PointTranslate(drawPoint1), finalCurrentMouse); + finalCurrentMouse = lineSnapCoords(c->PointTranslate(initialDrawPoint), finalCurrentMouse); } - activeBrush->RenderLine(ren, c->PointTranslate(drawPoint1), finalCurrentMouse); + activeBrush->RenderLine(ren, c->PointTranslate(initialDrawPoint), finalCurrentMouse); } else if(drawMode==DrawFill) { @@ -1660,7 +1680,19 @@ void GameView::OnDraw() } else { - activeBrush->RenderPoint(ren, finalCurrentMouse); + if(wallBrush) + { + ui::Point finalBrushRadius = c->NormaliseBlockCoord(activeBrush->GetRadius()); + ren->xor_line(finalCurrentMouse.X-finalBrushRadius.X, finalCurrentMouse.Y-finalBrushRadius.Y, finalCurrentMouse.X+finalBrushRadius.X+CELL-1, finalCurrentMouse.Y-finalBrushRadius.Y); + ren->xor_line(finalCurrentMouse.X-finalBrushRadius.X, finalCurrentMouse.Y+finalBrushRadius.Y+CELL-1, finalCurrentMouse.X+finalBrushRadius.X+CELL-1, finalCurrentMouse.Y+finalBrushRadius.Y+CELL-1); + + ren->xor_line(finalCurrentMouse.X-finalBrushRadius.X, finalCurrentMouse.Y-finalBrushRadius.Y+1, finalCurrentMouse.X-finalBrushRadius.X, finalCurrentMouse.Y+finalBrushRadius.Y+CELL-2); + ren->xor_line(finalCurrentMouse.X+finalBrushRadius.X+CELL-1, finalCurrentMouse.Y-finalBrushRadius.Y+1, finalCurrentMouse.X+finalBrushRadius.X+CELL-1, finalCurrentMouse.Y+finalBrushRadius.Y+CELL-2); + } + else + { + activeBrush->RenderPoint(ren, finalCurrentMouse); + } } } ren->RenderEnd(); |
