From 78054d7ad57a19c9682627fc8cda4dc175e2b460 Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 7 Dec 2010 21:08:35 +0000 Subject: [PATCH] (svn r21427) -Add: helper function to determine whether a command may be executed --- src/command.cpp | 25 +++++++++++++++++++++++++ src/command_func.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/src/command.cpp b/src/command.cpp index 70717d777f..be30d11e6b 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 3ed4d1e605..212e71ddf2 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