summaryrefslogtreecommitdiff
path: root/src/game/GameView.cpp
diff options
context:
space:
mode:
authorSimon 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)
commit3499cb3035e64ed91adfbabdfa9b979e9f8e0885 (patch)
tree1036f4f2fab5301981457a07a8a39df5021fe727 /src/game/GameView.cpp
parentcd051924d9ca6d5c39e02111bc311fda9126435e (diff)
downloadpowder-3499cb3035e64ed91adfbabdfa9b979e9f8e0885.zip
powder-3499cb3035e64ed91adfbabdfa9b979e9f8e0885.tar.gz
Wall brush, fixes #63
Diffstat (limited to 'src/game/GameView.cpp')
-rw-r--r--src/game/GameView.cpp44
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();