Don't handle arrow keys specially in some modes. Fix #588
This commit is contained in:
@@ -50,6 +50,18 @@ static const std::set<eGameMode> scrollableModes = {
|
||||
MODE_LOOK_TOWN
|
||||
};
|
||||
|
||||
// Arrow keys are handled with a special system that delays the handling
|
||||
// of their keystrokes to process them as 8-directional inputs.
|
||||
// In some modes where directional input is irrelevent, they should be
|
||||
// processed normally, which usually means being ignored,
|
||||
// to avoid buggy behavior.
|
||||
static const std::set<eGameMode> noDelayKeyModes = {
|
||||
MODE_TALKING,
|
||||
MODE_SHOPPING,
|
||||
MODE_STARTUP,
|
||||
MODE_RESTING
|
||||
};
|
||||
|
||||
enum eStatMode {
|
||||
MODE_INVEN = 0,
|
||||
MODE_SHOP = 1,
|
||||
|
@@ -1210,7 +1210,7 @@ void handle_one_event(const sf::Event& event, cFramerateLimiter& fps_limiter) {
|
||||
switch(event.type) {
|
||||
case sf::Event::KeyPressed:
|
||||
if(flushingInput) return;
|
||||
if (delayed_keys.find(event.key.code) != delayed_keys.end()){
|
||||
if (!noDelayKeyModes.count(overall_mode) && delayed_keys.find(event.key.code) != delayed_keys.end()){
|
||||
handle_delayed_key(event.key.code);
|
||||
} else if(!(event.key.*systemKey)) {
|
||||
mainPtr.setKeyRepeatEnabled(true);
|
||||
|
Reference in New Issue
Block a user