diff options
author | Paweł Redman <pawel.redman@gmail.com> | 2018-03-28 14:17:47 +0200 |
---|---|---|
committer | Paweł Redman <pawel.redman@gmail.com> | 2018-03-28 14:17:47 +0200 |
commit | 6966908022e36df9fb4c5e2233603a6fef18e97d (patch) | |
tree | 1540097e60001636cbe752d8fb1e459f45081e41 /src/game/game.cpp | |
parent | aa4731d2e1305ea4fb6d59032026bf1ce6f2b65d (diff) |
Pie menu; start redoing shooting mechanics.
Diffstat (limited to 'src/game/game.cpp')
-rw-r--r-- | src/game/game.cpp | 66 |
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; } } } |