diff options
-rw-r--r-- | src/command.cpp | 25 | ||||
-rw-r--r-- | src/command_func.h | 2 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/command.cpp b/src/command.cpp index 70717d777..be30d11e6 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -349,6 +349,31 @@ const char *GetCommandName(uint32 cmd) return _command_proc_table[cmd & CMD_ID_MASK].name; } +/** + * Returns whether the command is allowed while the game is paused. + * @param cmd The command to check. + * @return True if the command is allowed while paused, false otherwise. + */ +bool IsCommandAllowedWhilePaused(uint32 cmd) +{ + /* Lookup table for the command types that are allowed for a given pause level setting. */ + static const int command_type_lookup[] = { + CMDPL_ALL_ACTIONS, ///< CMDT_LANDSCAPE_CONSTRUCTION + CMDPL_NO_LANDSCAPING, ///< CMDT_VEHICLE_CONSTRUCTION + CMDPL_NO_LANDSCAPING, ///< CMDT_MONEY_MANAGEMENT + CMDPL_NO_CONSTRUCTION, ///< CMDT_VEHICLE_MANAGEMENT + CMDPL_NO_CONSTRUCTION, ///< CMDT_ROUTE_MANAGEMENT + CMDPL_NO_CONSTRUCTION, ///< CMDT_OTHER_MANAGEMENT + CMDPL_NO_CONSTRUCTION, ///< CMDT_COMPANY_SETTING + CMDPL_NO_ACTIONS, ///< CMDT_SERVER_SETTING + }; + assert_compile(lengthof(command_type_lookup) == CMDT_END); + + assert(IsValidCommand(cmd)); + return command_type_lookup[_command_proc_table[cmd & CMD_ID_MASK].type] <= _settings_game.construction.command_pause_level; +} + + static int _docommand_recursive = 0; /** diff --git a/src/command_func.h b/src/command_func.h index 3ed4d1e60..212e71ddf 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -75,6 +75,8 @@ const char *GetCommandName(uint32 cmd); */ Money GetAvailableMoneyForCommand(); +bool IsCommandAllowedWhilePaused(uint32 cmd); + /** * Extracts the DC flags needed for DoCommand from the flags returned by GetCommandFlags * @param cmd_flags Flags from GetCommandFlags |