From 460d24fd83e6245684c2e4c7466382c2b93a02e0 Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 28 May 2011 09:46:37 +0000 Subject: (svn r22506) -Feature [FS#4625]: Make the transparency options for industries also affect the effect vehicles created by industries. --- src/effectvehicle.cpp | 26 ++++++++++++++++++++++++++ src/effectvehicle_base.h | 1 + src/transparency.h | 1 + src/vehicle.cpp | 12 +++++++++++- 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp index 186a6d787..d9ba92c2d 100644 --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -565,6 +565,23 @@ static EffectTickProc * const _effect_tick_procs[] = { }; assert_compile(lengthof(_effect_tick_procs) == EV_END); +/** Transparency options affecting the effects. */ +static const TransparencyOption _effect_transparency_options[] = { + TO_INDUSTRIES, // EV_CHIMNEY_SMOKE + TO_INVALID, // EV_STEAM_SMOKE + TO_INVALID, // EV_DIESEL_SMOKE + TO_INVALID, // EV_ELECTRIC_SPARK + TO_INVALID, // EV_CRASH_SMOKE + TO_INVALID, // EV_EXPLOSION_LARGE + TO_INVALID, // EV_BREAKDOWN_SMOKE + TO_INVALID, // EV_EXPLOSION_SMALL + TO_INVALID, // EV_BULLDOZER + TO_INDUSTRIES, // EV_BUBBLE + TO_INVALID, // EV_BREAKDOWN_SMOKE_AIRCRAFT + TO_INDUSTRIES, // EV_COPPER_MINE_SMOKE +}; +assert_compile(lengthof(_effect_transparency_options) == EV_END); + /** * Create an effect vehicle at a particular location. @@ -637,3 +654,12 @@ void EffectVehicle::UpdateDeltaXY(Direction direction) this->y_extent = 1; this->z_extent = 1; } + +/** + * Determines the transparency option affecting the effect. + * @return Transparency option, or TO_INVALID if none. + */ +TransparencyOption EffectVehicle::GetTransparencyOption() const +{ + return _effect_transparency_options[this->subtype]; +} diff --git a/src/effectvehicle_base.h b/src/effectvehicle_base.h index 4cd31988b..c16ee5f53 100644 --- a/src/effectvehicle_base.h +++ b/src/effectvehicle_base.h @@ -33,6 +33,7 @@ struct EffectVehicle : public SpecializedVehicle { void UpdateDeltaXY(Direction direction); bool Tick(); + TransparencyOption GetTransparencyOption() const; }; /** diff --git a/src/transparency.h b/src/transparency.h index 153574db4..ab6f9a6f3 100644 --- a/src/transparency.h +++ b/src/transparency.h @@ -32,6 +32,7 @@ enum TransparencyOption { TO_CATENARY, ///< catenary TO_LOADING, ///< loading indicators TO_END, + TO_INVALID, ///< Invalid transparency option }; typedef uint TransparencyOptionBits; ///< transparency option bits diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 397f60f60..0ac745b4a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -899,8 +899,18 @@ static void DoDrawVehicle(const Vehicle *v) if (v->vehstatus & VS_DEFPAL) pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); + /* Check whether the vehicle shall be transparent due to the game state */ + bool shadowed = (v->vehstatus & VS_SHADOW); + + if (v->type == VEH_EFFECT) { + /* Check whether the vehicle shall be transparent/invisible due to GUI settings. + * However, transparent smoke and bubbles look weird, so always hide them. */ + TransparencyOption to = EffectVehicle::From(v)->GetTransparencyOption(); + if (to != TO_INVALID && (IsTransparencySet(to) || IsInvisibilitySet(to))) return; + } + AddSortableSpriteToDraw(image, pal, v->x_pos + v->x_offs, v->y_pos + v->y_offs, - v->x_extent, v->y_extent, v->z_extent, v->z_pos, (v->vehstatus & VS_SHADOW) != 0); + v->x_extent, v->y_extent, v->z_extent, v->z_pos, shadowed); } /** -- cgit v1.2.3-54-g00ecf