diff --git a/src/lang/english.txt b/src/lang/english.txt index d067da434b..9559bcf493 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -7211,6 +7211,7 @@ STR_TMPL_TEMPLATE_OVR_RUNNING_COST :{BLACK}Estimate STR_TMPL_TEMPLATE_OVR_MULTIPLE :{BLACK}{STRING1}{BLACK} {STRING1} STR_TMPL_WARNING_FREE_WAGON :{RED}Free Chain: not runnable! STR_TMPL_WARNING_VEH_UNAVAILABLE :{RED}Train not buildable: vehicle unavailable! +STR_TMPL_WARNING_VEH_NO_COMPATIBLE_RAIL_TYPE :{RED}Train not buildable: chain not compatible with any rail type STR_TMPL_GROUP_USES_TEMPLATE :{BLACK}Template in use: {NUM} STR_TMP_TEMPLATE_IN_USE :Template is in use STR_TMP_TEMPLATE_FROM_PARENT_GROUP :Using template from parent group diff --git a/src/tbtr_template_gui_create.cpp b/src/tbtr_template_gui_create.cpp index a53e34e179..4a00bc5e0c 100644 --- a/src/tbtr_template_gui_create.cpp +++ b/src/tbtr_template_gui_create.cpp @@ -308,13 +308,22 @@ public: int y = ScaleGUITrad(4) - this->vscroll->GetPosition(); bool buildable = true; Money buy_cost = 0; + RailTypes types = static_cast(UINT64_MAX); for (Train *train = this->virtual_train; train != nullptr; train = train->GetNextUnit()) { - if (!IsEngineBuildable(train->engine_type, VEH_TRAIN, train->owner)) buildable = false; - buy_cost += Engine::Get(train->engine_type)->GetCost(); + const Engine *e = Engine::Get(train->engine_type); + if (!IsEngineBuildable(train->engine_type, VEH_TRAIN, train->owner)) { + buildable = false; + } else { + types &= (GetRailTypeInfo(e->u.rail.railtype))->compatible_railtypes; + } + buy_cost += e->GetCost(); } if (!buildable) { DrawString(8, r.right, y, STR_TMPL_WARNING_VEH_UNAVAILABLE); y += FONT_HEIGHT_NORMAL; + } else if (types == RAILTYPES_NONE) { + DrawString(8, r.right, y, STR_TMPL_WARNING_VEH_NO_COMPATIBLE_RAIL_TYPE); + y += FONT_HEIGHT_NORMAL; } SetDParam(0, STR_TMPL_TEMPLATE_OVR_VALUE_LTBLUE); diff --git a/src/tbtr_template_gui_main.cpp b/src/tbtr_template_gui_main.cpp index 67482f1b2e..f407bdb89e 100644 --- a/src/tbtr_template_gui_main.cpp +++ b/src/tbtr_template_gui_main.cpp @@ -674,15 +674,20 @@ public: } bool buildable = true; + RailTypes types = static_cast(UINT64_MAX); for (const TemplateVehicle *u = v; u != nullptr; u = u->GetNextUnit()) { if (!IsEngineBuildable(u->engine_type, VEH_TRAIN, u->owner)) { buildable = false; break; + } else { + types &= (GetRailTypeInfo(Engine::Get(u->engine_type)->u.rail.railtype))->compatible_railtypes; } } /* Draw a notification string for chains that are not buildable */ if (!buildable) { DrawString(left, right - ScaleGUITrad(24), y + ScaleGUITrad(2), STR_TMPL_WARNING_VEH_UNAVAILABLE, TC_RED, SA_CENTER); + } else if (types == RAILTYPES_NONE) { + DrawString(left, right - ScaleGUITrad(24), y + ScaleGUITrad(2), STR_TMPL_WARNING_VEH_NO_COMPATIBLE_RAIL_TYPE, TC_RED, SA_CENTER); } /* Draw the template's length in tile-units */