Use formatter at more places (#952)

* Remove static keyword, this may lock

* Use universal references and cleanup

* Use the argument formatter in GameCommands.cpp

* Use the argument formatter in KeyboardShortcuts.cpp
This commit is contained in:
ζeh Matt 2021-04-26 22:20:58 +03:00 committed by GitHub
parent 2bfbb3208c
commit 8ebeea350b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 25 deletions

View File

@ -2,6 +2,7 @@
#include "../Audio/Audio.h"
#include "../Company.h"
#include "../CompanyManager.h"
#include "../Localisation/FormatArguments.hpp"
#include "../Map/Tile.h"
#include "../Objects/ObjectManager.h"
#include "../Objects/RoadObject.h"
@ -346,8 +347,9 @@ namespace OpenLoco::GameCommands
if (pObject == nullptr)
break;
_commonFormatArgs[0] = pObject->name;
_commonFormatArgs[1] = CompanyManager::get(_errorCompanyId)->name;
auto formatter = FormatArguments::common();
formatter.push(pObject->name);
formatter.push(CompanyManager::get(_errorCompanyId)->name);
Windows::Error::openWithCompetitor(_gGameCommandErrorTitle, StringIds::error_reason_stringid_belongs_to, _errorCompanyId);
return 0x80000000;
}
@ -362,8 +364,9 @@ namespace OpenLoco::GameCommands
if (pObject == nullptr)
break;
_commonFormatArgs[0] = pObject->name;
_commonFormatArgs[1] = CompanyManager::get(_errorCompanyId)->name;
auto formatter = FormatArguments::common();
formatter.push(pObject->name);
formatter.push(CompanyManager::get(_errorCompanyId)->name);
Windows::Error::openWithCompetitor(_gGameCommandErrorTitle, StringIds::error_reason_stringid_belongs_to, _errorCompanyId);
return 0x80000000;
}
@ -378,16 +381,18 @@ namespace OpenLoco::GameCommands
if (pStation == nullptr)
break;
_commonFormatArgs[0] = pStation->name;
_commonFormatArgs[1] = pStation->town;
_commonFormatArgs[2] = CompanyManager::get(_errorCompanyId)->name;
auto formatter = FormatArguments::common();
formatter.push(pStation->name);
formatter.push(pStation->town);
formatter.push(CompanyManager::get(_errorCompanyId)->name);
Windows::Error::openWithCompetitor(_gGameCommandErrorTitle, StringIds::error_reason_stringid_belongs_to, _errorCompanyId);
return 0x80000000;
}
case element_type::signal: // 0x0C
{
_commonFormatArgs[0] = CompanyManager::get(_errorCompanyId)->name;
auto formatter = FormatArguments::common();
formatter.push(CompanyManager::get(_errorCompanyId)->name);
Windows::Error::openWithCompetitor(_gGameCommandErrorTitle, StringIds::error_reason_signal_belongs_to, _errorCompanyId);
return 0x80000000;
}
@ -398,7 +403,8 @@ namespace OpenLoco::GameCommands
}
// fallback
_commonFormatArgs[0] = CompanyManager::get(_errorCompanyId)->name;
auto formatter = FormatArguments::common();
formatter.push(CompanyManager::get(_errorCompanyId)->name);
Windows::Error::openWithCompetitor(_gGameCommandErrorTitle, StringIds::error_reason_stringid_belongs_to, _errorCompanyId);
return 0x80000000;
}

View File

@ -31,19 +31,19 @@ namespace OpenLoco
}
template<typename... T>
static FormatArguments common(T... args)
static FormatArguments common(T&&... args)
{
loco_global<std::byte[0x0112C83A - 0x0112C826], 0x0112C826> _commonFormatArgs;
FormatArguments formatter{ &*_commonFormatArgs, std::size(_commonFormatArgs) };
FormatArguments formatter{ _commonFormatArgs.get(), std::size(_commonFormatArgs) };
(formatter.push(args), ...);
return formatter;
}
template<typename... T>
static FormatArguments mapToolTip(T... args)
static FormatArguments mapToolTip(T&&... args)
{
static loco_global<std::byte[40], 0x0050A018> _mapTooltipFormatArguments;
FormatArguments formatter{ &*_mapTooltipFormatArguments, std::size(_mapTooltipFormatArguments) };
loco_global<std::byte[40], 0x0050A018> _mapTooltipFormatArguments;
FormatArguments formatter{ _mapTooltipFormatArguments.get(), std::size(_mapTooltipFormatArguments) };
(formatter.push(args), ...);
return formatter;
}

View File

@ -14,11 +14,9 @@ using namespace OpenLoco::Input;
namespace OpenLoco::Ui::Windows::KeyboardShortcuts
{
static const int rowHeight = 10; // CJK: 13
static window_event_list _events;
static loco_global<string_id[8], 0x0112C826> _commonFormatArgs;
static widget_t _widgets[] = {
makeWidget({ 0, 0 }, { 360, 238 }, widget_type::frame, 0),
@ -115,27 +113,32 @@ namespace OpenLoco::Ui::Windows::KeyboardShortcuts
format = StringIds::wcolour2_stringid;
}
_commonFormatArgs[1] = ShortcutManager::getName(static_cast<Shortcut>(i));
_commonFormatArgs[2] = StringIds::empty;
_commonFormatArgs[3] = StringIds::empty;
auto modifierStringId = StringIds::empty;
auto baseStringId = StringIds::empty;
if (Config::get().keyboard_shortcuts[i].var_0 != 0xFF)
{
_commonFormatArgs[3] = StringIds::shortcut_key_base + Config::get().keyboard_shortcuts[i].var_0;
if (Config::get().keyboard_shortcuts[i].var_1 != 0)
{
_commonFormatArgs[2] = StringIds::keyboard_shortcut_modifier_shift;
if (Config::get().keyboard_shortcuts[i].var_1 != 1)
{
_commonFormatArgs[2] = StringIds::keyboard_shortcut_modifier_ctrl;
modifierStringId = StringIds::keyboard_shortcut_modifier_ctrl;
}
else
{
modifierStringId = StringIds::keyboard_shortcut_modifier_shift;
}
}
baseStringId = StringIds::shortcut_key_base + Config::get().keyboard_shortcuts[i].var_0;
}
_commonFormatArgs[0] = StringIds::keyboard_shortcut_list_format;
auto formatter = FormatArguments::common();
formatter.push(StringIds::keyboard_shortcut_list_format);
formatter.push(ShortcutManager::getName(static_cast<Shortcut>(i)));
formatter.push(modifierStringId);
formatter.push(baseStringId);
Gfx::drawString_494B3F(*dpi, 0, yPos - 1, Colour::black, format, _commonFormatArgs);
Gfx::drawString_494B3F(*dpi, 0, yPos - 1, Colour::black, format, &formatter);
yPos += rowHeight;
}
}