mirror of https://github.com/OpenTTD/OpenTTD
Change: Add variant property to engines.
parent
c8cc61d889
commit
d7f561a400
|
@ -73,6 +73,7 @@ Engine::Engine(VehicleType type, EngineID base)
|
||||||
this->grf_prop.local_id = base;
|
this->grf_prop.local_id = base;
|
||||||
this->list_position = base;
|
this->list_position = base;
|
||||||
this->preview_company = INVALID_COMPANY;
|
this->preview_company = INVALID_COMPANY;
|
||||||
|
this->display_last_variant = INVALID_ENGINE;
|
||||||
|
|
||||||
/* Check if this base engine is within the original engine data range */
|
/* Check if this base engine is within the original engine data range */
|
||||||
if (base >= _engine_counts[type]) {
|
if (base >= _engine_counts[type]) {
|
||||||
|
@ -93,6 +94,8 @@ Engine::Engine(VehicleType type, EngineID base)
|
||||||
}
|
}
|
||||||
/* Set cargo aging period to the default value. */
|
/* Set cargo aging period to the default value. */
|
||||||
this->info.cargo_age_period = CARGO_AGING_TICKS;
|
this->info.cargo_age_period = CARGO_AGING_TICKS;
|
||||||
|
/* Not a variant */
|
||||||
|
this->info.variant_id = INVALID_ENGINE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,15 @@ struct WagonOverride {
|
||||||
const SpriteGroup *group;
|
const SpriteGroup *group;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Flags used client-side in the purchase/autorenew engine list. */
|
||||||
|
enum class EngineDisplayFlags : byte {
|
||||||
|
None = 0, ///< No flag set.
|
||||||
|
HasVariants = (1U << 0), ///< Set if engine has variants.
|
||||||
|
IsFolded = (1U << 1), ///< Set if display of variants should be folded (hidden).
|
||||||
|
Shaded = (1U << 2), ///< Set if engine should be masked.
|
||||||
|
};
|
||||||
|
DECLARE_ENUM_AS_BIT_SET(EngineDisplayFlags)
|
||||||
|
|
||||||
typedef Pool<Engine, EngineID, 64, 64000> EnginePool;
|
typedef Pool<Engine, EngineID, 64, 64000> EnginePool;
|
||||||
extern EnginePool _engine_pool;
|
extern EnginePool _engine_pool;
|
||||||
|
|
||||||
|
@ -45,6 +54,9 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
|
||||||
uint8 original_image_index; ///< Original vehicle image index, thus the image index of the overridden vehicle
|
uint8 original_image_index; ///< Original vehicle image index, thus the image index of the overridden vehicle
|
||||||
VehicleType type; ///< %Vehicle type, ie #VEH_ROAD, #VEH_TRAIN, etc.
|
VehicleType type; ///< %Vehicle type, ie #VEH_ROAD, #VEH_TRAIN, etc.
|
||||||
|
|
||||||
|
EngineDisplayFlags display_flags; ///< NOSAVE client-side-only display flags for build engine list.
|
||||||
|
EngineID display_last_variant; ///< NOSAVE client-side-only last variant selected.
|
||||||
|
|
||||||
EngineInfo info;
|
EngineInfo info;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
|
|
|
@ -145,6 +145,7 @@ struct EngineInfo {
|
||||||
int8 retire_early; ///< Number of years early to retire vehicle
|
int8 retire_early; ///< Number of years early to retire vehicle
|
||||||
StringID string_id; ///< Default name of engine
|
StringID string_id; ///< Default name of engine
|
||||||
uint16 cargo_age_period; ///< Number of ticks before carried cargo is aged.
|
uint16 cargo_age_period; ///< Number of ticks before carried cargo is aged.
|
||||||
|
EngineID variant_id; ///< Engine variant ID. If set, will be treated specially in purchase lists.
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1334,6 +1334,10 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
|
||||||
rvi->curve_speed_mod = buf->ReadWord();
|
rvi->curve_speed_mod = buf->ReadWord();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x2F: // Engine variant
|
||||||
|
ei->variant_id = GetNewEngineID(_cur.grffile, VEH_TRAIN, buf->ReadWord());
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
||||||
break;
|
break;
|
||||||
|
@ -1528,6 +1532,10 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 0x26: // Engine variant
|
||||||
|
ei->variant_id = GetNewEngineID(_cur.grffile, VEH_ROAD, buf->ReadWord());
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
||||||
break;
|
break;
|
||||||
|
@ -1700,6 +1708,10 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 0x20: // Engine variant
|
||||||
|
ei->variant_id = GetNewEngineID(_cur.grffile, VEH_SHIP, buf->ReadWord());
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
||||||
break;
|
break;
|
||||||
|
@ -1854,6 +1866,10 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int
|
||||||
avi->max_range = buf->ReadWord();
|
avi->max_range = buf->ReadWord();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x20: // Engine variant
|
||||||
|
ei->variant_id = GetNewEngineID(_cur.grffile, VEH_AIRCRAFT, buf->ReadWord());
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
ret = CommonVehicleChangeInfo(ei, prop, buf);
|
||||||
break;
|
break;
|
||||||
|
@ -8983,6 +8999,11 @@ static void FinaliseEngineArray()
|
||||||
|
|
||||||
if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
|
if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue;
|
||||||
|
|
||||||
|
/* Set appropriate flags on variant engine */
|
||||||
|
if (e->info.variant_id != INVALID_ENGINE) {
|
||||||
|
Engine::Get(e->info.variant_id)->display_flags |= EngineDisplayFlags::HasVariants;
|
||||||
|
}
|
||||||
|
|
||||||
/* Skip wagons, there livery is defined via the engine */
|
/* Skip wagons, there livery is defined via the engine */
|
||||||
if (e->type != VEH_TRAIN || e->u.rail.railveh_type != RAILVEH_WAGON) {
|
if (e->type != VEH_TRAIN || e->u.rail.railveh_type != RAILVEH_WAGON) {
|
||||||
LiveryScheme ls = GetEngineLiveryScheme(e->index, INVALID_ENGINE, nullptr);
|
LiveryScheme ls = GetEngineLiveryScheme(e->index, INVALID_ENGINE, nullptr);
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* @param f Bitmask of the climates
|
* @param f Bitmask of the climates
|
||||||
* @note the 5 between b and f is the load amount
|
* @note the 5 between b and f is the load amount
|
||||||
*/
|
*/
|
||||||
#define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
|
#define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the properties of a multiple-unit train into the EngineInfo struct.
|
* Writes the properties of a multiple-unit train into the EngineInfo struct.
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
* @param f Bitmask of the climates
|
* @param f Bitmask of the climates
|
||||||
* @note the 5 between b and f is the load amount
|
* @note the 5 between b and f is the load amount
|
||||||
*/
|
*/
|
||||||
#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
|
#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the properties of a train carriage into the EngineInfo struct.
|
* Writes the properties of a train carriage into the EngineInfo struct.
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
* @see MT
|
* @see MT
|
||||||
* @note the 5 between b and f is the load amount
|
* @note the 5 between b and f is the load amount
|
||||||
*/
|
*/
|
||||||
#define MW(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
|
#define MW(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the properties of a road vehicle into the EngineInfo struct.
|
* Writes the properties of a road vehicle into the EngineInfo struct.
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
* @param f Bitmask of the climates
|
* @param f Bitmask of the climates
|
||||||
* @note the 5 between b and f is the load amount
|
* @note the 5 between b and f is the load amount
|
||||||
*/
|
*/
|
||||||
#define MR(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
|
#define MR(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the properties of a ship into the EngineInfo struct.
|
* Writes the properties of a ship into the EngineInfo struct.
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
* @param f Bitmask of the climates
|
* @param f Bitmask of the climates
|
||||||
* @note the 10 between b and f is the load amount
|
* @note the 10 between b and f is the load amount
|
||||||
*/
|
*/
|
||||||
#define MS(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
|
#define MS(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 10, f, e, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the properties of an aeroplane into the EngineInfo struct.
|
* Writes the properties of an aeroplane into the EngineInfo struct.
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
* @param e Bitmask of the climates
|
* @param e Bitmask of the climates
|
||||||
* @note the 20 between b and e is the load amount
|
* @note the 20 between b and e is the load amount
|
||||||
*/
|
*/
|
||||||
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, CT_INVALID, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS }
|
#define MA(a, b, c, d, e) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 20, e, CT_INVALID, 0, 8, 0, 0, 0, STR_EMPTY, CARGO_AGING_TICKS, INVALID_ENGINE }
|
||||||
|
|
||||||
/* Climates
|
/* Climates
|
||||||
* T = Temperate
|
* T = Temperate
|
||||||
|
|
Loading…
Reference in New Issue