changeset 15921:7c1f97a04d96 draft

(svn r20605) -Fix [FS#4063]: let NewGRFs var43 var (information about liveries) for vehicles not be influenced by the local setting determining whether to show liveries or not.
author rubidium <rubidium@openttd.org>
date Mon, 23 Aug 2010 22:28:35 +0000
parents 74e5e0907a80
children e324b9edf3df
files src/livery.h src/newgrf_engine.cpp src/vehicle.cpp src/vehicle_func.h
diffstat 4 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/livery.h
+++ b/src/livery.h
@@ -14,6 +14,10 @@
 
 #include "company_type.h"
 
+static const byte LIT_NONE    = 0; ///< Don't show the liveries at all
+static const byte LIT_COMPANY = 1; ///< Show the liveries of your own company
+static const byte LIT_ALL     = 2; ///< Show the liveries of all companies
+
 /** List of different livery schemes. */
 enum LiveryScheme {
 	LS_BEGIN = 0,
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -441,13 +441,13 @@
 
 	if (v == NULL) {
 		if (!Company::IsValidID(_current_company)) return 0;
-		l = GetEngineLivery(engine, _current_company, INVALID_ENGINE, NULL);
+		l = GetEngineLivery(engine, _current_company, INVALID_ENGINE, NULL, LIT_ALL);
 	} else if (v->type == VEH_TRAIN) {
-		l = GetEngineLivery(v->engine_type, v->owner, Train::From(v)->tcache.first_engine, v);
+		l = GetEngineLivery(v->engine_type, v->owner, Train::From(v)->tcache.first_engine, v, LIT_ALL);
 	} else if (v->type == VEH_ROAD) {
-		l = GetEngineLivery(v->engine_type, v->owner, RoadVehicle::From(v)->rcache.first_engine, v);
+		l = GetEngineLivery(v->engine_type, v->owner, RoadVehicle::From(v)->rcache.first_engine, v, LIT_ALL);
 	} else {
-		l = GetEngineLivery(v->engine_type, v->owner, INVALID_ENGINE, v);
+		l = GetEngineLivery(v->engine_type, v->owner, INVALID_ENGINE, v, LIT_ALL);
 	}
 
 	return l->colour1 + l->colour2 * 16;
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1403,9 +1403,10 @@
  * @param company Owner of the vehicle
  * @param parent_engine_type EngineID of the front vehicle. INVALID_VEHICLE if vehicle is at front itself.
  * @param v the vehicle. NULL if in purchase list etc.
+ * @param livery_setting The livery settings to use for acquiring the livery information.
  * @return livery to use
  */
-const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v)
+const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, byte livery_setting)
 {
 	const Company *c = Company::Get(company);
 	LiveryScheme scheme = LS_DEFAULT;
@@ -1413,7 +1414,7 @@
 
 	/* The default livery is always available for use, but its in_use flag determines
 	 * whether any _other_ liveries are in use. */
-	if (c->livery[LS_DEFAULT].in_use && (_settings_client.gui.liveries == 2 || (_settings_client.gui.liveries == 1 && company == _local_company))) {
+	if (c->livery[LS_DEFAULT].in_use && (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company))) {
 		/* Determine the livery scheme to use */
 		const Engine *e = Engine::Get(engine_type);
 		switch (e->type) {
@@ -1540,7 +1541,7 @@
 	/* Spectator has news shown too, but has invalid company ID - as well as dedicated server */
 	if (!Company::IsValidID(company)) return map;
 
-	const Livery *livery = GetEngineLivery(engine_type, company, parent_engine_type, v);
+	const Livery *livery = GetEngineLivery(engine_type, company, parent_engine_type, v, _settings_client.gui.liveries);
 
 	map += livery->colour1;
 	if (twocc) map += livery->colour2 * 16;
--- a/src/vehicle_func.h
+++ b/src/vehicle_func.h
@@ -92,7 +92,7 @@
 	return IsCompanyBuildableVehicleType(v->type);
 }
 
-const struct Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v);
+const struct Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, byte livery_setting);
 
 /**
  * Get the colour map for an engine. This used for unbuilt engines in the user interface.