diff options
author | Michael Lutz <michi@icosahedron.de> | 2021-10-05 22:02:27 +0200 |
---|---|---|
committer | Michael Lutz <michi@icosahedron.de> | 2021-12-16 22:28:32 +0100 |
commit | 33ca4f2b9950d98fed902962c847833667ccca9f (patch) | |
tree | 503825bff107d7a296c4bf7a0c6e64bd957e0454 | |
parent | 5ddfdc8516e35c4f5de2613692d104486151171b (diff) | |
download | openttd-33ca4f2b9950d98fed902962c847833667ccca9f.tar.xz |
Codechange: Let the compile generate the master command table out of templated command traits.
This is using a non-intrusive type-traits like templated system, which
allows compile-time validation that the command table and the command
enum match up.
73 files changed, 961 insertions, 359 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 631eaf6de..6950e3275 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -38,6 +38,7 @@ endif() add_files( aircraft.h aircraft_cmd.cpp + aircraft_cmd.h aircraft_gui.cpp airport.cpp airport.h @@ -49,6 +50,7 @@ add_files( autoreplace.cpp autoreplace_base.h autoreplace_cmd.cpp + autoreplace_cmd.h autoreplace_func.h autoreplace_gui.cpp autoreplace_gui.h @@ -90,6 +92,7 @@ add_files( command_type.h company_base.h company_cmd.cpp + company_cmd.h company_func.h company_gui.cpp company_gui.h @@ -119,6 +122,7 @@ add_files( depot.cpp depot_base.h depot_cmd.cpp + depot_cmd.h depot_func.h depot_gui.cpp depot_map.h @@ -132,6 +136,7 @@ add_files( driver.h economy.cpp economy_base.h + economy_cmd.h economy_func.h economy_type.h effectvehicle.cpp @@ -141,6 +146,7 @@ add_files( elrail_func.h engine.cpp engine_base.h + engine_cmd.h engine_func.h engine_gui.cpp engine_gui.h @@ -174,6 +180,7 @@ add_files( gfxinit.h goal.cpp goal_base.h + goal_cmd.h goal_gui.cpp goal_type.h graph_gui.cpp @@ -182,6 +189,7 @@ add_files( ground_vehicle.hpp group.h group_cmd.cpp + group_cmd.h group_gui.cpp group_gui.h group_type.h @@ -198,6 +206,7 @@ add_files( house_type.h industry.h industry_cmd.cpp + industry_cmd.h industry_gui.cpp industry_map.h industry_type.h @@ -208,6 +217,7 @@ add_files( intro_gui.cpp landscape.cpp landscape.h + landscape_cmd.h landscape_type.h language.h livery.h @@ -217,6 +227,7 @@ add_files( map_type.h misc.cpp misc_cmd.cpp + misc_cmd.h misc_gui.cpp mixer.cpp mixer.h @@ -277,6 +288,7 @@ add_files( newgrf_town.h newgrf_townname.cpp newgrf_townname.h + news_cmd.h news_func.h news_gui.cpp news_gui.h @@ -284,6 +296,7 @@ add_files( object.h object_base.h object_cmd.cpp + object_cmd.h object_gui.cpp object_map.h object_type.h @@ -293,6 +306,7 @@ add_files( order_backup.h order_base.h order_cmd.cpp + order_cmd.h order_func.h order_gui.cpp order_type.h @@ -305,6 +319,7 @@ add_files( rail.cpp rail.h rail_cmd.cpp + rail_cmd.h rail_gui.cpp rail_gui.h rail_map.h @@ -327,6 +342,7 @@ add_files( roadstop_base.h roadveh.h roadveh_cmd.cpp + roadveh_cmd.h roadveh_gui.cpp safeguards.h screenshot_gui.cpp @@ -334,6 +350,7 @@ add_files( screenshot.cpp screenshot.h settings.cpp + settings_cmd.h settings_func.h settings_gui.cpp settings_gui.h @@ -343,6 +360,7 @@ add_files( settings_type.h ship.h ship_cmd.cpp + ship_cmd.h ship_gui.cpp signal.cpp signal_func.h @@ -350,6 +368,7 @@ add_files( signs.cpp signs_base.h signs_cmd.cpp + signs_cmd.h signs_func.h signs_gui.cpp signs_type.h @@ -368,6 +387,7 @@ add_files( station.cpp station_base.h station_cmd.cpp + station_cmd.h station_func.h station_gui.cpp station_gui.h @@ -379,6 +399,7 @@ add_files( stdafx.h story.cpp story_base.h + story_cmd.h story_gui.cpp story_type.h strgen/strgen.h @@ -393,11 +414,13 @@ add_files( strings_type.h subsidy.cpp subsidy_base.h + subsidy_cmd.h subsidy_func.h subsidy_gui.cpp subsidy_type.h tar_type.h terraform_cmd.cpp + terraform_cmd.h terraform_gui.cpp terraform_gui.h textbuf.cpp @@ -422,11 +445,13 @@ add_files( tilematrix_type.hpp timetable.h timetable_cmd.cpp + timetable_cmd.h timetable_gui.cpp toolbar_gui.cpp toolbar_gui.h town.h town_cmd.cpp + town_cmd.h town_gui.cpp town_kdtree.h town_map.h @@ -438,22 +463,26 @@ add_files( track_type.h train.h train_cmd.cpp + train_cmd.h train_gui.cpp transparency.h transparency_gui.cpp transparency_gui.h transport_type.h tree_cmd.cpp + tree_cmd.h tree_gui.cpp tree_map.h tunnel_map.cpp tunnel_map.h tunnelbridge.h tunnelbridge_cmd.cpp + tunnelbridge_cmd.h tunnelbridge_map.h vehicle.cpp vehicle_base.h vehicle_cmd.cpp + vehicle_cmd.h vehicle_func.h vehicle_gui.cpp vehicle_gui.h @@ -462,6 +491,7 @@ add_files( vehiclelist.cpp vehiclelist.h viewport.cpp + viewport_cmd.h viewport_func.h viewport_gui.cpp viewport_kdtree.h @@ -472,10 +502,12 @@ add_files( walltime_func.h water.h water_cmd.cpp + water_cmd.h water_map.h waypoint.cpp waypoint_base.h waypoint_cmd.cpp + waypoint_cmd.h waypoint_func.h waypoint_gui.cpp widget.cpp diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 1f52bbecd..2d9b2ae16 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -37,6 +37,7 @@ #include "disaster_vehicle.h" #include "newgrf_airporttiles.h" #include "framerate_type.h" +#include "aircraft_cmd.h" #include "table/strings.h" diff --git a/src/aircraft_cmd.h b/src/aircraft_cmd.h new file mode 100644 index 000000000..769a707c7 --- /dev/null +++ b/src/aircraft_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file aircraft_cmd.h Command definitions related to aircraft. */ + +#ifndef AIRCRAFT_CMD_H +#define AIRCRAFT_CMD_H + +#include "command_type.h" +#include "engine_type.h" +#include "vehicle_type.h" + +CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); + +#endif /* AIRCRAFT_CMD_H */ diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 2602d86ad..db14a4a1d 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -22,6 +22,7 @@ #include "ai/ai.hpp" #include "news_func.h" #include "strings_func.h" +#include "autoreplace_cmd.h" #include "table/strings.h" diff --git a/src/autoreplace_cmd.h b/src/autoreplace_cmd.h new file mode 100644 index 000000000..14088d6dc --- /dev/null +++ b/src/autoreplace_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file autoreplace_cmd.h Command definitions related to autoreplace. */ + +#ifndef AUTOREPLACE_CMD_H +#define AUTOREPLACE_CMD_H + +#include "command_type.h" + +CommandProc CmdAutoreplaceVehicle; +CommandProc CmdSetAutoReplace; + +DEF_CMD_TRAIT(CMD_AUTOREPLACE_VEHICLE, CmdAutoreplaceVehicle, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_AUTOREPLACE, CmdSetAutoReplace, 0, CMDT_VEHICLE_MANAGEMENT) + +#endif /* AUTOREPLACE_CMD_H */ diff --git a/src/command.cpp b/src/command.cpp index 449fdece2..b875884f9 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -24,187 +24,66 @@ #include "signal_func.h" #include "core/backup_type.hpp" #include "object_base.h" +#include "autoreplace_cmd.h" +#include "company_cmd.h" +#include "depot_cmd.h" +#include "economy_cmd.h" +#include "engine_cmd.h" +#include "goal_cmd.h" +#include "group_cmd.h" +#include "industry_cmd.h" +#include "landscape_cmd.h" +#include "misc_cmd.h" +#include "news_cmd.h" +#include "object_cmd.h" +#include "order_cmd.h" +#include "rail_cmd.h" +#include "road_cmd.h" +#include "roadveh_cmd.h" +#include "settings_cmd.h" +#include "signs_cmd.h" +#include "station_cmd.h" +#include "story_cmd.h" +#include "subsidy_cmd.h" +#include "terraform_cmd.h" +#include "timetable_cmd.h" +#include "town_cmd.h" +#include "train_cmd.h" +#include "tree_cmd.h" +#include "tunnelbridge_cmd.h" +#include "vehicle_cmd.h" +#include "viewport_cmd.h" +#include "water_cmd.h" +#include "waypoint_cmd.h" + +#include <array> #include "table/strings.h" #include "safeguards.h" -CommandProc CmdBuildRailroadTrack; -CommandProc CmdRemoveRailroadTrack; -CommandProc CmdBuildSingleRail; -CommandProc CmdRemoveSingleRail; -CommandProc CmdLandscapeClear; - -CommandProc CmdBuildBridge; - -CommandProc CmdBuildRailStation; -CommandProc CmdRemoveFromRailStation; -CommandProc CmdConvertRail; - -CommandProc CmdBuildSingleSignal; -CommandProc CmdRemoveSingleSignal; - -CommandProc CmdTerraformLand; - -CommandProc CmdBuildObject; -CommandProc CmdSellLandArea; - -CommandProc CmdBuildTunnel; - -CommandProc CmdBuildTrainDepot; -CommandProc CmdBuildRailWaypoint; -CommandProc CmdRenameWaypoint; -CommandProc CmdRemoveFromRailWaypoint; - -CommandProc CmdBuildRoadStop; -CommandProc CmdRemoveRoadStop; - -CommandProc CmdBuildLongRoad; -CommandProc CmdRemoveLongRoad; -CommandProc CmdBuildRoad; - -CommandProc CmdBuildRoadDepot; - -CommandProc CmdConvertRoad; - -CommandProc CmdBuildAirport; - -CommandProc CmdBuildDock; - -CommandProc CmdBuildShipDepot; - -CommandProc CmdBuildBuoy; - -CommandProc CmdPlantTree; - -CommandProc CmdMoveRailVehicle; - -CommandProc CmdBuildVehicle; -CommandProc CmdSellVehicle; -CommandProc CmdRefitVehicle; -CommandProc CmdSendVehicleToDepot; -CommandProc CmdSetVehicleVisibility; - -CommandProc CmdForceTrainProceed; -CommandProc CmdReverseTrainDirection; - -CommandProc CmdClearOrderBackup; -CommandProc CmdModifyOrder; -CommandProc CmdSkipToOrder; -CommandProc CmdDeleteOrder; -CommandProc CmdInsertOrder; -CommandProc CmdChangeServiceInt; - -CommandProc CmdBuildIndustry; -CommandProc CmdIndustryCtrl; - -CommandProc CmdSetCompanyManagerFace; -CommandProc CmdSetCompanyColour; - -CommandProc CmdIncreaseLoan; -CommandProc CmdDecreaseLoan; - -CommandProc CmdWantEnginePreview; -CommandProc CmdEngineCtrl; - -CommandProc CmdRenameVehicle; -CommandProc CmdRenameEngine; - -CommandProc CmdRenameCompany; -CommandProc CmdRenamePresident; - -CommandProc CmdRenameStation; -CommandProc CmdRenameDepot; - -CommandProc CmdPlaceSign; -CommandProc CmdRenameSign; - -CommandProc CmdTurnRoadVeh; - -CommandProc CmdPause; - -CommandProc CmdBuyShareInCompany; -CommandProc CmdSellShareInCompany; -CommandProc CmdBuyCompany; - -CommandProc CmdFoundTown; -CommandProc CmdRenameTown; -CommandProc CmdDoTownAction; -CommandProc CmdTownGrowthRate; -CommandProc CmdTownRating; -CommandProc CmdTownCargoGoal; -CommandProc CmdTownSetText; -CommandProc CmdExpandTown; -CommandProc CmdDeleteTown; - -CommandProc CmdChangeSetting; -CommandProc CmdChangeCompanySetting; - -CommandProc CmdOrderRefit; -CommandProc CmdCloneOrder; - -CommandProc CmdClearArea; +/** + * Define a command with the flags which belongs to it. + * + * This struct connects a command handler function with the flags created with + * the #CMD_AUTO, #CMD_OFFLINE and #CMD_SERVER values. + */ +struct CommandInfo { + CommandProc *proc; ///< The procedure to actually executing + const char *name; ///< A human readable name for the procedure + CommandFlags flags; ///< The (command) flags to that apply to this command + CommandType type; ///< The type of command. +}; +/* Helpers to generate the master command table from the command traits. */ -CommandProc CmdGiveMoney; -CommandProc CmdMoneyCheat; -CommandProc CmdChangeBankBalance; -CommandProc CmdBuildCanal; -CommandProc CmdBuildLock; +template <typename T> +inline constexpr CommandInfo CommandFromTrait() noexcept { return { T::proc, T::name, T::flags, T::type }; }; -CommandProc CmdCreateSubsidy; -CommandProc CmdCompanyCtrl; -CommandProc CmdCustomNewsItem; -CommandProc CmdCreateGoal; -CommandProc CmdRemoveGoal; -CommandProc CmdSetGoalText; -CommandProc CmdSetGoalProgress; -CommandProc CmdSetGoalCompleted; -CommandProc CmdGoalQuestion; -CommandProc CmdGoalQuestionAnswer; -CommandProc CmdCreateStoryPage; -CommandProc CmdCreateStoryPageElement; -CommandProc CmdUpdateStoryPageElement; -CommandProc CmdSetStoryPageTitle; -CommandProc CmdSetStoryPageDate; -CommandProc CmdShowStoryPage; -CommandProc CmdRemoveStoryPage; -CommandProc CmdRemoveStoryPageElement; -CommandProc CmdScrollViewport; -CommandProc CmdStoryPageButton; - -CommandProc CmdLevelLand; - -CommandProc CmdBuildSignalTrack; -CommandProc CmdRemoveSignalTrack; - -CommandProc CmdSetAutoReplace; - -CommandProc CmdCloneVehicle; -CommandProc CmdStartStopVehicle; -CommandProc CmdMassStartStopVehicle; -CommandProc CmdAutoreplaceVehicle; -CommandProc CmdDepotSellAllVehicles; -CommandProc CmdDepotMassAutoReplace; - -CommandProc CmdCreateGroup; -CommandProc CmdAlterGroup; -CommandProc CmdDeleteGroup; -CommandProc CmdAddVehicleGroup; -CommandProc CmdAddSharedVehicleGroup; -CommandProc CmdRemoveAllVehiclesGroup; -CommandProc CmdSetGroupFlag; -CommandProc CmdSetGroupLivery; - -CommandProc CmdMoveOrder; -CommandProc CmdChangeTimetable; -CommandProc CmdSetVehicleOnTime; -CommandProc CmdAutofillTimetable; -CommandProc CmdSetTimetableStart; - -CommandProc CmdOpenCloseAirport; - -#define DEF_CMD(proc, flags, type) {proc, #proc, (CommandFlags)flags, type} +template<typename T, T... i> +inline constexpr auto MakeCommandsFromTraits(std::integer_sequence<T, i...>) noexcept { + return std::array<CommandInfo, sizeof...(i)>{{ CommandFromTrait<CommandTraits<static_cast<Commands>(i)>>()... }}; +} /** * The master command table @@ -213,162 +92,8 @@ CommandProc CmdOpenCloseAirport; * the flags which belongs to it. The indices are the same * as the value from the CMD_* enums. */ -static const Command _command_proc_table[] = { - DEF_CMD(CmdBuildRailroadTrack, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAILROAD_TRACK - DEF_CMD(CmdRemoveRailroadTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_RAILROAD_TRACK - DEF_CMD(CmdBuildSingleRail, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SINGLE_RAIL - DEF_CMD(CmdRemoveSingleRail, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SINGLE_RAIL - DEF_CMD(CmdLandscapeClear, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LANDSCAPE_CLEAR - DEF_CMD(CmdBuildBridge, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_BRIDGE - DEF_CMD(CmdBuildRailStation, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_STATION - DEF_CMD(CmdBuildTrainDepot, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TRAIN_DEPOT - DEF_CMD(CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNALS - DEF_CMD(CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNALS - DEF_CMD(CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_TERRAFORM_LAND - DEF_CMD(CmdBuildObject, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_OBJECT - DEF_CMD(CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TUNNEL - DEF_CMD(CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_STATION - DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAILD - DEF_CMD(CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_RAIL_WAYPOINT - DEF_CMD(CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_WAYPOINT - DEF_CMD(CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_WAYPOINT - - DEF_CMD(CmdBuildRoadStop, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_STOP - DEF_CMD(CmdRemoveRoadStop, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_ROAD_STOP - DEF_CMD(CmdBuildLongRoad,CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_LONG_ROAD - DEF_CMD(CmdRemoveLongRoad, CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_LONG_ROAD; towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed. - DEF_CMD(CmdBuildRoad, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD - DEF_CMD(CmdBuildRoadDepot, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_ROAD_DEPOT - DEF_CMD(CmdConvertRoad, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_ROAD - - DEF_CMD(CmdBuildAirport, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_AIRPORT - DEF_CMD(CmdBuildDock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_DOCK - DEF_CMD(CmdBuildShipDepot, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SHIP_DEPOT - DEF_CMD(CmdBuildBuoy, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_BUOY - DEF_CMD(CmdPlantTree, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_PLANT_TREE - - DEF_CMD(CmdBuildVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION ), // CMD_BUILD_VEHICLE - DEF_CMD(CmdSellVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION ), // CMD_SELL_VEHICLE - DEF_CMD(CmdRefitVehicle, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_REFIT_VEHICLE - DEF_CMD(CmdSendVehicleToDepot, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_SEND_VEHICLE_TO_DEPOT - DEF_CMD(CmdSetVehicleVisibility, 0, CMDT_COMPANY_SETTING ), // CMD_SET_VEHICLE_VISIBILITY - - DEF_CMD(CmdMoveRailVehicle, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_MOVE_RAIL_VEHICLE - DEF_CMD(CmdForceTrainProceed, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_FORCE_TRAIN_PROCEED - DEF_CMD(CmdReverseTrainDirection, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_REVERSE_TRAIN_DIRECTION - - DEF_CMD(CmdClearOrderBackup, CMD_CLIENT_ID, CMDT_SERVER_SETTING ), // CMD_CLEAR_ORDER_BACKUP - DEF_CMD(CmdModifyOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_MODIFY_ORDER - DEF_CMD(CmdSkipToOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SKIP_TO_ORDER - DEF_CMD(CmdDeleteOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_DELETE_ORDER - DEF_CMD(CmdInsertOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_INSERT_ORDER - - DEF_CMD(CmdChangeServiceInt, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_CHANGE_SERVICE_INT - - DEF_CMD(CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_INDUSTRY - DEF_CMD(CmdIndustryCtrl, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_INDUSTRY_CTRL - - DEF_CMD(CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_MANAGER_FACE - DEF_CMD(CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_COLOUR - - DEF_CMD(CmdIncreaseLoan, 0, CMDT_MONEY_MANAGEMENT ), // CMD_INCREASE_LOAN - DEF_CMD(CmdDecreaseLoan, 0, CMDT_MONEY_MANAGEMENT ), // CMD_DECREASE_LOAN - - DEF_CMD(CmdWantEnginePreview, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_WANT_ENGINE_PREVIEW - DEF_CMD(CmdEngineCtrl, CMD_DEITY, CMDT_VEHICLE_MANAGEMENT ), // CMD_ENGINE_CTRL - - DEF_CMD(CmdRenameVehicle, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_VEHICLE - DEF_CMD(CmdRenameEngine, CMD_SERVER, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_ENGINE - - DEF_CMD(CmdRenameCompany, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_COMPANY - DEF_CMD(CmdRenamePresident, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_PRESIDENT - - DEF_CMD(CmdRenameStation, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_STATION - DEF_CMD(CmdRenameDepot, 0, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_DEPOT - - DEF_CMD(CmdPlaceSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_PLACE_SIGN - DEF_CMD(CmdRenameSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_SIGN - - DEF_CMD(CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_TURN_ROADVEH - - DEF_CMD(CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_PAUSE - - DEF_CMD(CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_SHARE_IN_COMPANY - DEF_CMD(CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_SELL_SHARE_IN_COMPANY - DEF_CMD(CmdBuyCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_COMANY - - DEF_CMD(CmdFoundTown, CMD_DEITY | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_FOUND_TOWN; founding random town can fail only in exec run - DEF_CMD(CmdRenameTown, CMD_DEITY | CMD_SERVER, CMDT_OTHER_MANAGEMENT ), // CMD_RENAME_TOWN - DEF_CMD(CmdDoTownAction, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DO_TOWN_ACTION - DEF_CMD(CmdTownCargoGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_CARGO_GOAL - DEF_CMD(CmdTownGrowthRate, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_GROWTH_RATE - DEF_CMD(CmdTownRating, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_RATING - DEF_CMD(CmdTownSetText, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_SET_TEXT - DEF_CMD(CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_EXPAND_TOWN - DEF_CMD(CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DELETE_TOWN - - DEF_CMD(CmdOrderRefit, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ORDER_REFIT - DEF_CMD(CmdCloneOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CLONE_ORDER - - DEF_CMD(CmdClearArea, CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CLEAR_AREA; destroying multi-tile houses makes town rating differ between test and execution - - DEF_CMD(CmdMoneyCheat, CMD_OFFLINE, CMDT_CHEAT ), // CMD_MONEY_CHEAT - DEF_CMD(CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT ), // CMD_CHANGE_BANK_BALANCE - DEF_CMD(CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_CANAL - DEF_CMD(CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_SUBSIDY - DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL - DEF_CMD(CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CUSTOM_NEWS_ITEM - DEF_CMD(CmdCreateGoal, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_GOAL - DEF_CMD(CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_GOAL - DEF_CMD(CmdSetGoalText, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_GOAL_TEXT - DEF_CMD(CmdSetGoalProgress, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_GOAL_PROGRESS - DEF_CMD(CmdSetGoalCompleted, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_GOAL_COMPLETED - DEF_CMD(CmdGoalQuestion, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_GOAL_QUESTION - DEF_CMD(CmdGoalQuestionAnswer, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_GOAL_QUESTION_ANSWER - DEF_CMD(CmdCreateStoryPage, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_STORY_PAGE - DEF_CMD(CmdCreateStoryPageElement, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_STORY_PAGE_ELEMENT - DEF_CMD(CmdUpdateStoryPageElement, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_UPDATE_STORY_PAGE_ELEMENT - DEF_CMD(CmdSetStoryPageTitle, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_STORY_PAGE_TITLE - DEF_CMD(CmdSetStoryPageDate, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SET_STORY_PAGE_DATE - DEF_CMD(CmdShowStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SHOW_STORY_PAGE - DEF_CMD(CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_PAGE - DEF_CMD(CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_ELEMENT_PAGE - DEF_CMD(CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SCROLL_VIEWPORT - DEF_CMD(CmdStoryPageButton, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_STORY_PAGE_BUTTON - - DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once - - DEF_CMD(CmdBuildLock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_LOCK - - DEF_CMD(CmdBuildSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNAL_TRACK - DEF_CMD(CmdRemoveSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNAL_TRACK - - DEF_CMD(CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT ), // CMD_GIVE_MONEY - DEF_CMD(CmdChangeSetting, CMD_SERVER, CMDT_SERVER_SETTING ), // CMD_CHANGE_SETTING - DEF_CMD(CmdChangeCompanySetting, 0, CMDT_COMPANY_SETTING ), // CMD_CHANGE_COMPANY_SETTING - DEF_CMD(CmdSetAutoReplace, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_SET_AUTOREPLACE - DEF_CMD(CmdCloneVehicle, CMD_NO_TEST, CMDT_VEHICLE_CONSTRUCTION ), // CMD_CLONE_VEHICLE; NewGRF callbacks influence building and refitting making it impossible to correctly estimate the cost - DEF_CMD(CmdStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_START_STOP_VEHICLE - DEF_CMD(CmdMassStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_MASS_START_STOP - DEF_CMD(CmdAutoreplaceVehicle, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_AUTOREPLACE_VEHICLE - DEF_CMD(CmdDepotSellAllVehicles, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_DEPOT_SELL_ALL_VEHICLES - DEF_CMD(CmdDepotMassAutoReplace, 0, CMDT_VEHICLE_CONSTRUCTION ), // CMD_DEPOT_MASS_AUTOREPLACE - DEF_CMD(CmdCreateGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CREATE_GROUP - DEF_CMD(CmdDeleteGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_DELETE_GROUP - DEF_CMD(CmdAlterGroup, 0, CMDT_OTHER_MANAGEMENT ), // CMD_ALTER_GROUP - DEF_CMD(CmdAddVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_VEHICLE_GROUP - DEF_CMD(CmdAddSharedVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_SHARE_VEHICLE_GROUP - DEF_CMD(CmdRemoveAllVehiclesGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_REMOVE_ALL_VEHICLES_GROUP - DEF_CMD(CmdSetGroupFlag, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_FLAG - DEF_CMD(CmdSetGroupLivery, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_LIVERY - DEF_CMD(CmdMoveOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_MOVE_ORDER - DEF_CMD(CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CHANGE_TIMETABLE - DEF_CMD(CmdSetVehicleOnTime, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_VEHICLE_ON_TIME - DEF_CMD(CmdAutofillTimetable, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_AUTOFILL_TIMETABLE - DEF_CMD(CmdSetTimetableStart, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_TIMETABLE_START - - DEF_CMD(CmdOpenCloseAirport, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_OPEN_CLOSE_AIRPORT -}; +static constexpr auto _command_proc_table = MakeCommandsFromTraits(std::make_integer_sequence<std::underlying_type_t<Commands>, CMD_END>{}); + /*! * This function range-checks a cmd, and checks if the cmd is not nullptr @@ -376,9 +101,9 @@ static const Command _command_proc_table[] = { * @param cmd The integer value of a command * @return true if the command is valid (and got a CommandProc function) */ -bool IsValidCommand(uint32 cmd) +bool IsValidCommand(Commands cmd) { - return cmd < lengthof(_command_proc_table) && _command_proc_table[cmd].proc != nullptr; + return cmd < _command_proc_table.size() && _command_proc_table[cmd].proc != nullptr; } /*! @@ -414,7 +139,7 @@ const char *GetCommandName(Commands cmd) * @param cmd The command to check. * @return True if the command is allowed while paused, false otherwise. */ -bool IsCommandAllowedWhilePaused(uint32 cmd) +bool IsCommandAllowedWhilePaused(Commands cmd) { /* Lookup table for the command types that are allowed for a given pause level setting. */ static const int command_type_lookup[] = { @@ -704,7 +429,7 @@ CommandCost DoCommandPInternal(Commands cmd, StringID err_message, CommandCallba _additional_cash_required = 0; /* Get pointer to command handler */ - assert(cmd < lengthof(_command_proc_table)); + assert(cmd < _command_proc_table.size()); CommandProc *proc = _command_proc_table[cmd].proc; /* Shouldn't happen, but you never know when someone adds * NULLs to the _command_proc_table. */ diff --git a/src/command_func.h b/src/command_func.h index 662ae00a5..15c88ea03 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -47,11 +47,11 @@ void NetworkSendCommand(Commands cmd, StringID err_message, CommandCallback *cal extern Money _additional_cash_required; -bool IsValidCommand(uint32 cmd); +bool IsValidCommand(Commands cmd); CommandFlags GetCommandFlags(Commands cmd); const char *GetCommandName(Commands cmd); Money GetAvailableMoneyForCommand(); -bool IsCommandAllowedWhilePaused(uint32 cmd); +bool IsCommandAllowedWhilePaused(Commands cmd); /** * Extracts the DC flags needed for DoCommand from the flags returned by GetCommandFlags diff --git a/src/command_type.h b/src/command_type.h index 972db596e..ecb24df12 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -423,18 +423,17 @@ enum CommandPauseLevel { */ typedef CommandCost CommandProc(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text); -/** - * Define a command with the flags which belongs to it. - * - * This struct connect a command handler function with the flags created with - * the #CMD_AUTO, #CMD_OFFLINE and #CMD_SERVER values. - */ -struct Command { - CommandProc *proc; ///< The procedure to actually executing - const char *name; ///< A human readable name for the procedure - CommandFlags flags; ///< The (command) flags to that apply to this command - CommandType type; ///< The type of command. -}; + +/** Defines the traits of a command. */ +template <Commands Tcmd> struct CommandTraits; + +#define DEF_CMD_TRAIT(cmd_, proc_, flags_, type_) \ + template<> struct CommandTraits<cmd_> { \ + static constexpr auto &proc = proc_; \ + static constexpr CommandFlags flags = (CommandFlags)(flags_); \ + static constexpr CommandType type = type_; \ + static inline constexpr const char *name = #proc_; \ + }; /** * Define a callback function for the client, after the command is finished. diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 792dd624b..f18fe343a 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -36,6 +36,7 @@ #include "goal_base.h" #include "story_base.h" #include "widgets/statusbar_widget.h" +#include "company_cmd.h" #include "table/strings.h" diff --git a/src/company_cmd.h b/src/company_cmd.h new file mode 100644 index 000000000..0d3e2d2fd --- /dev/null +++ b/src/company_cmd.h @@ -0,0 +1,29 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file company_cmd.h Command definitions related to companies. */ + +#ifndef COMPANY_CMD_H +#define COMPANY_CMD_H + +#include "command_type.h" + +CommandProc CmdCompanyCtrl; +CommandProc CmdGiveMoney; +CommandProc CmdRenameCompany; +CommandProc CmdRenamePresident; +CommandProc CmdSetCompanyManagerFace; +CommandProc CmdSetCompanyColour; + +DEF_CMD_TRAIT(CMD_COMPANY_CTRL, CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING) +DEF_CMD_TRAIT(CMD_GIVE_MONEY, CmdGiveMoney, 0, CMDT_MONEY_MANAGEMENT) +DEF_CMD_TRAIT(CMD_RENAME_COMPANY, CmdRenameCompany, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_RENAME_PRESIDENT, CmdRenamePresident, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_COMPANY_MANAGER_FACE, CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_COMPANY_COLOUR, CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT) + +#endif /* COMPANY_CMD_H */ diff --git a/src/depot_cmd.cpp b/src/depot_cmd.cpp index 6f5ddda27..e49936f55 100644 --- a/src/depot_cmd.cpp +++ b/src/depot_cmd.cpp @@ -16,6 +16,7 @@ #include "vehicle_gui.h" #include "vehiclelist.h" #include "window_func.h" +#include "depot_cmd.h" #include "table/strings.h" diff --git a/src/depot_cmd.h b/src/depot_cmd.h new file mode 100644 index 000000000..9c39db1e2 --- /dev/null +++ b/src/depot_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file depot_cmd.h Command definitions related to depots. */ + +#ifndef DEPOT_CMD_H +#define DEPOT_CMD_H + +#include "command_type.h" + +CommandProc CmdRenameDepot; + +DEF_CMD_TRAIT(CMD_RENAME_DEPOT, CmdRenameDepot, 0, CMDT_OTHER_MANAGEMENT) + +#endif /* DEPOT_CMD_H */ diff --git a/src/economy.cpp b/src/economy.cpp index 3beeb25f5..329a0a5a8 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -48,6 +48,7 @@ #include "goal_base.h" #include "story_base.h" #include "linkgraph/refresh.h" +#include "economy_cmd.h" #include "table/strings.h" #include "table/pricebase.h" diff --git a/src/economy_cmd.h b/src/economy_cmd.h new file mode 100644 index 000000000..f182af81f --- /dev/null +++ b/src/economy_cmd.h @@ -0,0 +1,23 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file economy_cmd.h Command definitions related to the economy. */ + +#ifndef ECONOMY_CMD_H +#define ECONOMY_CMD_H + +#include "command_type.h" + +CommandProc CmdBuyShareInCompany; +CommandProc CmdSellShareInCompany; +CommandProc CmdBuyCompany; + +DEF_CMD_TRAIT(CMD_BUY_SHARE_IN_COMPANY, CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SELL_SHARE_IN_COMPANY, CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT) +DEF_CMD_TRAIT(CMD_BUY_COMPANY, CmdBuyCompany, 0, CMDT_MONEY_MANAGEMENT) + +#endif /* ECONOMY_CMD_H */ diff --git a/src/engine.cpp b/src/engine.cpp index f330cf604..56f81ffce 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -29,6 +29,7 @@ #include "vehicle_func.h" #include "articulated_vehicles.h" #include "error.h" +#include "engine_base.h" #include "table/strings.h" #include "table/engines.h" diff --git a/src/engine_cmd.h b/src/engine_cmd.h new file mode 100644 index 000000000..3ed47e805 --- /dev/null +++ b/src/engine_cmd.h @@ -0,0 +1,25 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file engine_cmd.h Command definitions related to engines. */ + +#ifndef ENGINE_CMD_H +#define ENGINE_CMD_H + +#include "command_type.h" + +CommandProc CmdWantEnginePreview; +CommandProc CmdEngineCtrl; +CommandProc CmdRenameEngine; +CommandProc CmdSetVehicleVisibility; + +DEF_CMD_TRAIT(CMD_WANT_ENGINE_PREVIEW, CmdWantEnginePreview, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_ENGINE_CTRL, CmdEngineCtrl, CMD_DEITY, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_RENAME_ENGINE, CmdRenameEngine, CMD_SERVER, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_VEHICLE_VISIBILITY, CmdSetVehicleVisibility, 0, CMDT_COMPANY_SETTING) + +#endif /* ENGINE_CMD_H */ diff --git a/src/goal.cpp b/src/goal.cpp index c61165059..7c24386d1 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -23,6 +23,7 @@ #include "network/network.h" #include "network/network_base.h" #include "network/network_func.h" +#include "goal_cmd.h" #include "safeguards.h" diff --git a/src/goal_cmd.h b/src/goal_cmd.h new file mode 100644 index 000000000..3b047f11a --- /dev/null +++ b/src/goal_cmd.h @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file goal_cmd.h Command definitions related to goals. */ + +#ifndef GOAL_CMD_H +#define GOAL_CMD_H + +#include "command_type.h" + +CommandProc CmdCreateGoal; +CommandProc CmdRemoveGoal; +CommandProc CmdSetGoalText; +CommandProc CmdSetGoalProgress; +CommandProc CmdSetGoalCompleted; +CommandProc CmdGoalQuestion; +CommandProc CmdGoalQuestionAnswer; + +DEF_CMD_TRAIT(CMD_CREATE_GOAL, CmdCreateGoal, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_REMOVE_GOAL, CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_GOAL_TEXT, CmdSetGoalText, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_GOAL_PROGRESS, CmdSetGoalProgress, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_GOAL_COMPLETED, CmdSetGoalCompleted, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_GOAL_QUESTION, CmdGoalQuestion, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_GOAL_QUESTION_ANSWER, CmdGoalQuestionAnswer, CMD_DEITY, CMDT_OTHER_MANAGEMENT) + +#endif /* GOAL_CMD_H */ diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index ec4358f76..8b67fbeae 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -19,6 +19,7 @@ #include "company_func.h" #include "core/pool_func.hpp" #include "order_backup.h" +#include "group_cmd.h" #include "table/strings.h" diff --git a/src/group_cmd.h b/src/group_cmd.h new file mode 100644 index 000000000..a58a6f8aa --- /dev/null +++ b/src/group_cmd.h @@ -0,0 +1,33 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file group_cmd.h Command definitions related to engine groups. */ + +#ifndef GROUP_CMD_H +#define GROUP_CMD_H + +#include "command_type.h" + +CommandProc CmdCreateGroup; +CommandProc CmdAlterGroup; +CommandProc CmdDeleteGroup; +CommandProc CmdAddVehicleGroup; +CommandProc CmdAddSharedVehicleGroup; +CommandProc CmdRemoveAllVehiclesGroup; +CommandProc CmdSetGroupFlag; +CommandProc CmdSetGroupLivery; + +DEF_CMD_TRAIT(CMD_CREATE_GROUP, CmdCreateGroup, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_DELETE_GROUP, CmdDeleteGroup, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_ALTER_GROUP, CmdAlterGroup, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_ADD_VEHICLE_GROUP, CmdAddVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_ADD_SHARED_VEHICLE_GROUP, CmdAddSharedVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_REMOVE_ALL_VEHICLES_GROUP, CmdRemoveAllVehiclesGroup, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_GROUP_FLAG, CmdSetGroupFlag, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_GROUP_LIVERY, CmdSetGroupLivery, 0, CMDT_ROUTE_MANAGEMENT) + +#endif /* GROUP_CMD_H */ diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 529e01edb..a24f35f75 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -42,6 +42,7 @@ #include "error.h" #include "cmd_helper.h" #include "string_func.h" +#include "industry_cmd.h" #include "table/strings.h" #include "table/industry_land.h" diff --git a/src/industry_cmd.h b/src/industry_cmd.h new file mode 100644 index 000000000..e1f18932a --- /dev/null +++ b/src/industry_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file industry_cmd.h Command definitions related to industries. */ + +#ifndef INDUSTRY_CMD_H +#define INDUSTRY_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildIndustry; +CommandProc CmdIndustryCtrl; + +DEF_CMD_TRAIT(CMD_BUILD_INDUSTRY, CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_INDUSTRY_CTRL, CmdIndustryCtrl, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) + +#endif /* INDUSTRY_CMD_H */ diff --git a/src/landscape.cpp b/src/landscape.cpp index 242ee089a..1cc3b1ad2 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -31,6 +31,7 @@ #include "pathfinder/npf/aystar.h" #include "saveload/saveload.h" #include "framerate_type.h" +#include "landscape_cmd.h" #include <array> #include <list> #include <set> diff --git a/src/landscape_cmd.h b/src/landscape_cmd.h new file mode 100644 index 000000000..f3b6fd3fc --- /dev/null +++ b/src/landscape_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file landscape_cmd.h Command definitions related to landscape (slopes etc.). */ + +#ifndef LANDSCAPE_CMD_H +#define LANDSCAPE_CMD_H + +#include "command_type.h" + +CommandProc CmdLandscapeClear; +CommandProc CmdClearArea; + +DEF_CMD_TRAIT(CMD_LANDSCAPE_CLEAR, CmdLandscapeClear, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_CLEAR_AREA, CmdClearArea, CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // destroying multi-tile houses makes town rating differ between test and execution + +#endif /* LANDSCAPE_CMD_H */ diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp index c461d36dc..2e70f5fdd 100644 --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -22,6 +22,7 @@ #include "tile_map.h" #include "texteff.hpp" #include "core/backup_type.hpp" +#include "misc_cmd.h" #include "table/strings.h" diff --git a/src/misc_cmd.h b/src/misc_cmd.h new file mode 100644 index 000000000..6827db3ac --- /dev/null +++ b/src/misc_cmd.h @@ -0,0 +1,27 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file misc_cmd.h Miscellaneous command definitions. */ + +#ifndef MISC_CMD_H +#define MISC_CMD_H + +#include "command_type.h" + +CommandProc CmdMoneyCheat; +CommandProc CmdChangeBankBalance; +CommandProc CmdIncreaseLoan; +CommandProc CmdDecreaseLoan; +CommandProc CmdPause; + +DEF_CMD_TRAIT(CMD_MONEY_CHEAT, CmdMoneyCheat, CMD_OFFLINE, CMDT_CHEAT) +DEF_CMD_TRAIT(CMD_CHANGE_BANK_BALANCE, CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT) +DEF_CMD_TRAIT(CMD_INCREASE_LOAN, CmdIncreaseLoan, 0, CMDT_MONEY_MANAGEMENT) +DEF_CMD_TRAIT(CMD_DECREASE_LOAN, CmdDecreaseLoan, 0, CMDT_MONEY_MANAGEMENT) +DEF_CMD_TRAIT(CMD_PAUSE, CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING) + +#endif /* MISC_CMD_H */ diff --git a/src/news_cmd.h b/src/news_cmd.h new file mode 100644 index 000000000..4a75037b3 --- /dev/null +++ b/src/news_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file news_cmd.h Command definitions related to news messages. */ + +#ifndef NEWS_CMD_H +#define NEWS_CMD_H + +#include "command_type.h" + +CommandProc CmdCustomNewsItem; + +DEF_CMD_TRAIT(CMD_CUSTOM_NEWS_ITEM, CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT) + +#endif /* NEWS_CMD_H */ diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 10a49b62e..3f3b91867 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -35,6 +35,7 @@ #include "guitimer_func.h" #include "group_gui.h" #include "zoom_func.h" +#include "news_cmd.h" #include "widgets/news_widget.h" diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 328cadd93..f207d4786 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -33,6 +33,7 @@ #include "newgrf_debug.h" #include "vehicle_func.h" #include "station_func.h" +#include "object_cmd.h" #include "table/strings.h" #include "table/object_land.h" diff --git a/src/object_cmd.h b/src/object_cmd.h new file mode 100644 index 000000000..b7119afc3 --- /dev/null +++ b/src/object_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file object_cmd.h Command definitions related to objects. */ + +#ifndef OBJECT_CMD_H +#define OBJECT_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildObject; + +DEF_CMD_TRAIT(CMD_BUILD_OBJECT, CmdBuildObject, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) + +#endif /* OBJECT_CMD_H */ diff --git a/src/order_backup.cpp b/src/order_backup.cpp index cba46941c..51e1b67ff 100644 --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -16,6 +16,7 @@ #include "vehicle_base.h" #include "window_func.h" #include "station_map.h" +#include "order_cmd.h" #include "safeguards.h" diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index b681b6379..2f366b674 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -26,6 +26,7 @@ #include "company_base.h" #include "order_backup.h" #include "cheat_type.h" +#include "order_cmd.h" #include "table/strings.h" diff --git a/src/order_cmd.h b/src/order_cmd.h new file mode 100644 index 000000000..606cbef60 --- /dev/null +++ b/src/order_cmd.h @@ -0,0 +1,33 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file order_cmd.h Command definitions related to orders. */ + +#ifndef ORDER_CMD_H +#define ORDER_CMD_H + +#include "command_type.h" + +CommandProc CmdModifyOrder; +CommandProc CmdSkipToOrder; +CommandProc CmdDeleteOrder; +CommandProc CmdInsertOrder; +CommandProc CmdOrderRefit; +CommandProc CmdCloneOrder; +CommandProc CmdMoveOrder; +CommandProc CmdClearOrderBackup; + +DEF_CMD_TRAIT(CMD_MODIFY_ORDER, CmdModifyOrder, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SKIP_TO_ORDER, CmdSkipToOrder, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_DELETE_ORDER, CmdDeleteOrder, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_INSERT_ORDER, CmdInsertOrder, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_ORDER_REFIT, CmdOrderRefit, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_CLONE_ORDER, CmdCloneOrder, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_MOVE_ORDER, CmdMoveOrder, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_CLEAR_ORDER_BACKUP, CmdClearOrderBackup, CMD_CLIENT_ID, CMDT_SERVER_SETTING) + +#endif /* ORDER_CMD_H */ diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 8ff8d6453..449254f51 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -31,6 +31,7 @@ #include "strings_func.h" #include "company_gui.h" #include "object_map.h" +#include "rail_cmd.h" #include "table/strings.h" #include "table/railtypes.h" diff --git a/src/rail_cmd.h b/src/rail_cmd.h new file mode 100644 index 000000000..e625eb03d --- /dev/null +++ b/src/rail_cmd.h @@ -0,0 +1,37 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file rail_cmd.h Command definitions for rail. */ + +#ifndef RAIL_CMD_H +#define RAIL_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildRailroadTrack; +CommandProc CmdRemoveRailroadTrack; +CommandProc CmdBuildSingleRail; +CommandProc CmdRemoveSingleRail; +CommandProc CmdBuildTrainDepot; +CommandProc CmdBuildSingleSignal; +CommandProc CmdRemoveSingleSignal; +CommandProc CmdConvertRail; +CommandProc CmdBuildSignalTrack; +CommandProc CmdRemoveSignalTrack; + +DEF_CMD_TRAIT(CMD_BUILD_RAILROAD_TRACK, CmdBuildRailroadTrack, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_RAILROAD_TRACK, CmdRemoveRailroadTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_SINGLE_RAIL, CmdBuildSingleRail, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_SINGLE_RAIL, CmdRemoveSingleRail, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_TRAIN_DEPOT, CmdBuildTrainDepot, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_SIGNALS, CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_SIGNALS, CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_CONVERT_RAIL, CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_SIGNAL_TRACK, CmdBuildSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_SIGNAL_TRACK, CmdRemoveSignalTrack, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) + +#endif /* RAIL_CMD_H */ diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 942cce7a5..b3f6f4431 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -37,6 +37,7 @@ #include "genworld.h" #include "company_gui.h" #include "road_func.h" +#include "road_cmd.h" #include "table/strings.h" #include "table/roadtypes.h" diff --git a/src/road_cmd.h b/src/road_cmd.h index 753ebd21d..4908f72e3 100644 --- a/src/road_cmd.h +++ b/src/road_cmd.h @@ -12,8 +12,21 @@ #include "direction_type.h" #include "road_type.h" +#include "command_type.h" void DrawRoadDepotSprite(int x, int y, DiagDirection dir, RoadType rt); void UpdateNearestTownForRoadTiles(bool invalidate); +CommandProc CmdBuildLongRoad; +CommandProc CmdRemoveLongRoad; +CommandProc CmdBuildRoad; +CommandProc CmdBuildRoadDepot; +CommandProc CmdConvertRoad; + +DEF_CMD_TRAIT(CMD_BUILD_LONG_ROAD, CmdBuildLongRoad, CMD_AUTO | CMD_NO_WATER | CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_LONG_ROAD, CmdRemoveLongRoad, CMD_AUTO | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed. +DEF_CMD_TRAIT(CMD_BUILD_ROAD, CmdBuildRoad, CMD_AUTO | CMD_NO_WATER | CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_ROAD_DEPOT, CmdBuildRoadDepot, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_CONVERT_ROAD, CmdConvertRoad, 0, CMDT_LANDSCAPE_CONSTRUCTION) + #endif /* ROAD_CMD_H */ diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index b20748fa0..9e72fd30d 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -34,6 +34,7 @@ #include "newgrf.h" #include "zoom_func.h" #include "framerate_type.h" +#include "roadveh_cmd.h" #include "table/strings.h" diff --git a/src/roadveh_cmd.h b/src/roadveh_cmd.h new file mode 100644 index 000000000..42053df16 --- /dev/null +++ b/src/roadveh_cmd.h @@ -0,0 +1,23 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file roadveh_cmd.h Command definitions related to road vehicles. */ + +#ifndef ROADVEH_CMD_H +#define ROADVEH_CMD_H + +#include "command_type.h" +#include "engine_type.h" +#include "vehicle_type.h" + +CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); + +CommandProc CmdTurnRoadVeh; + +DEF_CMD_TRAIT(CMD_TURN_ROADVEH, CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT) + +#endif /* ROADVEH_CMD_H */ diff --git a/src/settings.cpp b/src/settings.cpp index b82fe6d9a..10d87cf9d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -44,6 +44,7 @@ #include "newgrf_config.h" #include "fios.h" #include "fileio_func.h" +#include "settings_cmd.h" #include "table/strings.h" diff --git a/src/settings_cmd.h b/src/settings_cmd.h new file mode 100644 index 000000000..15b9c31a4 --- /dev/null +++ b/src/settings_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file settings_cmd.h Command definitions related to settings. */ + +#ifndef SETTINGS_CMD_H +#define SETTINGS_CMD_H + +#include "command_type.h" + +CommandProc CmdChangeSetting; +CommandProc CmdChangeCompanySetting; + +DEF_CMD_TRAIT(CMD_CHANGE_SETTING, CmdChangeSetting, CMD_SERVER, CMDT_SERVER_SETTING) +DEF_CMD_TRAIT(CMD_CHANGE_COMPANY_SETTING, CmdChangeCompanySetting, 0, CMDT_COMPANY_SETTING) + +#endif /* SETTINGS_CMD_H */ diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 7f9dab0f1..bab291b8a 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -34,6 +34,7 @@ #include "framerate_type.h" #include "industry.h" #include "industry_map.h" +#include "ship_cmd.h" #include "table/strings.h" diff --git a/src/ship_cmd.h b/src/ship_cmd.h new file mode 100644 index 000000000..a451cf0a4 --- /dev/null +++ b/src/ship_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file ship_cmd.h Command definitions related to ships. */ + +#ifndef SHIP_CMD_H +#define SHIP_CMD_H + +#include "command_type.h" +#include "engine_type.h" +#include "vehicle_type.h" + +CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); + +#endif /* SHIP_CMD_H */ diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp index 504bae078..8aa398755 100644 --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -17,6 +17,7 @@ #include "viewport_kdtree.h" #include "window_func.h" #include "string_func.h" +#include "signs_cmd.h" #include "table/strings.h" diff --git a/src/signs_cmd.h b/src/signs_cmd.h new file mode 100644 index 000000000..85f0ffbdf --- /dev/null +++ b/src/signs_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file signs_cmd.h Command definitions related to signs. */ + +#ifndef SIGNS_CMD_H +#define SIGNS_CMD_H + +#include "command_type.h" + +CommandProc CmdPlaceSign; +CommandProc CmdRenameSign; + +DEF_CMD_TRAIT(CMD_PLACE_SIGN, CmdPlaceSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_RENAME_SIGN, CmdRenameSign, CMD_DEITY, CMDT_OTHER_MANAGEMENT) + +#endif /* SIGNS_CMD_H */ diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 713d38374..20ef6c997 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -56,6 +56,8 @@ #include "linkgraph/refresh.h" #include "widgets/station_widget.h" #include "tunnelbridge_map.h" +#include "station_cmd.h" +#include "waypoint_cmd.h" #include "table/strings.h" diff --git a/src/station_cmd.h b/src/station_cmd.h new file mode 100644 index 000000000..8e1facc25 --- /dev/null +++ b/src/station_cmd.h @@ -0,0 +1,33 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file station_cmd.h Command definitions related to stations. */ + +#ifndef STATION_CMD_H +#define STATION_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildAirport; +CommandProc CmdBuildDock; +CommandProc CmdBuildRailStation; +CommandProc CmdRemoveFromRailStation; +CommandProc CmdBuildRoadStop; +CommandProc CmdRemoveRoadStop; +CommandProc CmdRenameStation; +CommandProc CmdOpenCloseAirport; + +DEF_CMD_TRAIT(CMD_BUILD_AIRPORT, CmdBuildAirport, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_DOCK, CmdBuildDock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_RAIL_STATION, CmdBuildRailStation, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_FROM_RAIL_STATION, CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_ROAD_STOP, CmdBuildRoadStop, CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_ROAD_STOP, CmdRemoveRoadStop, 0, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_RENAME_STATION, CmdRenameStation, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_OPEN_CLOSE_AIRPORT, CmdOpenCloseAirport, 0, CMDT_ROUTE_MANAGEMENT) + +#endif /* STATION_CMD_H */ diff --git a/src/story.cpp b/src/story.cpp index 641ed7fbf..4c58b19a5 100644 --- a/src/story.cpp +++ b/src/story.cpp @@ -25,6 +25,7 @@ #include "game/game.hpp" #include "script/api/script_story_page.hpp" #include "script/api/script_event_types.hpp" +#include "story_cmd.h" #include "safeguards.h" diff --git a/src/story_cmd.h b/src/story_cmd.h new file mode 100644 index 000000000..a7323ec6b --- /dev/null +++ b/src/story_cmd.h @@ -0,0 +1,35 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file story_cmd.h Command definitions related to stories. */ + +#ifndef STORY_CMD_H +#define STORY_CMD_H + +#include "command_type.h" + +CommandProc CmdCreateStoryPage; +CommandProc CmdCreateStoryPageElement; +CommandProc CmdUpdateStoryPageElement; +CommandProc CmdSetStoryPageTitle; +CommandProc CmdSetStoryPageDate; +CommandProc CmdShowStoryPage; +CommandProc CmdRemoveStoryPage; +CommandProc CmdRemoveStoryPageElement; +CommandProc CmdStoryPageButton; + +DEF_CMD_TRAIT(CMD_CREATE_STORY_PAGE, CmdCreateStoryPage, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_CREATE_STORY_PAGE_ELEMENT, CmdCreateStoryPageElement, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_UPDATE_STORY_PAGE_ELEMENT, CmdUpdateStoryPageElement, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_STORY_PAGE_TITLE, CmdSetStoryPageTitle, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_STORY_PAGE_DATE, CmdSetStoryPageDate, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SHOW_STORY_PAGE, CmdShowStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_REMOVE_STORY_PAGE, CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_REMOVE_STORY_PAGE_ELEMENT, CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_STORY_PAGE_BUTTON, CmdStoryPageButton, CMD_DEITY, CMDT_OTHER_MANAGEMENT) + +#endif /* STORY_CMD_H */ diff --git a/src/subsidy.cpp b/src/subsidy.cpp index e8fc951c4..ecead2612 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -24,6 +24,7 @@ #include "command_func.h" #include "string_func.h" #include "tile_cmd.h" +#include "subsidy_cmd.h" #include "table/strings.h" diff --git a/src/subsidy_cmd.h b/src/subsidy_cmd.h new file mode 100644 index 000000000..f68c9b303 --- /dev/null +++ b/src/subsidy_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file subsidy_cmd.h Command definitions related to subsidies. */ + +#ifndef SUBSIDY_CMD_H +#define SUBSIDY_CMD_H + +#include "command_type.h" + +CommandProc CmdCreateSubsidy; + +DEF_CMD_TRAIT(CMD_CREATE_SUBSIDY, CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT) + +#endif /* SUBSIDY_CMD_H */ diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt index c4043681b..3a615135e 100644 --- a/src/table/CMakeLists.txt +++ b/src/table/CMakeLists.txt @@ -34,7 +34,7 @@ add_files( town_land.h townname.h track_land.h - train_cmd.h + train_sprites.h tree_land.h unicode.h water_land.h diff --git a/src/table/train_cmd.h b/src/table/train_sprites.h index f9419990b..5811ec7f3 100644 --- a/src/table/train_cmd.h +++ b/src/table/train_sprites.h @@ -5,7 +5,7 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. */ -/** @file train_cmd.h Sprites to use for trains. */ +/** @file train_sprites.h Sprites to use for trains. */ static const SpriteID _engine_sprite_base[] = { 0x0B59, 0x0B61, 0x0B69, 0x0BE1, 0x0B71, 0x0B75, 0x0B7D, 0x0B7D, diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 205a36416..723b3953e 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -17,6 +17,7 @@ #include "company_base.h" #include "company_func.h" #include "core/backup_type.hpp" +#include "terraform_cmd.h" #include "table/strings.h" diff --git a/src/terraform_cmd.h b/src/terraform_cmd.h new file mode 100644 index 000000000..88aeaec4c --- /dev/null +++ b/src/terraform_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file terraform_cmd.h Command definitions related to terraforming. */ + +#ifndef TERRAFORM_CMD_H +#define TERRAFORM_CMD_H + +#include "command_type.h" + +CommandProc CmdTerraformLand; +CommandProc CmdLevelLand; + +DEF_CMD_TRAIT(CMD_TERRAFORM_LAND, CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_LEVEL_LAND, CmdLevelLand, CMD_ALL_TILES | CMD_AUTO | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // test run might clear tiles multiple times, in execution that only happens once + +#endif /* TERRAFORM_CMD_H */ diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index b8f3adc69..a83e877a7 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -14,6 +14,7 @@ #include "window_func.h" #include "vehicle_base.h" #include "cmd_helper.h" +#include "timetable_cmd.h" #include "table/strings.h" diff --git a/src/timetable_cmd.h b/src/timetable_cmd.h new file mode 100644 index 000000000..ba5e2b37e --- /dev/null +++ b/src/timetable_cmd.h @@ -0,0 +1,25 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file timetable_cmd.h Command definitions related to timetables. */ + +#ifndef TIMETABLE_CMD_H +#define TIMETABLE_CMD_H + +#include "command_type.h" + +CommandProc CmdChangeTimetable; +CommandProc CmdSetVehicleOnTime; +CommandProc CmdAutofillTimetable; +CommandProc CmdSetTimetableStart; + +DEF_CMD_TRAIT(CMD_CHANGE_TIMETABLE, CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_VEHICLE_ON_TIME, CmdSetVehicleOnTime, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_AUTOFILL_TIMETABLE, CmdAutofillTimetable, 0, CMDT_ROUTE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_SET_TIMETABLE_START, CmdSetTimetableStart, 0, CMDT_ROUTE_MANAGEMENT) + +#endif /* TIMETABLE_CMD_H */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 27a9e6978..542d1bc39 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -48,6 +48,7 @@ #include "object_base.h" #include "ai/ai.hpp" #include "game/game.hpp" +#include "town_cmd.h" #include "table/strings.h" #include "table/town_land.h" diff --git a/src/town_cmd.h b/src/town_cmd.h new file mode 100644 index 000000000..bd4f4de11 --- /dev/null +++ b/src/town_cmd.h @@ -0,0 +1,35 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file town_cmd.h Command definitions related to towns. */ + +#ifndef TOWN_CMD_H +#define TOWN_CMD_H + +#include "command_type.h" + +CommandProc CmdFoundTown; +CommandProc CmdRenameTown; +CommandProc CmdDoTownAction; +CommandProc CmdTownGrowthRate; +CommandProc CmdTownRating; +CommandProc CmdTownCargoGoal; +CommandProc CmdTownSetText; +CommandProc CmdExpandTown; +CommandProc CmdDeleteTown; + +DEF_CMD_TRAIT(CMD_FOUND_TOWN, CmdFoundTown, CMD_DEITY | CMD_NO_TEST, CMDT_LANDSCAPE_CONSTRUCTION) // founding random town can fail only in exec run +DEF_CMD_TRAIT(CMD_RENAME_TOWN, CmdRenameTown, CMD_DEITY | CMD_SERVER, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_DO_TOWN_ACTION, CmdDoTownAction, 0, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_TOWN_CARGO_GOAL, CmdTownCargoGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_TOWN_GROWTH_RATE, CmdTownGrowthRate, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_TOWN_RATING, CmdTownRating, CMD_DEITY, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_TOWN_SET_TEXT, CmdTownSetText, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_EXPAND_TOWN, CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_DELETE_TOWN, CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION) + +#endif /* TOWN_CMD_H */ diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index e0a70d14f..ad9f6e90d 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -34,9 +34,10 @@ #include "zoom_func.h" #include "newgrf_debug.h" #include "framerate_type.h" +#include "train_cmd.h" #include "table/strings.h" -#include "table/train_cmd.h" +#include "table/train_sprites.h" #include "safeguards.h" diff --git a/src/train_cmd.h b/src/train_cmd.h new file mode 100644 index 000000000..3dc54678e --- /dev/null +++ b/src/train_cmd.h @@ -0,0 +1,28 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file train_cmd.h Command definitions related to trains. */ + +#ifndef TRAIN_CMD_H +#define TRAIN_CMD_H + +#include "command_type.h" +#include "engine_type.h" +#include "vehicle_type.h" + +CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); +CommandCost CmdSellRailWagon(DoCommandFlag flags, Vehicle *v, uint16 data, uint32 user); + +CommandProc CmdMoveRailVehicle; +CommandProc CmdForceTrainProceed; +CommandProc CmdReverseTrainDirection; + +DEF_CMD_TRAIT(CMD_MOVE_RAIL_VEHICLE, CmdMoveRailVehicle, 0, CMDT_VEHICLE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_FORCE_TRAIN_PROCEED, CmdForceTrainProceed, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_REVERSE_TRAIN_DIRECTION, CmdReverseTrainDirection, 0, CMDT_VEHICLE_MANAGEMENT) + +#endif /* TRAIN_CMD_H */ diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 626f0386f..20943e02e 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -23,6 +23,7 @@ #include "core/random_func.hpp" #include "newgrf_generic.h" #include "date_func.h" +#include "tree_cmd.h" #include "table/strings.h" #include "table/tree_land.h" diff --git a/src/tree_cmd.h b/src/tree_cmd.h new file mode 100644 index 000000000..de8d00179 --- /dev/null +++ b/src/tree_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file tree_cmd.h Command definitions related to tree tiles. */ + +#ifndef TREE_CMD_H +#define TREE_CMD_H + +#include "command_type.h" + +CommandProc CmdPlantTree; + +DEF_CMD_TRAIT(CMD_PLANT_TREE, CmdPlantTree, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) + +#endif /* TREE_CMD_H */ diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 9c77dff9d..4c7836a7a 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -40,6 +40,7 @@ #include "water.h" #include "company_gui.h" #include "station_func.h" +#include "tunnelbridge_cmd.h" #include "table/strings.h" #include "table/bridge_land.h" diff --git a/src/tunnelbridge_cmd.h b/src/tunnelbridge_cmd.h new file mode 100644 index 000000000..58cb9b32a --- /dev/null +++ b/src/tunnelbridge_cmd.h @@ -0,0 +1,21 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file tunnelbridge_cmd.h Command definitions related to tunnels and bridges. */ + +#ifndef TUNNELBRIDGE_CMD_H +#define TUNNELBRIDGE_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildBridge; +CommandProc CmdBuildTunnel; + +DEF_CMD_TRAIT(CMD_BUILD_BRIDGE, CmdBuildBridge, CMD_DEITY | CMD_AUTO | CMD_NO_WATER, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_TUNNEL, CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) + +#endif /* TUNNELBRIDGE_CMD_H */ diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index a36abb59d..472d10459 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -30,6 +30,11 @@ #include "newgrf.h" #include "company_base.h" #include "core/random_func.hpp" +#include "vehicle_cmd.h" +#include "aircraft_cmd.h" +#include "roadveh_cmd.h" +#include "train_cmd.h" +#include "ship_cmd.h" #include <sstream> #include <iomanip> @@ -67,13 +72,6 @@ const StringID _send_to_depot_msg_table[] = { }; -CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); -CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); -CommandCost CmdBuildShip (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); -CommandCost CmdBuildAircraft (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); - -CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text); - /** * Build a vehicle. * @param tile tile of depot where the vehicle is built @@ -192,8 +190,6 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint return value; } -CommandCost CmdSellRailWagon(DoCommandFlag flags, Vehicle *v, uint16 data, uint32 user); - /** * Sell a vehicle. * @param tile unused. diff --git a/src/vehicle_cmd.h b/src/vehicle_cmd.h new file mode 100644 index 000000000..a2d8d62bf --- /dev/null +++ b/src/vehicle_cmd.h @@ -0,0 +1,39 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file vehicle_cmd.h Command definitions for vehicles. */ + +#ifndef VEHICLE_CMD_H +#define VEHICLE_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildVehicle; +CommandProc CmdSellVehicle; +CommandProc CmdRefitVehicle; +CommandProc CmdSendVehicleToDepot; +CommandProc CmdChangeServiceInt; +CommandProc CmdRenameVehicle; +CommandProc CmdCloneVehicle; +CommandProc CmdStartStopVehicle; +CommandProc CmdMassStartStopVehicle; +CommandProc CmdDepotSellAllVehicles; +CommandProc CmdDepotMassAutoReplace; + +DEF_CMD_TRAIT(CMD_BUILD_VEHICLE, CmdBuildVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_SELL_VEHICLE, CmdSellVehicle, CMD_CLIENT_ID, CMDT_VEHICLE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REFIT_VEHICLE, CmdRefitVehicle, 0, CMDT_VEHICLE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_SEND_VEHICLE_TO_DEPOT, CmdSendVehicleToDepot, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_CHANGE_SERVICE_INT, CmdChangeServiceInt, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_RENAME_VEHICLE, CmdRenameVehicle, 0, CMDT_OTHER_MANAGEMENT) +DEF_CMD_TRAIT(CMD_CLONE_VEHICLE, CmdCloneVehicle, CMD_NO_TEST, CMDT_VEHICLE_CONSTRUCTION) // NewGRF callbacks influence building and refitting making it impossible to correctly estimate the cost +DEF_CMD_TRAIT(CMD_START_STOP_VEHICLE, CmdStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_MASS_START_STOP, CmdMassStartStopVehicle, 0, CMDT_VEHICLE_MANAGEMENT) +DEF_CMD_TRAIT(CMD_DEPOT_SELL_ALL_VEHICLES, CmdDepotSellAllVehicles, 0, CMDT_VEHICLE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_DEPOT_MASS_AUTOREPLACE, CmdDepotMassAutoReplace, 0, CMDT_VEHICLE_CONSTRUCTION) + +#endif /* VEHICLE_CMD_H */ diff --git a/src/viewport.cpp b/src/viewport.cpp index b3ccba2b5..3a1004164 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -88,6 +88,7 @@ #include "command_func.h" #include "network/network_func.h" #include "framerate_type.h" +#include "viewport_cmd.h" #include <forward_list> #include <map> diff --git a/src/viewport_cmd.h b/src/viewport_cmd.h new file mode 100644 index 000000000..f549d755e --- /dev/null +++ b/src/viewport_cmd.h @@ -0,0 +1,19 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file viewport_cmd.h Command definitions related to viewports. */ + +#ifndef VIEWPORT_CMD_H +#define VIEWPORT_CMD_H + +#include "command_type.h" + +CommandProc CmdScrollViewport; + +DEF_CMD_TRAIT(CMD_SCROLL_VIEWPORT, CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT) + +#endif /* VIEWPORT_CMD_H */ diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 12f300ac2..152e956b1 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -38,6 +38,7 @@ #include "company_gui.h" #include "newgrf_generic.h" #include "industry.h" +#include "water_cmd.h" #include "table/strings.h" diff --git a/src/water_cmd.h b/src/water_cmd.h new file mode 100644 index 000000000..ccd18f763 --- /dev/null +++ b/src/water_cmd.h @@ -0,0 +1,23 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file water_cmd.h Command definitions related to water tiles. */ + +#ifndef WATER_CMD_H +#define WATER_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildShipDepot; +CommandProc CmdBuildCanal; +CommandProc CmdBuildLock; + +DEF_CMD_TRAIT(CMD_BUILD_SHIP_DEPOT, CmdBuildShipDepot, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_CANAL, CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_LOCK, CmdBuildLock, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) + +#endif /* WATER_CMD_H */ diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 77b9fbd02..d55b8f0eb 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -28,6 +28,7 @@ #include "company_base.h" #include "water.h" #include "company_gui.h" +#include "waypoint_cmd.h" #include "table/strings.h" diff --git a/src/waypoint_cmd.h b/src/waypoint_cmd.h new file mode 100644 index 000000000..09f7ec5d3 --- /dev/null +++ b/src/waypoint_cmd.h @@ -0,0 +1,25 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. + */ + +/** @file waypoint_cmd.h Command definitions related to waypoints. */ + +#ifndef WAYPOINT_CMD_H +#define WAYPOINT_CMD_H + +#include "command_type.h" + +CommandProc CmdBuildRailWaypoint; +CommandProc CmdRemoveFromRailWaypoint; +CommandProc CmdBuildBuoy; +CommandProc CmdRenameWaypoint; + +DEF_CMD_TRAIT(CMD_BUILD_RAIL_WAYPOINT, CmdBuildRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_REMOVE_FROM_RAIL_WAYPOINT, CmdRemoveFromRailWaypoint, 0, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_BUILD_BUOY, CmdBuildBuoy, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION) +DEF_CMD_TRAIT(CMD_RENAME_WAYPOINT, CmdRenameWaypoint, 0, CMDT_OTHER_MANAGEMENT) + +#endif /* WAYPOINT_CMD_H */ |