# HG changeset patch # User rubidium # Date 2008-01-07 09:19:53 # Node ID 13ec7a6b1407700ce7ca0310b0c70961895ac059 # Parent 7dc9fca2785ca1e72bc7bd49cb411d5f14d80da1 (svn r11775) -Codechange: move all autoreplace/autorenew functions to a single location. diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -34,6 +34,8 @@ #include "sound_func.h" #include "functions.h" #include "variables.h" +#include "autoreplace_func.h" +#include "autoreplace_gui.h" void Aircraft::UpdateDeltaXY(Direction direction) { diff --git a/src/autoreplace_base.h b/src/autoreplace_base.h new file mode 100644 --- /dev/null +++ b/src/autoreplace_base.h @@ -0,0 +1,38 @@ +/* $Id$ */ + +/** @file autoreplace_base.h Base class for autoreplaces/autorenews. */ + +#ifndef AUTOREPLACE_BASE_H +#define AUTOREPLACE_BASE_H + +#include "oldpool.h" +#include "autoreplace_type.h" + +/** + * Memory pool for engine renew elements. DO NOT USE outside of engine.c. Is + * placed here so the only exception to this rule, the saveload code, can use + * it. + */ +DECLARE_OLD_POOL(EngineRenew, EngineRenew, 3, 8000) + +/** + * Struct to store engine replacements. DO NOT USE outside of engine.c. Is + * placed here so the only exception to this rule, the saveload code, can use + * it. + */ +struct EngineRenew : PoolItem { + EngineID from; + EngineID to; + EngineRenew *next; + GroupID group_id; + + EngineRenew(EngineID from = INVALID_ENGINE, EngineID to = INVALID_ENGINE) : from(from), to(to), next(NULL) {} + ~EngineRenew() { this->from = INVALID_ENGINE; } + + inline bool IsValid() const { return this->from != INVALID_ENGINE; } +}; + +#define FOR_ALL_ENGINE_RENEWS_FROM(er, start) for (er = GetEngineRenew(start); er != NULL; er = (er->index + 1U < GetEngineRenewPoolSize()) ? GetEngineRenew(er->index + 1U) : NULL) if (er->IsValid()) +#define FOR_ALL_ENGINE_RENEWS(er) FOR_ALL_ENGINE_RENEWS_FROM(er, 0) + +#endif /* AUTOREPLACE_BASE_H */ diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -21,6 +21,7 @@ #include "vehicle_func.h" #include "functions.h" #include "variables.h" +#include "autoreplace_func.h" /* * move the cargo from one engine to another if possible diff --git a/src/autoreplace_func.h b/src/autoreplace_func.h new file mode 100644 --- /dev/null +++ b/src/autoreplace_func.h @@ -0,0 +1,103 @@ +/* $Id$ */ + +/** @file autoreplace_func.h Functions related to autoreplacing. */ + +#ifndef AUTOREPLACE_FUNC_H +#define AUTOREPLACE_FUNC_H + +#include "autoreplace_type.h" +#include "player.h" + +/** + * Remove all engine replacement settings for the player. + * @param erl The renewlist for a given player. + * @return The new renewlist for the player. + */ +void RemoveAllEngineReplacement(EngineRenewList *erl); + +/** + * Retrieve the engine replacement in a given renewlist for an original engine type. + * @param erl The renewlist to search in. + * @param engine Engine type to be replaced. + * @return The engine type to replace with, or INVALID_ENGINE if no + * replacement is in the list. + */ +EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group); + +/** + * Add an engine replacement to the given renewlist. + * @param erl The renewlist to add to. + * @param old_engine The original engine type. + * @param new_engine The replacement engine type. + * @param flags The calling command flags. + * @return 0 on success, CMD_ERROR on failure. + */ +CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags); + +/** + * Remove an engine replacement from a given renewlist. + * @param erl The renewlist from which to remove the replacement + * @param engine The original engine type. + * @param flags The calling command flags. + * @return 0 on success, CMD_ERROR on failure. + */ +CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags); + +/** + * Remove all engine replacement settings for the given player. + * @param p Player. + */ +static inline void RemoveAllEngineReplacementForPlayer(Player *p) +{ + RemoveAllEngineReplacement(&p->engine_renew_list); +} + +/** + * Retrieve the engine replacement for the given player and original engine type. + * @param p Player. + * @param engine Engine type. + * @return The engine type to replace with, or INVALID_ENGINE if no + * replacement is in the list. + */ +static inline EngineID EngineReplacementForPlayer(const Player *p, EngineID engine, GroupID group) +{ + return EngineReplacement(p->engine_renew_list, engine, group); +} + +/** + * Check if a player has a replacement set up for the given engine. + * @param p Player. + * @param engine Engine type to be replaced. + * @return true if a replacement was set up, false otherwise. + */ +static inline bool EngineHasReplacementForPlayer(const Player *p, EngineID engine, GroupID group) +{ + return EngineReplacementForPlayer(p, engine, group) != INVALID_ENGINE; +} + +/** + * Add an engine replacement for the player. + * @param p Player. + * @param old_engine The original engine type. + * @param new_engine The replacement engine type. + * @param flags The calling command flags. + * @return 0 on success, CMD_ERROR on failure. + */ +static inline CommandCost AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) +{ + return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); +} + +/** + * Remove an engine replacement for the player. + * @param p Player. + * @param engine The original engine type. + * @param flags The calling command flags. + * @return 0 on success, CMD_ERROR on failure. + */ +static inline CommandCost RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) +{ + return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); +} + +#endif /* AUTOREPLACE_FUNC_H */ diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -17,6 +17,7 @@ #include "strings_func.h" #include "window_func.h" #include "vehicle_func.h" +#include "autoreplace_func.h" static RailType _railtype_selected_in_replace_gui; diff --git a/src/autoreplace_gui.h b/src/autoreplace_gui.h new file mode 100644 --- /dev/null +++ b/src/autoreplace_gui.h @@ -0,0 +1,19 @@ +/* $Id$ */ + +/** @file autoreplace_gui.h Functions related to the autoreplace GUIs*/ + +#ifndef AUTOREPLACE_GUI_H +#define AUTOREPLACE_GUI_H + +#include "vehicle_type.h" + +/** + * When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists + * @param type The type of engine + */ +void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type); +void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g); +void ShowReplaceVehicleWindow(VehicleType vehicletype); +void ShowReplaceGroupVehicleWindow(GroupID group, VehicleType veh); + +#endif /* AUTOREPLACE_GUI_H */ diff --git a/src/autoreplace_type.h b/src/autoreplace_type.h new file mode 100644 --- /dev/null +++ b/src/autoreplace_type.h @@ -0,0 +1,15 @@ +/* $Id$ */ + +/** @file autoreplace_type.h Types related to autoreplacing. */ + +#ifndef AUTOREPLACE_TYPE_H +#define AUTOREPLACE_TYPE_H + +struct EngineRenew; + +/** + * A list to group EngineRenew directives together (such as per-player). + */ +typedef EngineRenew* EngineRenewList; + +#endif /* AUTOREPLACE_TYPE_H */ diff --git a/src/engine.cpp b/src/engine.cpp --- a/src/engine.cpp +++ b/src/engine.cpp @@ -24,6 +24,8 @@ #include "functions.h" #include "window_func.h" #include "date_func.h" +#include "autoreplace_base.h" +#include "autoreplace_gui.h" EngineInfo _engine_info[TOTAL_NUM_ENGINES]; RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES]; diff --git a/src/engine.h b/src/engine.h --- a/src/engine.h +++ b/src/engine.h @@ -262,84 +262,6 @@ static inline const RoadVehicleInfo* Roa return &_road_vehicle_info[e - ROAD_ENGINES_INDEX]; } -/************************************************************************ - * Engine Replacement stuff - ************************************************************************/ - -struct EngineRenew; -/** - * Memory pool for engine renew elements. DO NOT USE outside of engine.c. Is - * placed here so the only exception to this rule, the saveload code, can use - * it. - */ -DECLARE_OLD_POOL(EngineRenew, EngineRenew, 3, 8000) - -/** - * Struct to store engine replacements. DO NOT USE outside of engine.c. Is - * placed here so the only exception to this rule, the saveload code, can use - * it. - */ -struct EngineRenew : PoolItem { - EngineID from; - EngineID to; - EngineRenew *next; - GroupID group_id; - - EngineRenew(EngineID from = INVALID_ENGINE, EngineID to = INVALID_ENGINE) : from(from), to(to), next(NULL) {} - ~EngineRenew() { this->from = INVALID_ENGINE; } - - inline bool IsValid() const { return this->from != INVALID_ENGINE; } -}; - -#define FOR_ALL_ENGINE_RENEWS_FROM(er, start) for (er = GetEngineRenew(start); er != NULL; er = (er->index + 1U < GetEngineRenewPoolSize()) ? GetEngineRenew(er->index + 1U) : NULL) if (er->IsValid()) -#define FOR_ALL_ENGINE_RENEWS(er) FOR_ALL_ENGINE_RENEWS_FROM(er, 0) - - -/** - * A list to group EngineRenew directives together (such as per-player). - */ -typedef EngineRenew* EngineRenewList; - -/** - * Remove all engine replacement settings for the player. - * @param erl The renewlist for a given player. - * @return The new renewlist for the player. - */ -void RemoveAllEngineReplacement(EngineRenewList *erl); - -/** - * Retrieve the engine replacement in a given renewlist for an original engine type. - * @param erl The renewlist to search in. - * @param engine Engine type to be replaced. - * @return The engine type to replace with, or INVALID_ENGINE if no - * replacement is in the list. - */ -EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group); - -/** - * Add an engine replacement to the given renewlist. - * @param erl The renewlist to add to. - * @param old_engine The original engine type. - * @param new_engine The replacement engine type. - * @param flags The calling command flags. - * @return 0 on success, CMD_ERROR on failure. - */ -CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags); - -/** - * Remove an engine replacement from a given renewlist. - * @param erl The renewlist from which to remove the replacement - * @param engine The original engine type. - * @param flags The calling command flags. - * @return 0 on success, CMD_ERROR on failure. - */ -CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags); - -/** When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists - * @param type The type of engine - */ -void AddRemoveEngineFromAutoreplaceAndBuildWindows(VehicleType type); - /* Engine list manipulators - current implementation is only C wrapper of CBlobT class (helpers.cpp) */ void EngList_Create(EngineList *el); ///< Creates engine list void EngList_Destroy(EngineList *el); ///< Deallocate and destroy engine list diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -20,6 +20,8 @@ #include "functions.h" #include "window_func.h" #include "vehicle_func.h" +#include "autoreplace_base.h" +#include "autoreplace_func.h" /** * Update the num engines of a groupID. Decrease the old one and increase the new one diff --git a/src/group_gui.cpp b/src/group_gui.cpp --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -21,6 +21,7 @@ #include "core/alloc_func.hpp" #include "window_func.h" #include "vehicle_func.h" +#include "autoreplace_gui.h" struct Sorting { diff --git a/src/oldloader.cpp b/src/oldloader.cpp --- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -25,6 +25,7 @@ #include "date_func.h" #include "vehicle_func.h" #include "variables.h" +#include "autoreplace_gui.h" enum { HEADER_SIZE = 49, diff --git a/src/player.h b/src/player.h --- a/src/player.h +++ b/src/player.h @@ -15,6 +15,7 @@ #include "engine.h" #include "livery.h" #include "genworld.h" +#include "autoreplace_type.h" struct PlayerEconomyEntry { Money income; @@ -330,50 +331,6 @@ void LoadFromHighScore(); int8 SaveHighScoreValue(const Player *p); int8 SaveHighScoreValueNetwork(); -/* Engine Replacement Functions */ - -/** - * Remove all engine replacement settings for the given player. - * @param p Player. - */ -static inline void RemoveAllEngineReplacementForPlayer(Player *p) { RemoveAllEngineReplacement(&p->engine_renew_list); } - -/** - * Retrieve the engine replacement for the given player and original engine type. - * @param p Player. - * @param engine Engine type. - * @return The engine type to replace with, or INVALID_ENGINE if no - * replacement is in the list. - */ -static inline EngineID EngineReplacementForPlayer(const Player *p, EngineID engine, GroupID group) { return EngineReplacement(p->engine_renew_list, engine, group); } - -/** - * Check if a player has a replacement set up for the given engine. - * @param p Player. - * @param engine Engine type to be replaced. - * @return true if a replacement was set up, false otherwise. - */ -static inline bool EngineHasReplacementForPlayer(const Player *p, EngineID engine, GroupID group) { return EngineReplacementForPlayer(p, engine, group) != INVALID_ENGINE; } - -/** - * Add an engine replacement for the player. - * @param p Player. - * @param old_engine The original engine type. - * @param new_engine The replacement engine type. - * @param flags The calling command flags. - * @return 0 on success, CMD_ERROR on failure. - */ -static inline CommandCost AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); } - -/** - * Remove an engine replacement for the player. - * @param p Player. - * @param engine The original engine type. - * @param flags The calling command flags. - * @return 0 on success, CMD_ERROR on failure. - */ -static inline CommandCost RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); } - /** * Reset the livery schemes to the player's primary colour. * This is used on loading games without livery information and on new player start up. diff --git a/src/players.cpp b/src/players.cpp --- a/src/players.cpp +++ b/src/players.cpp @@ -28,6 +28,8 @@ #include "date_func.h" #include "vehicle_func.h" #include "sound_func.h" +#include "autoreplace_func.h" +#include "autoreplace_gui.h" /** * Sets the local player and updates the patch settings that are set on a diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -39,6 +39,7 @@ #include "vehicle_func.h" #include "sound_func.h" #include "variables.h" +#include "autoreplace_gui.h" static const uint16 _roadveh_images[63] = { diff --git a/src/saveload.cpp b/src/saveload.cpp --- a/src/saveload.cpp +++ b/src/saveload.cpp @@ -31,6 +31,7 @@ #include "functions.h" #include "core/endian_func.hpp" #include "vehicle_base.h" +#include "autoreplace_base.h" #include extern const uint16 SAVEGAME_VERSION = 83; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -35,6 +35,7 @@ #include "vehicle_func.h" #include "sound_func.h" #include "variables.h" +#include "autoreplace_gui.h" static const uint16 _ship_sprites[] = {0x0E5D, 0x0E55, 0x0E65, 0x0E6D}; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -44,6 +44,7 @@ #include "vehicle_func.h" #include "sound_func.h" #include "variables.h" +#include "autoreplace_gui.h" static bool TrainCheckIfLineEnds(Vehicle *v); diff --git a/src/vehicle.cpp b/src/vehicle.cpp --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -44,6 +44,8 @@ #include "vehicle_func.h" #include "sound_func.h" #include "variables.h" +#include "autoreplace_func.h" +#include "autoreplace_gui.h" #define INVALID_COORD (0x7fffffff) #define GEN_HASH(x, y) ((GB((y), 6, 6) << 6) + GB((x), 7, 6)) diff --git a/src/vehicle_func.h b/src/vehicle_func.h --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -76,8 +76,6 @@ void BuildDepotVehicleList(VehicleType t CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id); void VehicleEnterDepot(Vehicle *v); -void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g); - CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs); bool CanBuildVehicleInfrastructure(VehicleType type); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -32,6 +32,7 @@ #include "functions.h" #include "window_func.h" #include "vehicle_func.h" +#include "autoreplace_gui.h" struct Sorting { Listing aircraft; diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -67,9 +67,7 @@ void ShowVehicleListWindow(PlayerID play void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, StationID station); void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type, TileIndex depot_tile); -void ShowReplaceVehicleWindow(VehicleType vehicletype); void DrawSmallOrderList(const Vehicle *v, int x, int y); -void ShowReplaceGroupVehicleWindow(GroupID group, VehicleType veh); void DrawVehicleImage(const Vehicle *v, int x, int y, VehicleID selection, int count, int skip);