changeset 17726:7ed1b225f4c2 draft

(svn r22506) -Feature [FS#4625]: Make the transparency options for industries also affect the effect vehicles created by industries.
author frosch <frosch@openttd.org>
date Sat, 28 May 2011 09:46:37 +0000
parents 2bb554b0fa09
children 5cd3502bc3fb
files src/effectvehicle.cpp src/effectvehicle_base.h src/transparency.h src/vehicle.cpp
diffstat 4 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/effectvehicle.cpp
+++ b/src/effectvehicle.cpp
@@ -565,6 +565,23 @@
 };
 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 @@
 	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];
+}
--- a/src/effectvehicle_base.h
+++ b/src/effectvehicle_base.h
@@ -33,6 +33,7 @@
 
 	void UpdateDeltaXY(Direction direction);
 	bool Tick();
+	TransparencyOption GetTransparencyOption() const;
 };
 
 /**
--- a/src/transparency.h
+++ b/src/transparency.h
@@ -32,6 +32,7 @@
 	TO_CATENARY,   ///< catenary
 	TO_LOADING,    ///< loading indicators
 	TO_END,
+	TO_INVALID,    ///< Invalid transparency option
 };
 
 typedef uint TransparencyOptionBits; ///< transparency option bits
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -899,8 +899,18 @@
 
 	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);
 }
 
 /**