summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-03 18:25:28 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-03 18:25:28 (GMT)
commitf586a5585f3838e78cf6880b84d4c369040b5f67 (patch)
treea3188318952df1ffc8a048647dadfa17b7bbb55e /src
parent0e5c3da0f5d932c9b1652b6c55476f467b15a2ce (diff)
downloadpowder-f586a5585f3838e78cf6880b84d4c369040b5f67.zip
powder-f586a5585f3838e78cf6880b84d4c369040b5f67.tar.gz
Add shortcuts for things like gravity, air and air reset, issues #85 and #57
Diffstat (limited to 'src')
-rw-r--r--src/game/GameController.cpp70
-rw-r--r--src/game/GameController.h6
-rw-r--r--src/game/GameView.cpp15
3 files changed, 91 insertions, 0 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index c992120..7e5d930 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -406,6 +406,76 @@ void GameController::Exit()
HasDone = true;
}
+void GameController::ResetAir()
+{
+ gameModel->GetSimulation()->air->Clear();
+}
+
+void GameController::ResetSpark()
+{
+ Simulation * sim = gameModel->GetSimulation();
+ for (int i = 0; i < NPART; i++)
+ if (sim->parts[i].type == PT_SPRK)
+ {
+ if (sim->parts[i].ctype >= 0 && sim->parts[i].ctype < PT_NUM && sim->elements[sim->parts[i].ctype].Enabled)
+ {
+ sim->parts[i].type = sim->parts[i].ctype;
+ sim->parts[i].life = 0;
+ }
+ else
+ sim->kill_part(i);
+ }
+}
+
+void GameController::SwitchGravity()
+{
+ gameModel->GetSimulation()->gravityMode = (gameModel->GetSimulation()->gravityMode+1)%3;
+
+ switch (gameModel->GetSimulation()->gravityMode)
+ {
+ case 0:
+ gameModel->SetInfoTip("Gravity: Vertical");
+ break;
+ case 1:
+ gameModel->SetInfoTip("Gravity: Off");
+ break;
+ case 2:
+ gameModel->SetInfoTip("Gravity: Radial");
+ break;
+ }
+}
+
+void GameController::SwitchAir()
+{
+ gameModel->GetSimulation()->air->airMode = (gameModel->GetSimulation()->air->airMode+1)%5;
+
+ switch (gameModel->GetSimulation()->air->airMode)
+ {
+ case 0:
+ gameModel->SetInfoTip("Air: On");
+ break;
+ case 1:
+ gameModel->SetInfoTip("Air: Pressure Off");
+ break;
+ case 2:
+ gameModel->SetInfoTip("Air: Velocity Off");
+ break;
+ case 3:
+ gameModel->SetInfoTip("Air: Off");
+ break;
+ case 4:
+ gameModel->SetInfoTip("Air: No Update");
+ break;
+ }
+}
+
+void GameController::ToggleAHeat()
+{
+ gameModel->GetSimulation()->aheat_enable = !gameModel->GetSimulation()->aheat_enable;
+ gameModel->UpdateQuickOptions();
+}
+
+
void GameController::LoadRenderPreset(RenderPreset preset)
{
Renderer * renderer = gameModel->GetRenderer();
diff --git a/src/game/GameController.h b/src/game/GameController.h
index 08e8a3b..baa25ce 100644
--- a/src/game/GameController.h
+++ b/src/game/GameController.h
@@ -109,6 +109,12 @@ public:
ui::Point NormaliseBlockCoord(ui::Point point);
std::string ElementResolve(int type);
+ void ResetAir();
+ void ResetSpark();
+ void SwitchGravity();
+ void SwitchAir();
+ void ToggleAHeat();
+
void LoadClipboard();
void LoadStamp();
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index 85f4330..4bbb811 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -1017,6 +1017,21 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
selectMode = SelectStamp;
selectPoint1 = ui::Point(-1, -1);
break;
+ case 'w':
+ c->SwitchGravity();
+ break;
+ case 'y':
+ c->SwitchAir();
+ break;
+ case 'u':
+ c->ToggleAHeat();
+ break;
+ case '=':
+ if(ctrl)
+ c->ResetSpark();
+ else
+ c->ResetAir();
+ break;
case 'c':
if(ctrl)
{