summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-08-27 21:33:26 +0000
committerrubidium <rubidium@openttd.org>2007-08-27 21:33:26 +0000
commitac838de385f25f473a2305ac666d35babf42f3ab (patch)
tree547b6661ba325dd3a5f5a287a7202ee034590910
parent5ce935c6ebf8ea88bb28909addbb0ccf937acaba (diff)
downloadopenttd-ac838de385f25f473a2305ac666d35babf42f3ab.tar.xz
(svn r10992) -Fix [FS#1132]: huge amount of vehicles in the "ungrouped" group. Patch by frosch.
-rw-r--r--src/autoreplace_gui.cpp4
-rw-r--r--src/build_vehicle_gui.cpp3
-rw-r--r--src/group.h8
3 files changed, 9 insertions, 6 deletions
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;
}