From 998a74800c64c46284ff478f4ad6bac5fa3aaaec Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sun, 26 May 2024 21:15:26 +0200 Subject: [PATCH] colortables are now saved correctly --- config.cpp | 43 ++++++++++++++++++++++++++-------- rogueviz/nilrider/nilrider.cpp | 2 +- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/config.cpp b/config.cpp index df8bb11e..c5199d9d 100644 --- a/config.cpp +++ b/config.cpp @@ -750,6 +750,34 @@ EX shared_ptr param_custom_ld(ld& val, const parameter_names& return u; } +EX shared_ptr param_colortable(colortable& val, const parameter_names& n) { + shared_ptr u ( new custom_parameter ); + u->setup(n); + colortable dft = val; + u->last_value = -1; + u->custom_viewer = [] (char key) {}; + u->custom_value = [&val] () { return -1; }; + u->custom_affect = [&val] (void *v) { return &val == v; }; + u->custom_load = [&val] (const string& s) { + auto seq = split_string(s, ','); + val.resize(isize(seq)); + for(int i=0; icustom_save = [&val] { + bool first = true; + string str; + for(auto v: val) { if(first) first = false; else str += ","; str += itsh(v); } + return str; + }; + u->custom_do_save = [dft, &val] { return val != dft; }; + u->custom_clone = [u] (struct local_parameter_set& lps, void *value) { auto val = (colortable*) value; return param_colortable(*val, lps.mod(&*u)); }; + u->custom_reset = [dft, &val] { val = dft; }; + + u->default_key = 0; + u->is_editable = true; + return u; + } + EX ld bounded_mine_percentage = 0.1; EX int bounded_mine_quantity, bounded_mine_max; @@ -902,11 +930,6 @@ EX void initcs(charstyle &cs) { cs.lefthanded = false; } -EX void savecolortable(colortable& ct, string name) { - for(int i=0; iset_extra(draw_crosshair); param_b(mapeditor::drawplayer, "drawplayer"); - param_color((color_t&) ccolor::plain.ctab[0], "color:canvasback", false); param_color(backcolor, "color:background", false); param_color(forecolor, "color:foreground", false); @@ -1241,11 +1263,11 @@ EX void initConfig() { param_f(vid.multiplier_grid, parameter_names("mgrid", "mult:grid"), 1); param_color(dialog::dialogcolor, "color:dialog", false); for(auto p: ccolor::all) - savecolortable(p->ctab, s0+"canvas:"+p->name); - savecolortable(distcolors, "distance"); - savecolortable(minecolors, "mines"); + param_colortable(p->ctab, s0+"canvas:"+p->name); + param_colortable(distcolors, "distance"); + param_colortable(minecolors, "mines"); #if CAP_COMPLEX2 - savecolortable(brownian::colors, "color:brown"); + param_colortable(brownian::colors, "color:brown"); #endif for(int i=0; i param_ccolor(ccolor::data*& val, const parameter_names& n) { shared_ptr u ( new custom_parameter ); u->setup(n); + u->custom_viewer = [] (char key) {}; u->custom_value = [&val] { for(int i=0; ilast_value = u->custom_value(); u->custom_affect = [&val] (void *v) { return &val == v; }; diff --git a/rogueviz/nilrider/nilrider.cpp b/rogueviz/nilrider/nilrider.cpp index 4bf119d0..c505023c 100644 --- a/rogueviz/nilrider/nilrider.cpp +++ b/rogueviz/nilrider/nilrider.cpp @@ -585,7 +585,7 @@ local_parameter_set lps_nilrider("nilrider:"); void default_settings() { lps_add(lps_nilrider, vid.cells_drawn_limit, 1); - lps_add(lps_nilrider, ccolor::plain.ctab[0], 0); + lps_add(lps_nilrider, ccolor::plain.ctab, colortable{0}); lps_add(lps_nilrider, smooth_scrolling, true); lps_add(lps_nilrider, mapeditor::drawplayer, false); lps_add(lps_nilrider, backcolor, 0xC0C0FFFF);