mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-11-11 03:03:01 +00:00
removing and changing defaults in savers
This commit is contained in:
18
config.cpp
18
config.cpp
@@ -22,6 +22,8 @@ struct supersaver {
|
|||||||
virtual bool dosave() = 0;
|
virtual bool dosave() = 0;
|
||||||
virtual void reset() = 0;
|
virtual void reset() = 0;
|
||||||
virtual ~supersaver() {};
|
virtual ~supersaver() {};
|
||||||
|
virtual bool affects(void* v) { return false; }
|
||||||
|
virtual void set_default() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef vector<shared_ptr<supersaver>> saverlist;
|
typedef vector<shared_ptr<supersaver>> saverlist;
|
||||||
@@ -36,6 +38,8 @@ template<class T> struct dsaver : supersaver {
|
|||||||
bool dosave() { return val != dft; }
|
bool dosave() { return val != dft; }
|
||||||
void reset() { val = dft; }
|
void reset() { val = dft; }
|
||||||
dsaver(T& val) : val(val) { }
|
dsaver(T& val) : val(val) { }
|
||||||
|
bool affects(void* v) { return v == &val; }
|
||||||
|
void set_default() { dft = val; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T> struct saver : dsaver<T> {};
|
template<class T> struct saver : dsaver<T> {};
|
||||||
@@ -51,6 +55,18 @@ template<class T> void addsaver(T& i, string name) {
|
|||||||
addsaver(i, name, i);
|
addsaver(i, name, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T> void removesaver(T& val) {
|
||||||
|
for(int i=0; i<isize(savers); i++)
|
||||||
|
if(savers[i]->affects(&val))
|
||||||
|
savers.erase(savers.begin() + i);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T> void set_saver_default(T& val) {
|
||||||
|
for(auto sav: savers)
|
||||||
|
if(sav->affects(&val))
|
||||||
|
sav->set_default();
|
||||||
|
}
|
||||||
|
|
||||||
template<class T> struct saverenum : supersaver {
|
template<class T> struct saverenum : supersaver {
|
||||||
T& val;
|
T& val;
|
||||||
T dft;
|
T dft;
|
||||||
@@ -59,6 +75,8 @@ template<class T> struct saverenum : supersaver {
|
|||||||
saverenum<T>(T& v) : val(v) { }
|
saverenum<T>(T& v) : val(v) { }
|
||||||
string save() { return its(int(val)); }
|
string save() { return its(int(val)); }
|
||||||
void load(const string& s) { val = (T) atoi(s.c_str()); }
|
void load(const string& s) { val = (T) atoi(s.c_str()); }
|
||||||
|
virtual bool affects(void* v) { return v == &val; }
|
||||||
|
virtual void set_default() { dft = val; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T, class U> void addsaverenum(T& i, U name, T dft) {
|
template<class T, class U> void addsaverenum(T& i, U name, T dft) {
|
||||||
|
|||||||
Reference in New Issue
Block a user