summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/company_cmd.cpp3
-rw-r--r--src/object_cmd.cpp21
2 files changed, 24 insertions, 0 deletions
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index 12947cd06..60afe807f 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -986,6 +986,9 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
FOR_ALL_VEHICLES(v) {
if (v->owner == _current_company) v->InvalidateNewGRFCache();
}
+
+ extern void UpdateObjectColours(const Company *c);
+ UpdateObjectColours(c);
}
return CommandCost();
}
diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp
index 0ddcf3664..4ad51d58f 100644
--- a/src/object_cmd.cpp
+++ b/src/object_cmd.cpp
@@ -128,6 +128,27 @@ void UpdateCompanyHQ(TileIndex tile, uint score)
}
}
+/**
+ * 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);