Codechange: use std::variant instead of a custom version for news references

This commit is contained in:
Rubidium
2025-01-19 18:31:28 +01:00
committed by rubidium42
parent 2cb59b1856
commit 380e7b48ce
14 changed files with 175 additions and 137 deletions

View File

@@ -20,6 +20,18 @@
#include "../../safeguards.h"
static NewsReference CreateReference(ScriptNews::NewsReferenceType ref_type, SQInteger reference)
{
switch (ref_type) {
case ScriptNews::NR_NONE: return {};
case ScriptNews::NR_TILE: return ::TileIndex(reference);
case ScriptNews::NR_STATION: return static_cast<StationID>(reference);
case ScriptNews::NR_INDUSTRY: return static_cast<IndustryID>(reference);
case ScriptNews::NR_TOWN: return static_cast<TownID>(reference);
default: NOT_REACHED();
}
}
/* static */ bool ScriptNews::Create(NewsType type, Text *text, ScriptCompany::CompanyID company, NewsReferenceType ref_type, SQInteger reference)
{
ScriptObjectRef counter(text);
@@ -38,6 +50,5 @@
::CompanyID c = ScriptCompany::FromScriptCompanyID(company);
if (ref_type == NR_NONE) reference = 0;
return ScriptObject::Command<CMD_CUSTOM_NEWS_ITEM>::Do((::NewsType)type, (::NewsReferenceType)ref_type, c, reference, encoded);
return ScriptObject::Command<CMD_CUSTOM_NEWS_ITEM>::Do((::NewsType)type, c, CreateReference(ref_type, reference), encoded);
}