mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r26266) -Fix [FS#5860]: Update smallmap overlay if player joins different company and make sure company masks are valid
This commit is contained in:
parent
be62387e44
commit
b158c7d0fa
|
@ -51,8 +51,7 @@ public:
|
||||||
* @param company_mask Bitmask of companies to be shown.
|
* @param company_mask Bitmask of companies to be shown.
|
||||||
* @param scale Desired thickness of lines and size of station dots.
|
* @param scale Desired thickness of lines and size of station dots.
|
||||||
*/
|
*/
|
||||||
LinkGraphOverlay(const Window *w, uint wid, uint32 cargo_mask = 0xFFFFFFFF,
|
LinkGraphOverlay(const Window *w, uint wid, uint32 cargo_mask, uint32 company_mask, uint scale) :
|
||||||
uint32 company_mask = 1 << _local_company, uint scale = 1) :
|
|
||||||
window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale)
|
window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
@ -1049,7 +1049,7 @@ void SmallMapWindow::SetupWidgetData()
|
||||||
SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc), refresh(FORCE_REFRESH_PERIOD)
|
SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc), refresh(FORCE_REFRESH_PERIOD)
|
||||||
{
|
{
|
||||||
_smallmap_industry_highlight = INVALID_INDUSTRYTYPE;
|
_smallmap_industry_highlight = INVALID_INDUSTRYTYPE;
|
||||||
this->overlay = new LinkGraphOverlay(this, WID_SM_MAP);
|
this->overlay = new LinkGraphOverlay(this, WID_SM_MAP, 0, this->GetOverlayCompanyMask(), 1);
|
||||||
this->InitNested(window_number);
|
this->InitNested(window_number);
|
||||||
this->LowerWidget(this->map_type + WID_SM_CONTOUR);
|
this->LowerWidget(this->map_type + WID_SM_CONTOUR);
|
||||||
|
|
||||||
|
@ -1530,7 +1530,14 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
|
||||||
/* Update the window every now and then */
|
/* Update the window every now and then */
|
||||||
if (--this->refresh != 0) return;
|
if (--this->refresh != 0) return;
|
||||||
|
|
||||||
if (this->map_type == SMT_LINKSTATS) this->overlay->RebuildCache();
|
if (this->map_type == SMT_LINKSTATS) {
|
||||||
|
uint32 company_mask = this->GetOverlayCompanyMask();
|
||||||
|
if (this->overlay->GetCompanyMask() != company_mask) {
|
||||||
|
this->overlay->SetCompanyMask(company_mask);
|
||||||
|
} else {
|
||||||
|
this->overlay->RebuildCache();
|
||||||
|
}
|
||||||
|
}
|
||||||
_smallmap_industry_highlight_state = !_smallmap_industry_highlight_state;
|
_smallmap_industry_highlight_state = !_smallmap_industry_highlight_state;
|
||||||
|
|
||||||
this->refresh = _smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD;
|
this->refresh = _smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD;
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#define SMALLMAP_GUI_H
|
#define SMALLMAP_GUI_H
|
||||||
|
|
||||||
#include "industry_type.h"
|
#include "industry_type.h"
|
||||||
|
#include "company_base.h"
|
||||||
#include "window_gui.h"
|
#include "window_gui.h"
|
||||||
#include "strings_func.h"
|
#include "strings_func.h"
|
||||||
#include "blitter/factory.hpp"
|
#include "blitter/factory.hpp"
|
||||||
|
@ -135,6 +136,16 @@ protected:
|
||||||
this->GetNumberRowsLegend(num_columns) * FONT_HEIGHT_SMALL;
|
this->GetNumberRowsLegend(num_columns) * FONT_HEIGHT_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a bitmask for company links to be displayed. Usually this will be
|
||||||
|
* the _local_company. Spectators get to see all companies' links.
|
||||||
|
* @return Company mask.
|
||||||
|
*/
|
||||||
|
inline uint32 GetOverlayCompanyMask() const
|
||||||
|
{
|
||||||
|
return Company::IsValidID(_local_company) ? 1U << _local_company : 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
uint GetNumberRowsLegend(uint columns) const;
|
uint GetNumberRowsLegend(uint columns) const;
|
||||||
void SelectLegendItem(int click_pos, LegendAndColour *legend, int end_legend_item, int begin_legend_item = 0);
|
void SelectLegendItem(int click_pos, LegendAndColour *legend, int end_legend_item, int begin_legend_item = 0);
|
||||||
void SwitchMapType(SmallMapType map_type);
|
void SwitchMapType(SmallMapType map_type);
|
||||||
|
|
Loading…
Reference in New Issue