1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-08 06:59:55 +00:00

specialized exceptions for param errors

This commit is contained in:
Zeno Rogue 2024-05-27 02:18:22 +02:00
parent 888a34dea6
commit f445d02707
2 changed files with 14 additions and 8 deletions

View File

@ -28,6 +28,12 @@ EX void non_editable_reaction() {
#if HDR
struct param_exception : hr_exception {
struct parameter *which;
param_exception() : hr_exception("param_exception"), which(nullptr) {}
param_exception(const std::string &s, parameter *p) : hr_exception(s), which(p) {}
};
struct parameter_names {
string name;
string legacy_config_name;
@ -73,8 +79,8 @@ struct parameter : public std::enable_shared_from_this<parameter> {
}
virtual bool anim_unchanged() { return true; }
virtual void anim_restore() { }
virtual cld get_cld() { throw hr_exception("parameter has no complex value"); }
virtual void set_cld_raw(cld x) { throw hr_exception("parameter has no complex value"); }
virtual cld get_cld() { throw param_exception("parameter has no complex value", this); }
virtual void set_cld_raw(cld x) { throw param_exception("parameter has no complex value", this); }
virtual void set_cld(cld value) {
auto bak = get_cld();
set_cld_raw(value);
@ -83,14 +89,13 @@ struct parameter : public std::enable_shared_from_this<parameter> {
virtual string save() = 0;
virtual void load(const string& s) {
println(hlog, "cannot load parameter: ", name, " from: ", s);
throw hr_exception("parameter cannot be loaded");
throw param_exception("parameter cannot be loaded", this);
}
virtual bool dosave() = 0;
virtual void reset() = 0;
virtual void swap_with(parameter*) = 0;
virtual shared_ptr<parameter> clone(struct local_parameter_set& lps, void *value) { println(hlog, "parameter not cloneable: ", name); throw hr_exception("not cloneable"); }
virtual shared_ptr<parameter> clone(struct local_parameter_set& lps, void *value) { throw param_exception("not cloneable", this); }
void setup(const parameter_names& s);
};
@ -215,7 +220,7 @@ template<class T> struct val_parameter : public parameter {
bool anim_unchanged() override { return *value == anim_value; }
void anim_restore() override { *value = anim_value; if(reaction) reaction(); }
virtual void load_from_raw(const string& s) { throw hr_exception("load_from_raw not defined"); }
virtual void load_from_raw(const string& s) { throw param_exception("load_from_raw not defined", this); }
void load(const string& s) override {
auto bak = *value;
@ -423,8 +428,7 @@ struct custom_parameter : public parameter {
}
virtual void load_from_raw(const string& s) {
if(!custom_load) {
println(hlog, "cannot load parameter: ", name, " from: ", s);
throw hr_exception("parameter cannot be loaded");
throw param_exception("parameter cannot be loaded", this);
}
custom_load(s);
}

View File

@ -1227,6 +1227,7 @@ EX namespace dialog {
if(p) p->load_as_animation(formula);
}
catch(hr_parse_exception&) { }
catch(param_exception&) { }
};
dialog::get_di().dialogflags |= dialogflags;
});
@ -1298,6 +1299,7 @@ EX namespace dialog {
}
catch(const hr_parse_exception&) {
}
catch(param_exception&) { }
}
EX void bound_low(ld val) {