diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-25 12:37:04 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-25 12:37:04 (GMT) |
| commit | 9b1fb64e1640eb36c485102b499653ce48830e1b (patch) | |
| tree | b5a1f86249b080194623a0de12ec70dcb6119a86 /src/game/Tool.cpp | |
| parent | 45fecfe72ca6fcb7cc07524fca7ab731fe5c94c1 (diff) | |
| download | powder-9b1fb64e1640eb36c485102b499653ce48830e1b.zip powder-9b1fb64e1640eb36c485102b499653ce48830e1b.tar.gz | |
WIND tool
Diffstat (limited to 'src/game/Tool.cpp')
| -rw-r--r-- | src/game/Tool.cpp | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/src/game/Tool.cpp b/src/game/Tool.cpp index 977896b..3525876 100644 --- a/src/game/Tool.cpp +++ b/src/game/Tool.cpp @@ -37,7 +37,7 @@ void Tool::Click(Simulation * sim, Brush * brush, ui::Point position) { } void Tool::Draw(Simulation * sim, Brush * brush, ui::Point position) { sim->ToolBrush(position.X, position.Y, toolID, brush); } -void Tool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { +void Tool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) { sim->ToolLine(position1.X, position1.Y, position2.X, position2.Y, toolID, brush); } void Tool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { @@ -53,7 +53,7 @@ ElementTool::~ElementTool() {} void ElementTool::Draw(Simulation * sim, Brush * brush, ui::Point position){ sim->CreateParts(position.X, position.Y, toolID, brush); } -void ElementTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { +void ElementTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) { sim->CreateLine(position1.X, position1.Y, position2.X, position2.Y, toolID, brush); } void ElementTool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { @@ -72,7 +72,7 @@ WallTool::~WallTool() {} void WallTool::Draw(Simulation * sim, Brush * brush, ui::Point position){ sim->CreateWalls(position.X, position.Y, 1, 1, toolID, 0, brush); } -void WallTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { +void WallTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) { sim->CreateWallLine(position1.X, position1.Y, position2.X, position2.Y, 1, 1, toolID, 0, brush); } void WallTool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { @@ -91,7 +91,7 @@ GolTool::~GolTool() {} void GolTool::Draw(Simulation * sim, Brush * brush, ui::Point position){ sim->CreateParts(position.X, position.Y, PT_LIFE|(toolID<<8), brush); } -void GolTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { +void GolTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) { sim->CreateLine(position1.X, position1.Y, position2.X, position2.Y, PT_LIFE|(toolID<<8), brush); } void GolTool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) { @@ -101,6 +101,46 @@ void GolTool::DrawFill(Simulation * sim, Brush * brush, ui::Point position) { sim->FloodParts(position.X, position.Y, PT_LIFE|(toolID<<8), -1, -1, 0); } +WindTool::WindTool(int id, string name, string description, int r, int g, int b, VideoBuffer * (*textureGen)(int, int, int)): + Tool(id, name, description, r, g, b, textureGen) +{ +} +WindTool::~WindTool() {} +void WindTool::Draw(Simulation * sim, Brush * brush, ui::Point position) +{ + +} +void WindTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) +{ + int radiusX, radiusY, sizeX, sizeY; + + float strength = dragging?0.01f:0.002f; + + radiusX = brush->GetRadius().X; + radiusY = brush->GetRadius().Y; + + sizeX = brush->GetSize().X; + sizeY = brush->GetSize().Y; + + unsigned char *bitmap = brush->GetBitmap(); + + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + if(bitmap[(y*sizeX)+x] && (position1.X+(x-radiusX) >= 0 && position1.Y+(y-radiusY) >= 0 && position1.X+(x-radiusX) < XRES && position1.Y+(y-radiusY) < YRES)) + { + sim->vx[(position1.Y+(y-radiusY))/CELL][(position1.X+(x-radiusX))/CELL] += (position2.X-position1.X)*strength; + sim->vy[(position1.Y+(y-radiusY))/CELL][(position1.X+(x-radiusX))/CELL] += (position2.Y-position1.Y)*strength; + } + } + } +} +void WindTool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {} + +void WindTool::DrawFill(Simulation * sim, Brush * brush, ui::Point position) {} + + void Element_LIGH_Tool::Draw(Simulation * sim, Brush * brush, ui::Point position) { int p = sim->create_part(-2, position.X, position.Y, toolID); |
