summaryrefslogtreecommitdiff
path: root/src/game/Tool.cpp
diff options
context:
space:
mode:
authorSimon 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)
commit9b1fb64e1640eb36c485102b499653ce48830e1b (patch)
treeb5a1f86249b080194623a0de12ec70dcb6119a86 /src/game/Tool.cpp
parent45fecfe72ca6fcb7cc07524fca7ab731fe5c94c1 (diff)
downloadpowder-9b1fb64e1640eb36c485102b499653ce48830e1b.zip
powder-9b1fb64e1640eb36c485102b499653ce48830e1b.tar.gz
WIND tool
Diffstat (limited to 'src/game/Tool.cpp')
-rw-r--r--src/game/Tool.cpp48
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);