From ac838de385f25f473a2305ac666d35babf42f3ab Mon Sep 17 00:00:00 2001 From: rubidium Date: Mon, 27 Aug 2007 21:33:26 +0000 Subject: (svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch. --- src/autoreplace_gui.cpp | 4 ++-- src/build_vehicle_gui.cpp | 3 ++- src/group.h | 8 +++++--- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 062d951ef..68c95ec3a 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -49,7 +49,7 @@ void InvalidateAutoreplaceWindow(EngineID e, GroupID id_g) { 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 @@ static void GenerateReplaceVehList(Window *w, bool draw_left) 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; diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 8b19a9ac8..5728212ab 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -853,7 +853,8 @@ void DrawEngineList(VehicleType type, int x, int y, const EngineList eng_list, u 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); diff --git a/src/group.h b/src/group.h index e5c10a59f..7c0e1c9ac 100644 --- a/src/group.h +++ b/src/group.h @@ -76,15 +76,17 @@ static inline uint GetGroupArraySize(void) * @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; } -- cgit v1.2.3-54-g00ecf