changeset 16218:4ce509bfb136 draft

(svn r20919) -Fix [FS#4140]: objects didn't change colour when the company changed colour. Now they do, except when the "decide colour" callback is (defined to be) used
author rubidium <rubidium@openttd.org>
date Tue, 12 Oct 2010 19:48:42 +0000
parents d0a632d22f0a
children ae82e848eca9
files src/company_cmd.cpp src/object_cmd.cpp
diffstat 2 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -986,6 +986,9 @@
 		FOR_ALL_VEHICLES(v) {
 			if (v->owner == _current_company) v->InvalidateNewGRFCache();
 		}
+
+		extern void UpdateObjectColours(const Company *c);
+		UpdateObjectColours(c);
 	}
 	return CommandCost();
 }
--- a/src/object_cmd.cpp
+++ b/src/object_cmd.cpp
@@ -128,6 +128,27 @@
 	}
 }
 
+/**
+ * Updates the colour of the object whenever a company changes.
+ * @param c The company the company colour changed of.
+ */
+void UpdateObjectColours(const Company *c)
+{
+	Object *obj;
+	FOR_ALL_OBJECTS(obj) {
+		Owner owner = GetTileOwner(obj->location.tile);
+		/* Not the current owner, so colour doesn't change. */
+		if (owner != c->index) continue;
+
+		const ObjectSpec *spec = ObjectSpec::GetByTile(obj->location.tile);
+		/* Using the object colour callback, so not using company colour. */
+		if (HasBit(spec->callback_mask, CBM_OBJ_COLOUR)) continue;
+
+		const Livery *l = c->livery;
+		obj->colour = ((spec->flags & OBJECT_FLAG_2CC_COLOUR) ? (l->colour2 * 16) : 0) + l->colour1;
+	}
+}
+
 extern CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z, bool check_bridge);
 static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags);