(svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch.
authorrubidium
Mon, 27 Aug 2007 21:33:26 +0000
changeset 7977 b10b1a884892
parent 7976 5d93386b748b
child 7978 0782afa40e4a
(svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch.
src/autoreplace_gui.cpp
src/build_vehicle_gui.cpp
src/group.h
--- a/src/autoreplace_gui.cpp	Mon Aug 27 21:18:04 2007 +0000
+++ b/src/autoreplace_gui.cpp	Mon Aug 27 21:33:26 2007 +0000
@@ -49,7 +49,7 @@
 {
 	Player *p = GetPlayer(_local_player);
 	byte type = GetEngine(e)->type;
-	uint num_engines = GetGroupNumEngines(id_g, e);
+	uint num_engines = GetGroupNumEngines(_local_player, id_g, e);
 
 	if (num_engines == 0 || p->num_engines[e] == 0) {
 		/* We don't have any of this engine type.
@@ -154,7 +154,7 @@
 
 		if (draw_left) {
 			const GroupID selected_group = WP(w, replaceveh_d).sel_group;
-			const uint num_engines = GetGroupNumEngines(selected_group, e);
+			const uint num_engines = GetGroupNumEngines(_local_player, selected_group, e);
 
 			/* Skip drawing the engines we don't have any of and haven't set for replacement */
 			if (num_engines == 0 && EngineReplacementForPlayer(GetPlayer(_local_player), e, selected_group) == INVALID_ENGINE) continue;
--- a/src/build_vehicle_gui.cpp	Mon Aug 27 21:18:04 2007 +0000
+++ b/src/build_vehicle_gui.cpp	Mon Aug 27 21:33:26 2007 +0000
@@ -853,7 +853,8 @@
 
 	for (; min < max; min++, y += step_size) {
 		const EngineID engine = eng_list[min];
-		const uint num_engines = GetGroupNumEngines(selected_group, engine);
+		/* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_player here. */
+		const uint num_engines = GetGroupNumEngines(_local_player, selected_group, engine);
 
 		SetDParam(0, engine);
 		DrawString(x + x_offset, y, STR_ENGINE_NAME, engine == selected_id ? 0xC : 0x10);
--- a/src/group.h	Mon Aug 27 21:18:04 2007 +0000
+++ b/src/group.h	Mon Aug 27 21:33:26 2007 +0000
@@ -76,15 +76,17 @@
  * @param id_e The EngineID of the engine to count
  * @return The number of engines with EngineID id_e in the group
  */
-static inline uint GetGroupNumEngines(GroupID id_g, EngineID id_e)
+static inline uint GetGroupNumEngines(PlayerID p, GroupID id_g, EngineID id_e)
 {
 	if (IsValidGroupID(id_g)) return GetGroup(id_g)->num_engines[id_e];
 
-	uint num = GetPlayer(_local_player)->num_engines[id_e];
+	uint num = GetPlayer(p)->num_engines[id_e];
 	if (!IsDefaultGroupID(id_g)) return num;
 
 	const Group *g;
-	FOR_ALL_GROUPS(g) num -= g->num_engines[id_e];
+	FOR_ALL_GROUPS(g) {
+		if (g->owner == p) num -= g->num_engines[id_e];
+	}
 	return num;
 }