summaryrefslogtreecommitdiff
path: root/src/game/game.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2018-03-28 14:17:47 +0200
committerPaweł Redman <pawel.redman@gmail.com>2018-03-28 14:17:47 +0200
commit6966908022e36df9fb4c5e2233603a6fef18e97d (patch)
tree1540097e60001636cbe752d8fb1e459f45081e41 /src/game/game.cpp
parentaa4731d2e1305ea4fb6d59032026bf1ce6f2b65d (diff)
Pie menu; start redoing shooting mechanics.
Diffstat (limited to 'src/game/game.cpp')
-rw-r--r--src/game/game.cpp66
1 files changed, 58 insertions, 8 deletions
diff --git a/src/game/game.cpp b/src/game/game.cpp
index ccd133d..79685cb 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -131,15 +131,48 @@ void state_t::select(rectf_t x)
group_say(text::get(text::SAY_READY_GROUP));
}
-void state_t::command(v2f_t x)
+enum {
+ COMMAND_MOVE,
+ COMMAND_FIRE,
+ COMMAND_STOP
+};
+
+bool state_t::populate_pie_menu(std::vector<interface::pie_item_t> &items)
+{
+ items.clear();
+
+ if (selected_units.size() == 0)
+ return false;
+
+ items.push_back((interface::pie_item_t){"Move", COMMAND_MOVE});
+ items.push_back((interface::pie_item_t){"Fire", COMMAND_FIRE});
+ items.push_back((interface::pie_item_t){"Stop", COMMAND_STOP});
+ return true;
+}
+
+void state_t::command(v2f_t x, int number)
{
v2f_t snap;
+ bool group;
+
+ if (!selected_units.size())
+ return;
snap[0] = std::round(x[0] - 0.5f) + 0.5f;
snap[1] = std::round(x[1] - 0.5f) + 0.5f;
- if (selected_units.size() > 1)
+ group = selected_units.size() > 1;
+ if (group) switch (number) {
+ case COMMAND_MOVE:
group_say(text::get(text::SAY_MOVING_GROUP));
+ break;
+ case COMMAND_STOP:
+ group_say(text::get(text::SAY_STOPPING_GROUP));
+ break;
+ case COMMAND_FIRE:
+ group_say(text::get(text::SAY_FIRING_GROUP));
+ break;
+ }
for (unit_t *unit : selected_units) {
unit_soldier_t *soldier;
@@ -155,13 +188,30 @@ void state_t::command(v2f_t x)
if (!soldier->controllable)
continue;
- if (!soldier->start_moving(snap))
- soldier->say(text::get(text::SAY_NO_PATH));
- else {
- soldier->move_marker = std::make_unique<fx_move_marker_t>(this, soldier->move.path.back());
+ switch (number) {
+ case COMMAND_MOVE:
+ if (!soldier->start_moving(snap))
+ soldier->say(text::get(text::SAY_NO_PATH));
+ else {
+ soldier->move_marker = std::make_unique<fx_move_marker_t>(this, soldier->move.path.back());
+ if (!group)
+ soldier->say(text::get(text::SAY_MOVING));
+ }
+ break;
- if (selected_units.size() == 1)
- soldier->say(text::get(text::SAY_MOVING));
+ case COMMAND_STOP:
+ soldier->stop_moving();
+ soldier->manual_firing = false;
+ if (!group)
+ soldier->say(text::get(text::SAY_STOPPING));
+ break;
+
+ case COMMAND_FIRE:
+ soldier->manual_firing = true;
+ soldier->manual_firing_target = x;
+ if (!group)
+ soldier->say(text::get(text::SAY_FIRING));
+ break;
}
}
}