Industry directory window: Only resort on production change if necessary
This commit is contained in:
@@ -209,4 +209,12 @@ struct IndustryBuildData {
|
|||||||
|
|
||||||
extern IndustryBuildData _industry_builder;
|
extern IndustryBuildData _industry_builder;
|
||||||
|
|
||||||
|
|
||||||
|
/** Special values for the industry list window for the data parameter of #InvalidateWindowData. */
|
||||||
|
enum IndustryDirectoryInvalidateWindowData {
|
||||||
|
IDIWD_FORCE_REBUILD,
|
||||||
|
IDIWD_PRODUCTION_CHANGE,
|
||||||
|
IDIWD_FORCE_RESORT,
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* INDUSTRY_H */
|
#endif /* INDUSTRY_H */
|
||||||
|
@@ -207,7 +207,7 @@ Industry::~Industry()
|
|||||||
*/
|
*/
|
||||||
void Industry::PostDestructor(size_t index)
|
void Industry::PostDestructor(size_t index)
|
||||||
{
|
{
|
||||||
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0);
|
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_FORCE_REBUILD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1910,7 +1910,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
|
|||||||
if (GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_PLANT_ON_BUILT) {
|
if (GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_PLANT_ON_BUILT) {
|
||||||
for (uint j = 0; j != 50; j++) PlantRandomFarmField(i);
|
for (uint j = 0; j != 50; j++) PlantRandomFarmField(i);
|
||||||
}
|
}
|
||||||
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0);
|
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_FORCE_REBUILD);
|
||||||
|
|
||||||
if (!_generating_world) PopulateStationsNearby(i);
|
if (!_generating_world) PopulateStationsNearby(i);
|
||||||
if (_game_mode == GM_NORMAL) RegisterGameEvents(GEF_INDUSTRY_CREATE);
|
if (_game_mode == GM_NORMAL) RegisterGameEvents(GEF_INDUSTRY_CREATE);
|
||||||
@@ -2857,7 +2857,7 @@ void IndustryDailyLoop()
|
|||||||
cur_company.Restore();
|
cur_company.Restore();
|
||||||
|
|
||||||
/* production-change */
|
/* production-change */
|
||||||
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 1);
|
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_PRODUCTION_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IndustryMonthlyLoop()
|
void IndustryMonthlyLoop()
|
||||||
@@ -2879,7 +2879,7 @@ void IndustryMonthlyLoop()
|
|||||||
cur_company.Restore();
|
cur_company.Restore();
|
||||||
|
|
||||||
/* production-change */
|
/* production-change */
|
||||||
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 1);
|
InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_PRODUCTION_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1694,11 +1694,19 @@ public:
|
|||||||
*/
|
*/
|
||||||
void OnInvalidateData(int data = 0, bool gui_scope = true) override
|
void OnInvalidateData(int data = 0, bool gui_scope = true) override
|
||||||
{
|
{
|
||||||
if (data == 0) {
|
switch (data) {
|
||||||
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
|
case IDIWD_FORCE_REBUILD:
|
||||||
this->industries.ForceRebuild();
|
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
|
||||||
} else {
|
this->industries.ForceRebuild();
|
||||||
this->industries.ForceResort();
|
break;
|
||||||
|
|
||||||
|
case IDIWD_PRODUCTION_CHANGE:
|
||||||
|
if (this->industries.SortType() == 2) this->industries.ForceResort();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IDIWD_FORCE_RESORT:
|
||||||
|
this->industries.ForceResort();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user