00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef COMMAND_TYPE_H
00013 #define COMMAND_TYPE_H
00014
00015 #include "economy_type.h"
00016 #include "strings_type.h"
00017 #include "tile_type.h"
00018
00023 class CommandCost {
00024 ExpensesType expense_type;
00025 Money cost;
00026 StringID message;
00027 bool success;
00028
00029 public:
00033 CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true) {}
00034
00038 CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false) {}
00039
00044 CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true) {}
00045
00051 CommandCost(ExpensesType ex_t, Money cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true) {}
00052
00059 CommandCost AddCost(CommandCost ret);
00060
00066 CommandCost AddCost(Money cost)
00067 {
00068 this->cost += cost;
00069 return *this;
00070 }
00071
00077 CommandCost MultiplyCost(int factor)
00078 {
00079 this->cost *= factor;
00080 return *this;
00081 }
00082
00087 Money GetCost() const
00088 {
00089 return this->cost;
00090 }
00091
00096 ExpensesType GetExpensesType() const
00097 {
00098 return this->expense_type;
00099 }
00100
00104 void SetGlobalErrorMessage() const
00105 {
00106 extern StringID _error_message;
00107 if (this->message != INVALID_STRING_ID) _error_message = this->message;
00108 }
00109
00114 void MakeError(StringID message)
00115 {
00116 assert(message != INVALID_STRING_ID);
00117 this->success = false;
00118 this->message = message;
00119 }
00120
00125 StringID GetErrorMessage() const
00126 {
00127 extern StringID _error_message;
00128
00129 if (this->success) return INVALID_STRING_ID;
00130 if (this->message != INVALID_STRING_ID) return this->message;
00131 return _error_message;
00132 }
00133
00138 bool Succeeded() const
00139 {
00140 return this->success;
00141 }
00142
00147 bool Failed() const
00148 {
00149 return !this->success;
00150 }
00151 };
00152
00163 enum {
00164 CMD_BUILD_RAILROAD_TRACK,
00165 CMD_REMOVE_RAILROAD_TRACK,
00166 CMD_BUILD_SINGLE_RAIL,
00167 CMD_REMOVE_SINGLE_RAIL,
00168 CMD_LANDSCAPE_CLEAR,
00169 CMD_BUILD_BRIDGE,
00170 CMD_BUILD_RAIL_STATION,
00171 CMD_BUILD_TRAIN_DEPOT,
00172 CMD_BUILD_SIGNALS,
00173 CMD_REMOVE_SIGNALS,
00174 CMD_TERRAFORM_LAND,
00175 CMD_PURCHASE_LAND_AREA,
00176 CMD_SELL_LAND_AREA,
00177 CMD_BUILD_TUNNEL,
00178
00179 CMD_REMOVE_FROM_RAIL_STATION,
00180 CMD_CONVERT_RAIL,
00181
00182 CMD_BUILD_RAIL_WAYPOINT,
00183 CMD_RENAME_WAYPOINT,
00184 CMD_REMOVE_FROM_RAIL_WAYPOINT,
00185
00186 CMD_BUILD_ROAD_STOP,
00187 CMD_REMOVE_ROAD_STOP,
00188 CMD_BUILD_LONG_ROAD,
00189 CMD_REMOVE_LONG_ROAD,
00190 CMD_BUILD_ROAD,
00191 CMD_REMOVE_ROAD,
00192 CMD_BUILD_ROAD_DEPOT,
00193
00194 CMD_BUILD_AIRPORT,
00195
00196 CMD_BUILD_DOCK,
00197
00198 CMD_BUILD_SHIP_DEPOT,
00199 CMD_BUILD_BUOY,
00200
00201 CMD_PLANT_TREE,
00202
00203 CMD_BUILD_RAIL_VEHICLE,
00204 CMD_MOVE_RAIL_VEHICLE,
00205
00206 CMD_SELL_RAIL_WAGON,
00207
00208 CMD_SEND_TRAIN_TO_DEPOT,
00209 CMD_FORCE_TRAIN_PROCEED,
00210 CMD_REVERSE_TRAIN_DIRECTION,
00211
00212 CMD_MODIFY_ORDER,
00213 CMD_SKIP_TO_ORDER,
00214 CMD_DELETE_ORDER,
00215 CMD_INSERT_ORDER,
00216
00217 CMD_CHANGE_SERVICE_INT,
00218
00219 CMD_BUILD_INDUSTRY,
00220
00221 CMD_BUILD_COMPANY_HQ,
00222 CMD_SET_COMPANY_MANAGER_FACE,
00223 CMD_SET_COMPANY_COLOUR,
00224
00225 CMD_INCREASE_LOAN,
00226 CMD_DECREASE_LOAN,
00227
00228 CMD_WANT_ENGINE_PREVIEW,
00229
00230 CMD_RENAME_VEHICLE,
00231 CMD_RENAME_ENGINE,
00232 CMD_RENAME_COMPANY,
00233 CMD_RENAME_PRESIDENT,
00234 CMD_RENAME_STATION,
00235
00236 CMD_SELL_AIRCRAFT,
00237 CMD_BUILD_AIRCRAFT,
00238 CMD_SEND_AIRCRAFT_TO_HANGAR,
00239 CMD_REFIT_AIRCRAFT,
00240
00241 CMD_PLACE_SIGN,
00242 CMD_RENAME_SIGN,
00243
00244 CMD_BUILD_ROAD_VEH,
00245 CMD_SELL_ROAD_VEH,
00246 CMD_SEND_ROADVEH_TO_DEPOT,
00247 CMD_TURN_ROADVEH,
00248 CMD_REFIT_ROAD_VEH,
00249
00250 CMD_PAUSE,
00251
00252 CMD_BUY_SHARE_IN_COMPANY,
00253 CMD_SELL_SHARE_IN_COMPANY,
00254 CMD_BUY_COMPANY,
00255
00256 CMD_FOUND_TOWN,
00257 CMD_RENAME_TOWN,
00258 CMD_DO_TOWN_ACTION,
00259
00260 CMD_SELL_SHIP,
00261 CMD_BUILD_SHIP,
00262 CMD_SEND_SHIP_TO_DEPOT,
00263 CMD_REFIT_SHIP,
00264
00265 CMD_ORDER_REFIT,
00266 CMD_CLONE_ORDER,
00267 CMD_CLEAR_AREA,
00268
00269 CMD_MONEY_CHEAT,
00270 CMD_BUILD_CANAL,
00271
00272 CMD_COMPANY_CTRL,
00273 CMD_LEVEL_LAND,
00274
00275 CMD_REFIT_RAIL_VEHICLE,
00276 CMD_RESTORE_ORDER_INDEX,
00277 CMD_BUILD_LOCK,
00278
00279 CMD_BUILD_SIGNAL_TRACK,
00280 CMD_REMOVE_SIGNAL_TRACK,
00281
00282 CMD_GIVE_MONEY,
00283 CMD_CHANGE_SETTING,
00284 CMD_CHANGE_COMPANY_SETTING,
00285
00286 CMD_SET_AUTOREPLACE,
00287
00288 CMD_CLONE_VEHICLE,
00289 CMD_START_STOP_VEHICLE,
00290 CMD_MASS_START_STOP,
00291 CMD_AUTOREPLACE_VEHICLE,
00292 CMD_DEPOT_SELL_ALL_VEHICLES,
00293 CMD_DEPOT_MASS_AUTOREPLACE,
00294
00295 CMD_CREATE_GROUP,
00296 CMD_DELETE_GROUP,
00297 CMD_RENAME_GROUP,
00298 CMD_ADD_VEHICLE_GROUP,
00299 CMD_ADD_SHARED_VEHICLE_GROUP,
00300 CMD_REMOVE_ALL_VEHICLES_GROUP,
00301 CMD_SET_GROUP_REPLACE_PROTECTION,
00302
00303 CMD_MOVE_ORDER,
00304 CMD_CHANGE_TIMETABLE,
00305 CMD_SET_VEHICLE_ON_TIME,
00306 CMD_AUTOFILL_TIMETABLE,
00307 CMD_SET_TIMETABLE_START,
00308 };
00309
00315 enum DoCommandFlag {
00316 DC_NONE = 0x000,
00317 DC_EXEC = 0x001,
00318 DC_AUTO = 0x002,
00319 DC_QUERY_COST = 0x004,
00320 DC_NO_WATER = 0x008,
00321 DC_NO_RAIL_OVERLAP = 0x010,
00322 DC_NO_TEST_TOWN_RATING = 0x020,
00323 DC_BANKRUPT = 0x040,
00324 DC_AUTOREPLACE = 0x080,
00325 DC_ALL_TILES = 0x100,
00326 DC_NO_MODIFY_TOWN_RATING = 0x200,
00327 };
00328 DECLARE_ENUM_AS_BIT_SET(DoCommandFlag);
00329
00339 #define CMD_MSG(x) ((x) << 16)
00340
00346 enum {
00347 CMD_NETWORK_COMMAND = 0x0100,
00348 CMD_NO_TEST_IF_IN_NETWORK = 0x0200,
00349 CMD_FLAGS_MASK = 0xFF00,
00350 CMD_ID_MASK = 0x00FF,
00351 };
00352
00358 enum {
00359 CMD_SERVER = 0x01,
00360 CMD_SPECTATOR = 0x02,
00361 CMD_OFFLINE = 0x04,
00362 CMD_AUTO = 0x08,
00363 CMD_ALL_TILES = 0x10,
00364 CMD_NO_TEST = 0x20,
00365 CMD_NO_WATER = 0x40,
00366 };
00367
00386 typedef CommandCost CommandProc(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text);
00387
00394 struct Command {
00395 CommandProc *proc;
00396 byte flags;
00397 };
00398
00412 typedef void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
00413
00417 struct CommandContainer {
00418 TileIndex tile;
00419 uint32 p1;
00420 uint32 p2;
00421 uint32 cmd;
00422 CommandCallback *callback;
00423 char text[80];
00424 };
00425
00426 #endif