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 uint textref_stack_size;
00029
00030 static uint32 textref_stack[16];
00031
00032 public:
00036 CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_size(0) {}
00037
00041 explicit CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false), textref_stack_size(0) {}
00042
00047 explicit CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_size(0) {}
00048
00054 CommandCost(ExpensesType ex_t, const Money &cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true), textref_stack_size(0) {}
00055
00056
00061 inline void AddCost(const Money &cost)
00062 {
00063 this->cost += cost;
00064 }
00065
00066 void AddCost(const CommandCost &cmd_cost);
00067
00072 inline void MultiplyCost(int factor)
00073 {
00074 this->cost *= factor;
00075 }
00076
00081 inline Money GetCost() const
00082 {
00083 return this->cost;
00084 }
00085
00090 inline ExpensesType GetExpensesType() const
00091 {
00092 return this->expense_type;
00093 }
00094
00099 void MakeError(StringID message)
00100 {
00101 assert(message != INVALID_STRING_ID);
00102 this->success = false;
00103 this->message = message;
00104 }
00105
00106 void UseTextRefStack(uint num_registers);
00107
00112 uint GetTextRefStackSize() const
00113 {
00114 return this->textref_stack_size;
00115 }
00116
00121 const uint32 *GetTextRefStack() const
00122 {
00123 return textref_stack;
00124 }
00125
00130 StringID GetErrorMessage() const
00131 {
00132 if (this->success) return INVALID_STRING_ID;
00133 return this->message;
00134 }
00135
00140 inline bool Succeeded() const
00141 {
00142 return this->success;
00143 }
00144
00149 inline bool Failed() const
00150 {
00151 return !this->success;
00152 }
00153 };
00154
00165 enum Commands {
00166 CMD_BUILD_RAILROAD_TRACK,
00167 CMD_REMOVE_RAILROAD_TRACK,
00168 CMD_BUILD_SINGLE_RAIL,
00169 CMD_REMOVE_SINGLE_RAIL,
00170 CMD_LANDSCAPE_CLEAR,
00171 CMD_BUILD_BRIDGE,
00172 CMD_BUILD_RAIL_STATION,
00173 CMD_BUILD_TRAIN_DEPOT,
00174 CMD_BUILD_SIGNALS,
00175 CMD_REMOVE_SIGNALS,
00176 CMD_TERRAFORM_LAND,
00177 CMD_BUILD_OBJECT,
00178 CMD_BUILD_TUNNEL,
00179
00180 CMD_REMOVE_FROM_RAIL_STATION,
00181 CMD_CONVERT_RAIL,
00182
00183 CMD_BUILD_RAIL_WAYPOINT,
00184 CMD_RENAME_WAYPOINT,
00185 CMD_REMOVE_FROM_RAIL_WAYPOINT,
00186
00187 CMD_BUILD_ROAD_STOP,
00188 CMD_REMOVE_ROAD_STOP,
00189 CMD_BUILD_LONG_ROAD,
00190 CMD_REMOVE_LONG_ROAD,
00191 CMD_BUILD_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_VEHICLE,
00204 CMD_SELL_VEHICLE,
00205 CMD_REFIT_VEHICLE,
00206 CMD_SEND_VEHICLE_TO_DEPOT,
00207
00208 CMD_MOVE_RAIL_VEHICLE,
00209 CMD_FORCE_TRAIN_PROCEED,
00210 CMD_REVERSE_TRAIN_DIRECTION,
00211
00212 CMD_CLEAR_ORDER_BACKUP,
00213 CMD_MODIFY_ORDER,
00214 CMD_SKIP_TO_ORDER,
00215 CMD_DELETE_ORDER,
00216 CMD_INSERT_ORDER,
00217
00218 CMD_CHANGE_SERVICE_INT,
00219
00220 CMD_BUILD_INDUSTRY,
00221
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 CMD_RENAME_DEPOT,
00236
00237 CMD_PLACE_SIGN,
00238 CMD_RENAME_SIGN,
00239
00240 CMD_TURN_ROADVEH,
00241
00242 CMD_PAUSE,
00243
00244 CMD_BUY_SHARE_IN_COMPANY,
00245 CMD_SELL_SHARE_IN_COMPANY,
00246 CMD_BUY_COMPANY,
00247
00248 CMD_FOUND_TOWN,
00249 CMD_RENAME_TOWN,
00250 CMD_DO_TOWN_ACTION,
00251 CMD_TOWN_CARGO_GOAL,
00252 CMD_TOWN_GROWTH_RATE,
00253 CMD_TOWN_SET_TEXT,
00254 CMD_EXPAND_TOWN,
00255 CMD_DELETE_TOWN,
00256
00257 CMD_ORDER_REFIT,
00258 CMD_CLONE_ORDER,
00259 CMD_CLEAR_AREA,
00260
00261 CMD_MONEY_CHEAT,
00262 CMD_CHANGE_BANK_BALANCE,
00263 CMD_BUILD_CANAL,
00264
00265 CMD_CREATE_SUBSIDY,
00266 CMD_COMPANY_CTRL,
00267 CMD_CUSTOM_NEWS_ITEM,
00268 CMD_CREATE_GOAL,
00269 CMD_REMOVE_GOAL,
00270 CMD_SET_GOAL_TEXT,
00271 CMD_SET_GOAL_PROGRESS,
00272 CMD_SET_GOAL_COMPLETED,
00273 CMD_GOAL_QUESTION,
00274 CMD_GOAL_QUESTION_ANSWER,
00275 CMD_CREATE_STORY_PAGE,
00276 CMD_CREATE_STORY_PAGE_ELEMENT,
00277 CMD_UPDATE_STORY_PAGE_ELEMENT,
00278 CMD_SET_STORY_PAGE_TITLE,
00279 CMD_SHOW_STORY_PAGE,
00280 CMD_REMOVE_STORY_PAGE,
00281 CMD_LEVEL_LAND,
00282
00283 CMD_BUILD_LOCK,
00284
00285 CMD_BUILD_SIGNAL_TRACK,
00286 CMD_REMOVE_SIGNAL_TRACK,
00287
00288 CMD_GIVE_MONEY,
00289 CMD_CHANGE_SETTING,
00290 CMD_CHANGE_COMPANY_SETTING,
00291
00292 CMD_SET_AUTOREPLACE,
00293
00294 CMD_CLONE_VEHICLE,
00295 CMD_START_STOP_VEHICLE,
00296 CMD_MASS_START_STOP,
00297 CMD_AUTOREPLACE_VEHICLE,
00298 CMD_DEPOT_SELL_ALL_VEHICLES,
00299 CMD_DEPOT_MASS_AUTOREPLACE,
00300
00301 CMD_CREATE_GROUP,
00302 CMD_DELETE_GROUP,
00303 CMD_RENAME_GROUP,
00304 CMD_ADD_VEHICLE_GROUP,
00305 CMD_ADD_SHARED_VEHICLE_GROUP,
00306 CMD_REMOVE_ALL_VEHICLES_GROUP,
00307 CMD_SET_GROUP_REPLACE_PROTECTION,
00308
00309 CMD_MOVE_ORDER,
00310 CMD_CHANGE_TIMETABLE,
00311 CMD_SET_VEHICLE_ON_TIME,
00312 CMD_AUTOFILL_TIMETABLE,
00313 CMD_SET_TIMETABLE_START,
00314
00315 CMD_OPEN_CLOSE_AIRPORT,
00316
00317 CMD_END,
00318 };
00319
00325 enum DoCommandFlag {
00326 DC_NONE = 0x000,
00327 DC_EXEC = 0x001,
00328 DC_AUTO = 0x002,
00329 DC_QUERY_COST = 0x004,
00330 DC_NO_WATER = 0x008,
00331 DC_NO_RAIL_OVERLAP = 0x010,
00332 DC_NO_TEST_TOWN_RATING = 0x020,
00333 DC_BANKRUPT = 0x040,
00334 DC_AUTOREPLACE = 0x080,
00335 DC_NO_CARGO_CAP_CHECK = 0x100,
00336 DC_ALL_TILES = 0x200,
00337 DC_NO_MODIFY_TOWN_RATING = 0x400,
00338 DC_FORCE_CLEAR_TILE = 0x800,
00339 };
00340 DECLARE_ENUM_AS_BIT_SET(DoCommandFlag)
00341
00342
00351 #define CMD_MSG(x) ((x) << 16)
00352
00358 enum FlaggedCommands {
00359 CMD_NETWORK_COMMAND = 0x0100,
00360 CMD_FLAGS_MASK = 0xFF00,
00361 CMD_ID_MASK = 0x00FF,
00362 };
00363
00369 enum CommandFlags {
00370 CMD_SERVER = 0x001,
00371 CMD_SPECTATOR = 0x002,
00372 CMD_OFFLINE = 0x004,
00373 CMD_AUTO = 0x008,
00374 CMD_ALL_TILES = 0x010,
00375 CMD_NO_TEST = 0x020,
00376 CMD_NO_WATER = 0x040,
00377 CMD_CLIENT_ID = 0x080,
00378 CMD_DEITY = 0x100,
00379 CMD_STR_CTRL = 0x200,
00380 };
00381 DECLARE_ENUM_AS_BIT_SET(CommandFlags)
00382
00383
00384 enum CommandType {
00385 CMDT_LANDSCAPE_CONSTRUCTION,
00386 CMDT_VEHICLE_CONSTRUCTION,
00387 CMDT_MONEY_MANAGEMENT,
00388 CMDT_VEHICLE_MANAGEMENT,
00389 CMDT_ROUTE_MANAGEMENT,
00390 CMDT_OTHER_MANAGEMENT,
00391 CMDT_COMPANY_SETTING,
00392 CMDT_SERVER_SETTING,
00393 CMDT_CHEAT,
00394
00395 CMDT_END,
00396 };
00397
00399 enum CommandPauseLevel {
00400 CMDPL_NO_ACTIONS,
00401 CMDPL_NO_CONSTRUCTION,
00402 CMDPL_NO_LANDSCAPING,
00403 CMDPL_ALL_ACTIONS,
00404 };
00405
00424 typedef CommandCost CommandProc(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text);
00425
00432 struct Command {
00433 CommandProc *proc;
00434 const char *name;
00435 CommandFlags flags;
00436 CommandType type;
00437 };
00438
00452 typedef void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
00453
00457 struct CommandContainer {
00458 TileIndex tile;
00459 uint32 p1;
00460 uint32 p2;
00461 uint32 cmd;
00462 CommandCallback *callback;
00463 char text[32 * MAX_CHAR_LENGTH];
00464 };
00465
00466 #endif