mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Use EnumBitSet for NewsFlags.
parent
52094c1fc1
commit
4fd1929bf7
|
@ -15,7 +15,7 @@
|
||||||
#include "station_type.h"
|
#include "station_type.h"
|
||||||
#include "industry_type.h"
|
#include "industry_type.h"
|
||||||
|
|
||||||
void AddNewsItem(StringID string, NewsType type, NewsStyle style, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32_t ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32_t ref2 = UINT32_MAX, std::unique_ptr<NewsAllocatedData> &&data = nullptr, AdviceType advice_type = AdviceType::Invalid);
|
void AddNewsItem(StringID string, NewsType type, NewsStyle style, NewsFlags flags, NewsReferenceType reftype1 = NR_NONE, uint32_t ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32_t ref2 = UINT32_MAX, std::unique_ptr<NewsAllocatedData> &&data = nullptr, AdviceType advice_type = AdviceType::Invalid);
|
||||||
|
|
||||||
inline void AddCompanyNewsItem(StringID string, std::unique_ptr<CompanyNewsInformation> cni)
|
inline void AddCompanyNewsItem(StringID string, std::unique_ptr<CompanyNewsInformation> cni)
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ inline void AddCompanyNewsItem(StringID string, std::unique_ptr<CompanyNewsInfor
|
||||||
*/
|
*/
|
||||||
inline void AddVehicleNewsItem(StringID string, NewsType type, VehicleID vehicle, StationID station = INVALID_STATION)
|
inline void AddVehicleNewsItem(StringID string, NewsType type, VehicleID vehicle, StationID station = INVALID_STATION)
|
||||||
{
|
{
|
||||||
AddNewsItem(string, type, NewsStyle::Thin, NF_NO_TRANSPARENT | NF_SHADE, NR_VEHICLE, vehicle, station == INVALID_STATION ? NR_NONE : NR_STATION, station);
|
AddNewsItem(string, type, NewsStyle::Thin, {NewsFlag::NoTransparency, NewsFlag::Shaded}, NR_VEHICLE, vehicle, station == INVALID_STATION ? NR_NONE : NR_STATION, station);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,17 +39,17 @@ inline void AddVehicleNewsItem(StringID string, NewsType type, VehicleID vehicle
|
||||||
*/
|
*/
|
||||||
inline void AddVehicleAdviceNewsItem(AdviceType advice_type, StringID string, VehicleID vehicle)
|
inline void AddVehicleAdviceNewsItem(AdviceType advice_type, StringID string, VehicleID vehicle)
|
||||||
{
|
{
|
||||||
AddNewsItem(string, NT_ADVICE, NewsStyle::Small, NF_INCOLOUR | NF_VEHICLE_PARAM0, NR_VEHICLE, vehicle, NR_NONE, {}, nullptr, advice_type);
|
AddNewsItem(string, NT_ADVICE, NewsStyle::Small, {NewsFlag::InColour, NewsFlag::VehicleParam0}, NR_VEHICLE, vehicle, NR_NONE, {}, nullptr, advice_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, std::unique_ptr<NewsAllocatedData> &&data = nullptr, StationID station = INVALID_STATION)
|
inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, std::unique_ptr<NewsAllocatedData> &&data = nullptr, StationID station = INVALID_STATION)
|
||||||
{
|
{
|
||||||
AddNewsItem(string, type, NewsStyle::Thin, NF_NO_TRANSPARENT | NF_SHADE, NR_TILE, tile.base(), station == INVALID_STATION ? NR_NONE : NR_STATION, station, std::move(data));
|
AddNewsItem(string, type, NewsStyle::Thin, {NewsFlag::NoTransparency, NewsFlag::Shaded}, NR_TILE, tile.base(), station == INVALID_STATION ? NR_NONE : NR_STATION, station, std::move(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry, std::unique_ptr<NewsAllocatedData> &&data = nullptr)
|
inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry, std::unique_ptr<NewsAllocatedData> &&data = nullptr)
|
||||||
{
|
{
|
||||||
AddNewsItem(string, type, NewsStyle::Thin, NF_NO_TRANSPARENT | NF_SHADE, NR_INDUSTRY, industry, NR_NONE, UINT32_MAX, std::move(data));
|
AddNewsItem(string, type, NewsStyle::Thin, {NewsFlag::NoTransparency, NewsFlag::Shaded}, NR_INDUSTRY, industry, NR_NONE, UINT32_MAX, std::move(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NewsLoop();
|
void NewsLoop();
|
||||||
|
|
|
@ -396,10 +396,10 @@ struct NewsWindow : Window {
|
||||||
} else {
|
} else {
|
||||||
nvp->InitializeViewport(this, GetReferenceTile(ni->reftype1, ni->ref1), ScaleZoomGUI(ZOOM_LVL_NEWS));
|
nvp->InitializeViewport(this, GetReferenceTile(ni->reftype1, ni->ref1), ScaleZoomGUI(ZOOM_LVL_NEWS));
|
||||||
}
|
}
|
||||||
if (this->ni->flags & NF_NO_TRANSPARENT) nvp->disp_flags.Set(NWidgetDisplayFlag::NoTransparency);
|
if (this->ni->flags.Test(NewsFlag::NoTransparency)) nvp->disp_flags.Set(NWidgetDisplayFlag::NoTransparency);
|
||||||
if ((this->ni->flags & NF_INCOLOUR) == 0) {
|
if (!this->ni->flags.Test(NewsFlag::InColour)) {
|
||||||
nvp->disp_flags.Set(NWidgetDisplayFlag::ShadeGrey);
|
nvp->disp_flags.Set(NWidgetDisplayFlag::ShadeGrey);
|
||||||
} else if (this->ni->flags & NF_SHADE) {
|
} else if (this->ni->flags.Test(NewsFlag::Shaded)) {
|
||||||
nvp->disp_flags.Set(NWidgetDisplayFlag::ShadeDimmed);
|
nvp->disp_flags.Set(NWidgetDisplayFlag::ShadeDimmed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -874,11 +874,11 @@ static std::list<NewsItem>::iterator DeleteNewsItem(std::list<NewsItem>::iterato
|
||||||
*
|
*
|
||||||
* @see NewsSubtype
|
* @see NewsSubtype
|
||||||
*/
|
*/
|
||||||
NewsItem::NewsItem(StringID string_id, NewsType type, NewsStyle style, NewsFlag flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, std::unique_ptr<NewsAllocatedData> &&data, AdviceType advice_type) :
|
NewsItem::NewsItem(StringID string_id, NewsType type, NewsStyle style, NewsFlags flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, std::unique_ptr<NewsAllocatedData> &&data, AdviceType advice_type) :
|
||||||
string_id(string_id), date(TimerGameCalendar::date), economy_date(TimerGameEconomy::date), type(type), advice_type(advice_type), style(style), flags(flags), reftype1(reftype1), reftype2(reftype2), ref1(ref1), ref2(ref2), data(std::move(data))
|
string_id(string_id), date(TimerGameCalendar::date), economy_date(TimerGameEconomy::date), type(type), advice_type(advice_type), style(style), flags(flags), reftype1(reftype1), reftype2(reftype2), ref1(ref1), ref2(ref2), data(std::move(data))
|
||||||
{
|
{
|
||||||
/* show this news message in colour? */
|
/* show this news message in colour? */
|
||||||
if (TimerGameCalendar::year >= _settings_client.gui.coloured_news_year) this->flags |= NF_INCOLOUR;
|
if (TimerGameCalendar::year >= _settings_client.gui.coloured_news_year) this->flags.Set(NewsFlag::InColour);
|
||||||
CopyOutDParam(this->params, 10);
|
CopyOutDParam(this->params, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,7 +896,7 @@ NewsItem::NewsItem(StringID string_id, NewsType type, NewsStyle style, NewsFlag
|
||||||
*
|
*
|
||||||
* @see NewsSubtype
|
* @see NewsSubtype
|
||||||
*/
|
*/
|
||||||
void AddNewsItem(StringID string, NewsType type, NewsStyle style, NewsFlag flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, std::unique_ptr<NewsAllocatedData> &&data, AdviceType advice_type)
|
void AddNewsItem(StringID string, NewsType type, NewsStyle style, NewsFlags flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, std::unique_ptr<NewsAllocatedData> &&data, AdviceType advice_type)
|
||||||
{
|
{
|
||||||
if (_game_mode == GM_MENU) return;
|
if (_game_mode == GM_MENU) return;
|
||||||
|
|
||||||
|
@ -1056,7 +1056,7 @@ void ChangeVehicleNews(VehicleID from_index, VehicleID to_index)
|
||||||
for (auto &ni : _news) {
|
for (auto &ni : _news) {
|
||||||
if (ni.reftype1 == NR_VEHICLE && ni.ref1 == from_index) ni.ref1 = to_index;
|
if (ni.reftype1 == NR_VEHICLE && ni.ref1 == from_index) ni.ref1 = to_index;
|
||||||
if (ni.reftype2 == NR_VEHICLE && ni.ref2 == from_index) ni.ref2 = to_index;
|
if (ni.reftype2 == NR_VEHICLE && ni.ref2 == from_index) ni.ref2 = to_index;
|
||||||
if (ni.flags & NF_VEHICLE_PARAM0 && std::get<uint64_t>(ni.params[0]) == from_index) ni.params[0] = to_index;
|
if (ni.flags.Test(NewsFlag::VehicleParam0) && std::get<uint64_t>(ni.params[0]) == from_index) ni.params[0] = to_index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,21 +85,15 @@ enum class NewsStyle : uint8_t {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Various OR-able news-item flags.
|
* Various OR-able news-item flags.
|
||||||
* @note #NF_INCOLOUR is set automatically if needed.
|
* @note #NewsFlag::InColour is set automatically if needed.
|
||||||
*/
|
*/
|
||||||
enum NewsFlag : uint8_t {
|
enum class NewsFlag : uint8_t {
|
||||||
NFB_INCOLOUR = 0, ///< News item is shown in colour (otherwise it is shown in black & white).
|
InColour, ///< News item is shown in colour (otherwise it is shown in black & white).
|
||||||
NFB_NO_TRANSPARENT = 1, ///< News item disables transparency in the viewport.
|
NoTransparency, ///< News item disables transparency in the viewport.
|
||||||
NFB_SHADE = 2, ///< News item uses shaded colours.
|
Shaded, ///< News item uses shaded colours.
|
||||||
NFB_VEHICLE_PARAM0 = 6, ///< String param 0 contains a vehicle ID. (special autoreplace behaviour)
|
VehicleParam0, ///< String param 0 contains a vehicle ID. (special autoreplace behaviour)
|
||||||
|
|
||||||
NF_INCOLOUR = 1 << NFB_INCOLOUR, ///< Bit value for coloured news.
|
|
||||||
NF_NO_TRANSPARENT = 1 << NFB_NO_TRANSPARENT, ///< Bit value for disabling transparency.
|
|
||||||
NF_SHADE = 1 << NFB_SHADE, ///< Bit value for enabling shading.
|
|
||||||
NF_VEHICLE_PARAM0 = 1 << NFB_VEHICLE_PARAM0, ///< Bit value for specifying that string param 0 contains a vehicle ID. (special autoreplace behaviour)
|
|
||||||
};
|
};
|
||||||
DECLARE_ENUM_AS_BIT_SET(NewsFlag)
|
using NewsFlags = EnumBitSet<NewsFlag, uint8_t>;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* News display options
|
* News display options
|
||||||
|
@ -148,7 +142,7 @@ struct NewsItem {
|
||||||
NewsType type; ///< Type of the news
|
NewsType type; ///< Type of the news
|
||||||
AdviceType advice_type; ///< The type of advice, to be able to remove specific advices later on.
|
AdviceType advice_type; ///< The type of advice, to be able to remove specific advices later on.
|
||||||
NewsStyle style; /// Window style for the news.
|
NewsStyle style; /// Window style for the news.
|
||||||
NewsFlag flags; ///< NewsFlags bits @see NewsFlag
|
NewsFlags flags; ///< NewsFlags bits @see NewsFlag
|
||||||
|
|
||||||
NewsReferenceType reftype1; ///< Type of ref1
|
NewsReferenceType reftype1; ///< Type of ref1
|
||||||
NewsReferenceType reftype2; ///< Type of ref2
|
NewsReferenceType reftype2; ///< Type of ref2
|
||||||
|
@ -159,7 +153,7 @@ struct NewsItem {
|
||||||
|
|
||||||
std::vector<StringParameterData> params; ///< Parameters for string resolving.
|
std::vector<StringParameterData> params; ///< Parameters for string resolving.
|
||||||
|
|
||||||
NewsItem(StringID string_id, NewsType type, NewsStyle style, NewsFlag flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, std::unique_ptr<NewsAllocatedData> &&data, AdviceType advice_type);
|
NewsItem(StringID string_id, NewsType type, NewsStyle style, NewsFlags flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, std::unique_ptr<NewsAllocatedData> &&data, AdviceType advice_type);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -532,7 +532,7 @@ static void ShowRejectOrAcceptNews(const Station *st, CargoTypes cargoes, bool r
|
||||||
SetDParam(0, st->index);
|
SetDParam(0, st->index);
|
||||||
SetDParam(1, cargoes);
|
SetDParam(1, cargoes);
|
||||||
StringID msg = reject ? STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST : STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST;
|
StringID msg = reject ? STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST : STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST;
|
||||||
AddNewsItem(msg, NT_ACCEPTANCE, NewsStyle::Small, NF_INCOLOUR, NR_STATION, st->index);
|
AddNewsItem(msg, NT_ACCEPTANCE, NewsStyle::Small, NewsFlag::InColour, NR_STATION, st->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue