From 43a3e8f030e02eba839141d2b3c9e82b94f73ac9 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sun, 5 May 2024 20:20:00 +0200 Subject: [PATCH] color change in rogueviz --- rogueviz/crystal-sokoban.cpp | 3 +-- rogueviz/grigorchuk.cpp | 18 ++++++++++-------- rogueviz/highdim-demo.cpp | 21 ++++++++------------- rogueviz/hyperbolic-analogs.cpp | 4 +--- rogueviz/hyperbolic-minesweeper-pres.cpp | 12 ++++++------ rogueviz/intra-demos.cpp | 12 ++++-------- rogueviz/magiccube.cpp | 3 +-- rogueviz/newconf.cpp | 8 ++++---- rogueviz/noniso-honeycombs.cpp | 12 ++++++------ rogueviz/pentagonal.cpp | 2 +- rogueviz/playing-with-impossibility.cpp | 12 ++++++------ rogueviz/rewriting.cpp | 2 +- rogueviz/rogueviz.h | 4 ++-- rogueviz/sag.cpp | 2 +- 14 files changed, 52 insertions(+), 63 deletions(-) diff --git a/rogueviz/crystal-sokoban.cpp b/rogueviz/crystal-sokoban.cpp index 011ff25d..bb401649 100644 --- a/rogueviz/crystal-sokoban.cpp +++ b/rogueviz/crystal-sokoban.cpp @@ -46,8 +46,7 @@ void run_sb() { crystal::set_crystal(6); set_variation(eVariation::pure); enable_canvas(); - patterns::whichCanvas = 'g'; - patterns::canvasback = 0x101010; + ccolor::set_plain(0x101010); check_cgi(); start_game(); diff --git a/rogueviz/grigorchuk.cpp b/rogueviz/grigorchuk.cpp index 74cf3741..f4906e6a 100644 --- a/rogueviz/grigorchuk.cpp +++ b/rogueviz/grigorchuk.cpp @@ -325,6 +325,8 @@ bool view_labels = true, view_lines = true; namespace hr { +extern ccolor::data grigorchuk_coloring; + struct hrmap_grigorchuk : hrmap_standard { heptagon *origin; @@ -411,8 +413,8 @@ struct hrmap_grigorchuk : hrmap_standard { if(grigorchuk::view_labels) queuestr(V, 0.3, grigorchuk::deform(dec[c->master]), 0xFFFFFF); - if(patterns::whichCanvas == 'G' && c->landparam == 0) - c->landparam = 0x102008 * (1 + ((hrmap_grigorchuk*)currentmap)->dec[c->master]->len); + if(ccolor::which == &grigorchuk_coloring && c->landparam == 0) + c->landparam = grigorchuk_coloring(c); drawcell(c, V * currentmap->master_relative(c, false)); @@ -436,6 +438,10 @@ struct hrmap_grigorchuk : hrmap_standard { eGeometry gGrigorchuk(eGeometry(-1)); +ccolor::data grigorchuk_coloring = ccolor::data("Grigorchuk", [] { return geometry == gGrigorchuk; }, [] (cell *c, ccolor::data& cco) { + return 0x102008 * (1 + ((hrmap_grigorchuk*)currentmap)->dec[c->master]->len); + }, {}); + void create_grigorchuk_geometry() { if(gGrigorchuk != eGeometry(-1)) return; ginf.push_back(ginf[gNormal]); @@ -449,6 +455,7 @@ void create_grigorchuk_geometry() { gi.menu_displayed_name = "Grigorchuk group"; gi.shortname = "Grig"; gi.default_variation = eVariation::pure; + ccolor::all.push_back(&grigorchuk_coloring); } int readArgsG() { @@ -483,11 +490,6 @@ int readArgsG() { auto hook = addHook(hooks_args, 100, readArgsG) + addHook(hooks_newmap, 100, [] { return geometry == gGrigorchuk ? new hrmap_grigorchuk : nullptr; }) - + addHook(patterns::hooks_generate_canvas, 100, [] (cell* c) { - if(patterns::whichCanvas == 'G' && geometry == gGrigorchuk) - return 0x102008 * (1 + ((hrmap_grigorchuk*)currentmap)->dec[c->master]->len); - return -1; - }) + addHook(dialog::hooks_display_dialog, 100, [] () { if(current_screen_cfunction() == showEuclideanMenu && geometry == gGrigorchuk) { dialog::addBoolItem_action(XLAT("Grigorchuk lines"), grigorchuk::view_lines, 'L'); @@ -516,7 +518,7 @@ auto hook = addHook(hooks_args, 100, readArgsG) if(mode == pmStart) { grigorchuk::grig_limit = 10000; gamestack::push(); - slide_backup(patterns::whichCanvas, 'G'); + slide_backup(ccolor::which, &grigorchuk_coloring); slide_backup(firstland, laCanvas); slide_backup(specialland, laCanvas); set_geometry(gGrigorchuk); diff --git a/rogueviz/highdim-demo.cpp b/rogueviz/highdim-demo.cpp index 361ffcaf..27c1c71c 100644 --- a/rogueviz/highdim-demo.cpp +++ b/rogueviz/highdim-demo.cpp @@ -74,8 +74,7 @@ void run_cpick() { crystal::set_crystal(6); set_variation(eVariation::pure); enable_canvas(); - patterns::whichCanvas = 'g'; - patterns::canvasback = 0; + ccolor::set_plain(0); check_cgi(); start_game(); current_center = currentmap->gamestart(); @@ -208,8 +207,7 @@ void run_sb() { crystal::set_crystal(6); set_variation(eVariation::pure); enable_canvas(); - patterns::whichCanvas = 'g'; - patterns::canvasback = 0; + ccolor::set_plain(0); check_cgi(); rv_hook(hooks_drawcell, 100, sokomap); start_game(); @@ -394,7 +392,7 @@ int mycanvas(cell *c) { } void enable() { - rv_hook(patterns::hooks_generate_canvas, 100, mycanvas); + rv_hook(ccolor::hooks_generate_canvas, 100, mycanvas); } auto explore_structure(int _shapeid) { @@ -407,7 +405,7 @@ auto explore_structure(int _shapeid) { stop_game(); set_geometry(geometry == gCrystal534 ? gCrystal534 : gCrystal344); enable_canvas(); - patterns::whichCanvas = ' '; + ccolor::which = &ccolor::plain; shapeid = _shapeid; enable(); crystal::crystal_period = 4; @@ -444,7 +442,7 @@ void house(int sides, int shape = 10) { crystal::set_crystal(sides); set_variation(eVariation::pure); enable_canvas(); - patterns::whichCanvas = ' '; + ccolor::which = &ccolor::plain; shapeid = shape; check_cgi(); enable(); @@ -466,7 +464,7 @@ tour::slide *gen_high_demo() { sync(mode, VC); if(mode == pmStart) { crystal::set_crystal(6); - patterns::whichCanvas = 'K'; + ccolor::which = &ccolor::crystal_colors; start_game(); } } @@ -479,7 +477,7 @@ tour::slide *gen_high_demo() { sync(mode, VC); if(mode == pmStart) { crystal::set_crystal(8); - patterns::whichCanvas = 'K'; + ccolor::which = &ccolor::crystal_colors; start_game(); } } @@ -563,10 +561,7 @@ tour::slide *gen_high_demo() { sync(mode, NO_VC | PLAYER); if(mode == pmStart) { crystal::set_crystal(6); - patterns::whichCanvas = 'c'; - colortables['c'][0] = 0x208020; - colortables['c'][1] = 0x105010; - patterns::canvasback = 0x101010; + ccolor::set_colors(ccolor::chessboard, {0x208020, 0x105010}); start_game(); auto & us = vid.cs; us.charid = 4; diff --git a/rogueviz/hyperbolic-analogs.cpp b/rogueviz/hyperbolic-analogs.cpp index c4ccfd30..4c506bd6 100644 --- a/rogueviz/hyperbolic-analogs.cpp +++ b/rogueviz/hyperbolic-analogs.cpp @@ -374,10 +374,8 @@ void enable() { vid.linequality = 4; enable_canvas(); - patterns::whichCanvas = 'F'; - colortables['F'][0] = 0x80C080; - colortables['F'][1] = 0x80A080; + ccolor::set_colors(ccolor::football, {0x80C080, 0x80A080}); pconf.scale = .3; vid.use_smart_range = 2; diff --git a/rogueviz/hyperbolic-minesweeper-pres.cpp b/rogueviz/hyperbolic-minesweeper-pres.cpp index 0290d0a0..13197f74 100644 --- a/rogueviz/hyperbolic-minesweeper-pres.cpp +++ b/rogueviz/hyperbolic-minesweeper-pres.cpp @@ -246,7 +246,7 @@ vector current_list; void mine_slide(tour::presmode mode, reaction_t set_geom, function()> celllister, function assigner) { using namespace tour; - patterns::canvasback = 0; + ccolor::plain.ctab = {0}; setCanvas(mode, '0'); if(mode == pmStart) { slide_backup(mapeditor::drawplayer, false); @@ -334,7 +334,7 @@ void enable_earth() { stop_game(); set_geometry(gSphere); enable_canvas(); - patterns::whichCanvas = 'F'; + ccolor::which = &ccolor::football; start_game(); texture::config.configname = "textures/earth.txc"; texture::config.load(); @@ -543,8 +543,8 @@ slide sweeper_slides[] = { stop_game(); set_geometry(g45); set_variation(eVariation::pure); - tour::slide_backup(colortables['c'][0], 0x104010); - tour::slide_backup(colortables['c'][1], 0x10F010); + tour::slide_backup(ccolor::chessboard.ctab[0], 0x104010); + tour::slide_backup(ccolor::chessboard.ctab[1], 0x10F010); tour::slide_backup(vid.use_smart_range, 2); tour::slide_backup(vid.smart_range_detail, 1); start_game(); @@ -562,7 +562,7 @@ slide sweeper_slides[] = { setCanvas(mode, 'g'); non_game_slide_scroll(mode); if(mode == pmStart) { - tour::slide_backup(patterns::canvasback, 0x10A010); + tour::slide_backup(ccolor::plain.ctab[0], 0x10A010); stop_game(); set_geometry(gBinary4); set_variation(eVariation::pure); @@ -840,7 +840,7 @@ slide sweeper_slides[] = { setCanvas(mode, 'g'); non_game_slide_scroll(mode); if(mode == pmStart) { - tour::slide_backup(patterns::canvasback, 0x10A010); + tour::slide_backup(ccolor::plain.ctab[0], 0x10A010); stop_game(); set_geometry(gBinary4); set_variation(eVariation::pure); diff --git a/rogueviz/intra-demos.cpp b/rogueviz/intra-demos.cpp index 37b93c18..9960cb38 100644 --- a/rogueviz/intra-demos.cpp +++ b/rogueviz/intra-demos.cpp @@ -217,8 +217,7 @@ void create_intra_solv() { } void create_intra_120() { - patterns::whichCanvas = 'r'; - patterns::rwalls = 0; + ccolor::set_random(0); if(intra::in) intra::become(); else stop_game(); arcm::current.parse("8,4,6"); @@ -261,8 +260,7 @@ void create_intra_120() { } void create_intra_1440() { - patterns::whichCanvas = 'r'; - patterns::rwalls = 0; + ccolor::set_random(0); if(intra::in) intra::become(); else stop_game(); set_geometry(gCell8); @@ -330,8 +328,7 @@ vector portals; void create_intra_bxe() { println(hlog, "called create_intra_bxe"); - patterns::whichCanvas = 'r'; - patterns::rwalls = 100; + ccolor::set_random(100); if(intra::in) intra::become(); else stop_game(); hybrid::csteps = 0; @@ -404,8 +401,7 @@ void recurse_portal_solv2(int r, cell *cl, cell *cr) { void create_intra_sol() { println(hlog, "called create_intra_sol"); - patterns::whichCanvas = 'r'; - patterns::rwalls = 100; + ccolor::set_random(100); if(intra::in) intra::become(); else stop_game(); diff --git a/rogueviz/magiccube.cpp b/rogueviz/magiccube.cpp index ffbde694..a3475acf 100644 --- a/rogueviz/magiccube.cpp +++ b/rogueviz/magiccube.cpp @@ -144,8 +144,7 @@ void magic(int sides) { crystal::set_crystal(sides); set_variation(eVariation::pure); enable_canvas(); - patterns::whichCanvas = 'g'; - patterns::canvasback = back; + ccolor::set_plain(back); check_cgi(); start_game(); diff --git a/rogueviz/newconf.cpp b/rogueviz/newconf.cpp index 355548fb..e605ee9e 100644 --- a/rogueviz/newconf.cpp +++ b/rogueviz/newconf.cpp @@ -559,7 +559,7 @@ void pick_pattern() { dialog::add_action([] { chg_pattern([] { enable_canvas(); - patterns::whichCanvas = 'B'; + ccolor::which = &ccolor::sides; }); }); @@ -570,7 +570,7 @@ void pick_pattern() { gp::param.second = 0; set_variation(eVariation::goldberg); enable_canvas(); - patterns::whichCanvas = 'F'; + ccolor::which = &ccolor::football; }); }); @@ -579,7 +579,7 @@ void pick_pattern() { chg_pattern([] { set_geometry(gOctagon); enable_canvas(); - patterns::whichCanvas = 'T'; + ccolor::which = &ccolor::zebra_stripes; }); }); @@ -612,7 +612,7 @@ void pick_pattern() { arcm::current.parse("4^5"); set_geometry(gArchimedean); enable_canvas(); - patterns::whichCanvas = 'A'; + ccolor::which = &ccolor::shape; }); }); diff --git a/rogueviz/noniso-honeycombs.cpp b/rogueviz/noniso-honeycombs.cpp index 3f8f16bd..bc384854 100644 --- a/rogueviz/noniso-honeycombs.cpp +++ b/rogueviz/noniso-honeycombs.cpp @@ -26,10 +26,10 @@ auto geoslide(eGeometry g, char canvas, int jhole, int jblock) { tour::slide_backup(sightranges[gSol], 7); tour::slide_backup(sightranges[gSpace435], 7); vid.texture_step = 4; - tour::slide_backup(patterns::jhole, jhole); - tour::slide_backup(patterns::rwalls, jhole); - tour::slide_backup(patterns::jblock, jblock); - tour::slide_backup(patterns::whichCanvas, canvas); + tour::slide_backup(ccolor::jhole, jhole); + tour::slide_backup(ccolor::rwalls, jhole); + tour::slide_backup(ccolor::jblock, jblock); + tour::slide_backup(ccolor::which, ccolor::legacy(canvas)); tour::slide_backup(vid.linewidth, vid.linewidth / 10); start_game(); if(jblock < 0) { @@ -45,7 +45,7 @@ auto geoslide(eGeometry g, char canvas, int jhole, int jblock) { if(in_special && among(mode, pmGeometrySpecial, pmStop)) { in_special = false; gamestack::pop(); - patterns::whichCanvas = canvas; + ccolor::which = ccolor::legacy(canvas); vid.grid = false; fat_edges = false; sightranges[gSpace435] = 7; @@ -54,7 +54,7 @@ auto geoslide(eGeometry g, char canvas, int jhole, int jblock) { else if(mode == pmGeometrySpecial && !in_special) { in_special = true; gamestack::push(); - patterns::whichCanvas = 'g'; + ccolor::set_plain(0); vid.grid = true; stdgridcolor = 0xFFFF00FF; fat_edges = true; diff --git a/rogueviz/pentagonal.cpp b/rogueviz/pentagonal.cpp index 63666350..e016281f 100644 --- a/rogueviz/pentagonal.cpp +++ b/rogueviz/pentagonal.cpp @@ -114,7 +114,7 @@ void run_snub(int v, int w) { check_cgi(); cgi.require_basics(); specialland = laCanvas; - patterns::whichCanvas = 'A'; + ccolor::which = &ccolor::shape; // vid.wallmode = 1; printf("start game\n"); printf("distlimit = %d\n", cgi.base_distlimit); diff --git a/rogueviz/playing-with-impossibility.cpp b/rogueviz/playing-with-impossibility.cpp index 75ce163f..a08f68ac 100644 --- a/rogueviz/playing-with-impossibility.cpp +++ b/rogueviz/playing-with-impossibility.cpp @@ -591,7 +591,7 @@ void enable_earth() { stop_game(); set_geometry(gSphere); enable_canvas(); - patterns::whichCanvas = 'F'; + ccolor::which = &ccolor::football; start_game(); texture::config.configname = "textures/earth.txc"; texture::config.load(); @@ -635,8 +635,8 @@ slide dmv_slides[] = { set_geometry(gArchimedean); arcm::current.parse("3^6"); set_variation(eVariation::pure); - slide_backup(colortables['F'][0], 0xC0FFC0); - slide_backup(colortables['F'][1], 0x80FF80); + slide_backup(ccolor::football.ctab[0], 0xC0FFC0); + slide_backup(ccolor::football.ctab[1], 0x80FF80); slide_backup(pconf.alpha, 1); slide_backup(pconf.scale, 1); start_game(); @@ -708,8 +708,8 @@ slide dmv_slides[] = { slide_backup(specialland, laCanvas); set_geometry(gNormal); set_variation(eVariation::bitruncated); - slide_backup(colortables['F'][0], 0xC0FFC0); - slide_backup(colortables['F'][1], 0x80FF80); + slide_backup(ccolor::football.ctab[0], 0xC0FFC0); + slide_backup(ccolor::football.ctab[1], 0x80FF80); slide_backup(pconf.alpha, 1); slide_backup(pconf.scale, 1); slide_backup(rug::mouse_control_rug, true); @@ -755,7 +755,7 @@ slide dmv_slides[] = { [] (presmode mode) { if(mode == pmStart) { - slide_backup(patterns::rwalls, 10); + slide_backup(ccolor::rwalls, 10); slide_backup(vid.fov, 120); } diff --git a/rogueviz/rewriting.cpp b/rogueviz/rewriting.cpp index c77e0a6f..6f9989fa 100644 --- a/rogueviz/rewriting.cpp +++ b/rogueviz/rewriting.cpp @@ -108,7 +108,7 @@ bool labeller(cell* c, const shiftmatrix& V) { if(m) { string s = m->asg[c->master].second; cgi.scalefactor = 1; - queuestr(V, 0.5, s, colortables['j'][c->master->distance+1]); + queuestr(V, 0.5, s, ccolor::jmap.ctab[c->master->distance+1]); } return false; } diff --git a/rogueviz/rogueviz.h b/rogueviz/rogueviz.h index 6f05570d..ae24282d 100644 --- a/rogueviz/rogueviz.h +++ b/rogueviz/rogueviz.h @@ -179,7 +179,7 @@ namespace rogueviz { template function roguevizslide(char c, const T& t, const U& f) { return [c,t,f] (presmode mode) { f(mode); - patterns::canvasback = 0x101010; + ccolor::plain.ctab = {0x101010}; setCanvas(mode, c); if(mode == 1 || mode == pmGeometryStart) t(); @@ -201,7 +201,7 @@ template function roguevizslide(char c, const T& t) { r template function roguevizslide_action(char c, const T& t, const U& act) { return [c,t,act] (presmode mode) { - patterns::canvasback = 0x101010; + ccolor::plain.ctab = {0x101010}; setCanvas(mode, c); if(mode == pmStart || mode == pmGeometryStart) t(); diff --git a/rogueviz/sag.cpp b/rogueviz/sag.cpp index 873e7820..a7f16fc4 100644 --- a/rogueviz/sag.cpp +++ b/rogueviz/sag.cpp @@ -1097,7 +1097,7 @@ namespace sag { create_viz(); for(int i=0; i