summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2011-05-28 09:46:37 +0000
committerfrosch <frosch@openttd.org>2011-05-28 09:46:37 +0000
commit460d24fd83e6245684c2e4c7466382c2b93a02e0 (patch)
tree412901d48c72dc5316b4c51982ff8b723ff8fad2
parent71822b6f1bdddca8f3f9bc4d4a4e633ceca1e555 (diff)
downloadopenttd-460d24fd83e6245684c2e4c7466382c2b93a02e0.tar.xz
(svn r22506) -Feature [FS#4625]: Make the transparency options for industries also affect the effect vehicles created by industries.
-rw-r--r--src/effectvehicle.cpp26
-rw-r--r--src/effectvehicle_base.h1
-rw-r--r--src/transparency.h1
-rw-r--r--src/vehicle.cpp12
4 files changed, 39 insertions, 1 deletions
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<EffectVehicle, VEH_EFFECT> {
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);
}
/**