|
@@ -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<EngineRenew, EngineRenewID, &_EngineRenew_pool> {
|
|
|
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<EngineID> class (helpers.cpp) */
|
|
|
void EngList_Create(EngineList *el); ///< Creates engine list
|
|
|
void EngList_Destroy(EngineList *el); ///< Deallocate and destroy engine list
|