Don't handle arrow keys specially in some modes. Fix #588

This commit is contained in:
2025-02-17 12:09:21 -06:00
committed by Celtic Minstrel
parent a669fe0223
commit ec06ca4be3
2 changed files with 13 additions and 1 deletions

View File

@@ -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,

View File

@@ -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);