1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-11-13 20:27:10 +00:00

more intuitive file dialogs; texture config saving

This commit is contained in:
Zeno Rogue
2017-12-14 12:10:40 +01:00
parent ebd159825c
commit e2080cd91e
5 changed files with 293 additions and 129 deletions

View File

@@ -63,7 +63,9 @@ struct supersaver {
virtual void reset() = 0;
};
vector<shared_ptr<supersaver>> savers;
typedef vector<shared_ptr<supersaver>> saverlist;
saverlist savers;
template<class T> struct dsaver : supersaver {
T& val;
@@ -77,7 +79,7 @@ template<class T> struct saver : dsaver<T> {};
template<class T, class U, class V> void addsaver(T& i, U name, V dft) {
auto s = make_shared<saver<T>> (i);
s->dft = i = dft;
s->dft = dft;
s->name = name;
savers.push_back(s);
}
@@ -96,13 +98,17 @@ template<class T> struct saverenum : supersaver {
void load(const string& s) { val = (T) atoi(s.c_str()); }
};
template<class T, class U> void addsaverenum(T& i, U name) {
template<class T, class U> void addsaverenum(T& i, U name, T dft) {
auto s = make_shared<saverenum<T>> (i);
s->dft = i;
s->dft = dft;
s->name = name;
savers.push_back(s);
}
template<class T, class U> void addsaverenum(T& i, U name) {
addsaverenum(i, name, i);
}
template<> struct saver<int> : dsaver<int> {
saver<int>(int& val) : dsaver<int>(val) { }
string save() { return its(val); }
@@ -127,6 +133,12 @@ template<> struct saver<unsigned> : dsaver<unsigned> {
void load(const string& s) { val = (unsigned) strtoll(s.c_str(), NULL, 16); }
};
template<> struct saver<string> : dsaver<string> {
saver<string>(string& val) : dsaver<string>(val) { }
string save() { return val; }
void load(const string& s) { val = s; }
};
template<> struct saver<ld> : dsaver<ld> {
saver<ld>(ld& val) : dsaver<ld>(val) { }
string save() { return ftssmart(val); }
@@ -318,6 +330,8 @@ void initConfig() {
#if CAP_SHMUP
shmup::initConfig();
#endif
for(auto s: savers) s->reset();
}
bool inSpecialMode() {