dfhack/plugins/tweak/tweaks/embark-profile-name.h

25 lines
964 B
C++

#include "df/viewscreen_setupdwarfgamest.h"
struct embark_profile_name_hook : df::viewscreen_setupdwarfgamest {
typedef df::viewscreen_setupdwarfgamest interpose_base;
DEFINE_VMETHOD_INTERPOSE( void, feed, ( std::set<df::interface_key> *input ) ) {
int ch = -1;
for( auto it = input->begin(); ch == -1 && it != input->end(); ++it ) {
ch = Screen::keyToChar( *it );
}
// Intercept all printable characters except space.
// If space is intercepted the shift-space abort key will not work.
if( in_save_profile && ch >= 33 && ch <= 126 ) {
profile_name.push_back( ( char )ch );
} else {
if( input->count( df::interface_key::LEAVESCREEN ) ) {
input->insert( df::interface_key::SETUPGAME_SAVE_PROFILE_ABORT );
}
INTERPOSE_NEXT( feed )( input );
}
}
};
IMPLEMENT_VMETHOD_INTERPOSE( embark_profile_name_hook, feed );