00001
00002
00005 #ifndef COMMAND_TYPE_H
00006 #define COMMAND_TYPE_H
00007
00008 #include "economy_type.h"
00009 #include "strings_type.h"
00010 #include "tile_type.h"
00011
00016 class CommandCost {
00017 ExpensesType expense_type;
00018 Money cost;
00019 StringID message;
00020 bool success;
00021
00022 public:
00026 CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true) {}
00027
00031 CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false) {}
00032
00037 CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true) {}
00038
00044 CommandCost(ExpensesType ex_t, Money cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true) {}
00045
00052 CommandCost AddCost(CommandCost ret);
00053
00059 CommandCost AddCost(Money cost)
00060 {
00061 this->cost += cost;
00062 return *this;
00063 }
00064
00070 CommandCost MultiplyCost(int factor)
00071 {
00072 this->cost *= factor;
00073 return *this;
00074 }
00075
00080 Money GetCost() const
00081 {
00082 return this->cost;
00083 }
00084
00089 ExpensesType GetExpensesType() const
00090 {
00091 return this->expense_type;
00092 }
00093
00097 void SetGlobalErrorMessage() const
00098 {
00099 extern StringID _error_message;
00100 if (this->message != INVALID_STRING_ID) _error_message = this->message;
00101 }
00102
00107 StringID GetErrorMessage() const
00108 {
00109 extern StringID _error_message;
00110
00111 if (this->success) return INVALID_STRING_ID;
00112 if (this->message != INVALID_STRING_ID) return this->message;
00113 return _error_message;
00114 }
00115
00120 bool Succeeded() const
00121 {
00122 return this->success;
00123 }
00124
00129 bool Failed() const
00130 {
00131 return !this->success;
00132 }
00133 };
00134
00145 enum {
00146 CMD_BUILD_RAILROAD_TRACK,
00147 CMD_REMOVE_RAILROAD_TRACK,
00148 CMD_BUILD_SINGLE_RAIL,
00149 CMD_REMOVE_SINGLE_RAIL,
00150 CMD_LANDSCAPE_CLEAR,
00151 CMD_BUILD_BRIDGE,
00152 CMD_BUILD_RAILROAD_STATION,
00153 CMD_BUILD_TRAIN_DEPOT,
00154 CMD_BUILD_SIGNALS,
00155 CMD_REMOVE_SIGNALS,
00156 CMD_TERRAFORM_LAND,
00157 CMD_PURCHASE_LAND_AREA,
00158 CMD_SELL_LAND_AREA,
00159 CMD_BUILD_TUNNEL,
00160
00161 CMD_REMOVE_FROM_RAILROAD_STATION,
00162 CMD_CONVERT_RAIL,
00163
00164 CMD_BUILD_TRAIN_WAYPOINT,
00165 CMD_RENAME_WAYPOINT,
00166 CMD_REMOVE_TRAIN_WAYPOINT,
00167
00168 CMD_BUILD_ROAD_STOP,
00169 CMD_REMOVE_ROAD_STOP,
00170 CMD_BUILD_LONG_ROAD,
00171 CMD_REMOVE_LONG_ROAD,
00172 CMD_BUILD_ROAD,
00173 CMD_REMOVE_ROAD,
00174 CMD_BUILD_ROAD_DEPOT,
00175
00176 CMD_BUILD_AIRPORT,
00177
00178 CMD_BUILD_DOCK,
00179
00180 CMD_BUILD_SHIP_DEPOT,
00181 CMD_BUILD_BUOY,
00182
00183 CMD_PLANT_TREE,
00184
00185 CMD_BUILD_RAIL_VEHICLE,
00186 CMD_MOVE_RAIL_VEHICLE,
00187
00188 CMD_SELL_RAIL_WAGON,
00189
00190 CMD_SEND_TRAIN_TO_DEPOT,
00191 CMD_FORCE_TRAIN_PROCEED,
00192 CMD_REVERSE_TRAIN_DIRECTION,
00193
00194 CMD_MODIFY_ORDER,
00195 CMD_SKIP_TO_ORDER,
00196 CMD_DELETE_ORDER,
00197 CMD_INSERT_ORDER,
00198
00199 CMD_CHANGE_SERVICE_INT,
00200
00201 CMD_BUILD_INDUSTRY,
00202
00203 CMD_BUILD_COMPANY_HQ,
00204 CMD_SET_COMPANY_MANAGER_FACE,
00205 CMD_SET_COMPANY_COLOUR,
00206
00207 CMD_INCREASE_LOAN,
00208 CMD_DECREASE_LOAN,
00209
00210 CMD_WANT_ENGINE_PREVIEW,
00211
00212 CMD_RENAME_VEHICLE,
00213 CMD_RENAME_ENGINE,
00214 CMD_RENAME_COMPANY,
00215 CMD_RENAME_PRESIDENT,
00216 CMD_RENAME_STATION,
00217
00218 CMD_SELL_AIRCRAFT,
00219 CMD_BUILD_AIRCRAFT,
00220 CMD_SEND_AIRCRAFT_TO_HANGAR,
00221 CMD_REFIT_AIRCRAFT,
00222
00223 CMD_PLACE_SIGN,
00224 CMD_RENAME_SIGN,
00225
00226 CMD_BUILD_ROAD_VEH,
00227 CMD_SELL_ROAD_VEH,
00228 CMD_SEND_ROADVEH_TO_DEPOT,
00229 CMD_TURN_ROADVEH,
00230 CMD_REFIT_ROAD_VEH,
00231
00232 CMD_PAUSE,
00233
00234 CMD_BUY_SHARE_IN_COMPANY,
00235 CMD_SELL_SHARE_IN_COMPANY,
00236 CMD_BUY_COMPANY,
00237
00238 CMD_BUILD_TOWN,
00239
00240 CMD_RENAME_TOWN,
00241 CMD_DO_TOWN_ACTION,
00242
00243 CMD_SELL_SHIP,
00244 CMD_BUILD_SHIP,
00245 CMD_SEND_SHIP_TO_DEPOT,
00246 CMD_REFIT_SHIP,
00247
00248 CMD_ORDER_REFIT,
00249 CMD_CLONE_ORDER,
00250 CMD_CLEAR_AREA,
00251
00252 CMD_MONEY_CHEAT,
00253 CMD_BUILD_CANAL,
00254
00255 CMD_COMPANY_CTRL,
00256 CMD_LEVEL_LAND,
00257
00258 CMD_REFIT_RAIL_VEHICLE,
00259 CMD_RESTORE_ORDER_INDEX,
00260 CMD_BUILD_LOCK,
00261
00262 CMD_BUILD_SIGNAL_TRACK,
00263 CMD_REMOVE_SIGNAL_TRACK,
00264
00265 CMD_GIVE_MONEY,
00266 CMD_CHANGE_SETTING,
00267
00268 CMD_SET_AUTOREPLACE,
00269
00270 CMD_CLONE_VEHICLE,
00271 CMD_START_STOP_VEHICLE,
00272 CMD_MASS_START_STOP,
00273 CMD_AUTOREPLACE_VEHICLE,
00274 CMD_DEPOT_SELL_ALL_VEHICLES,
00275 CMD_DEPOT_MASS_AUTOREPLACE,
00276
00277 CMD_CREATE_GROUP,
00278 CMD_DELETE_GROUP,
00279 CMD_RENAME_GROUP,
00280 CMD_ADD_VEHICLE_GROUP,
00281 CMD_ADD_SHARED_VEHICLE_GROUP,
00282 CMD_REMOVE_ALL_VEHICLES_GROUP,
00283 CMD_SET_GROUP_REPLACE_PROTECTION,
00284
00285 CMD_MOVE_ORDER,
00286 CMD_CHANGE_TIMETABLE,
00287 CMD_SET_VEHICLE_ON_TIME,
00288 CMD_AUTOFILL_TIMETABLE,
00289 };
00290
00296 enum DoCommandFlag {
00297 DC_NONE = 0x000,
00298 DC_EXEC = 0x001,
00299 DC_AUTO = 0x002,
00300 DC_QUERY_COST = 0x004,
00301 DC_NO_WATER = 0x008,
00302 DC_NO_RAIL_OVERLAP = 0x010,
00303 DC_NO_TEST_TOWN_RATING = 0x020,
00304 DC_BANKRUPT = 0x040,
00305 DC_AUTOREPLACE = 0x080,
00306 DC_ALL_TILES = 0x100,
00307 DC_NO_MODIFY_TOWN_RATING = 0x200,
00308 };
00309 DECLARE_ENUM_AS_BIT_SET(DoCommandFlag);
00310
00320 #define CMD_MSG(x) ((x) << 16)
00321
00327 enum {
00328 CMD_NETWORK_COMMAND = 0x0100,
00329 CMD_NO_TEST_IF_IN_NETWORK = 0x0200,
00330 CMD_FLAGS_MASK = 0xFF00,
00331 CMD_ID_MASK = 0x00FF,
00332 };
00333
00339 enum {
00340 CMD_SERVER = 0x01,
00341 CMD_SPECTATOR = 0x02,
00342 CMD_OFFLINE = 0x04,
00343 CMD_AUTO = 0x08,
00344 CMD_ALL_TILES = 0x10,
00345 CMD_NO_TEST = 0x20,
00346 CMD_NO_WATER = 0x40,
00347 };
00348
00367 typedef CommandCost CommandProc(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text);
00368
00375 struct Command {
00376 CommandProc *proc;
00377 byte flags;
00378 };
00379
00393 typedef void CommandCallback(bool success, TileIndex tile, uint32 p1, uint32 p2);
00394
00398 struct CommandContainer {
00399 TileIndex tile;
00400 uint32 p1;
00401 uint32 p2;
00402 uint32 cmd;
00403 CommandCallback *callback;
00404 char text[80];
00405 };
00406
00407 #endif