From 8388a448e789869ce0c3416d0328bcddf267a9ca Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 11 May 2019 17:20:57 +0200 Subject: [PATCH] 3d:: an option to limit cell generation --- config.cpp | 9 +++++++++ hyper.h | 1 + hypgraph.cpp | 10 ++++++++-- screenshot.cpp | 1 + 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/config.cpp b/config.cpp index df0bfaff..bf739336 100644 --- a/config.cpp +++ b/config.cpp @@ -355,6 +355,7 @@ void initConfig() { addsaver(vid.smart_range_detail, "smart-range-detail", 8); addsaver(vid.smart_range_detail_3, "smart-range-detail", 30); addsaver(vid.cells_drawn_limit, "limit on cells drawn", 10000); + addsaver(vid.cells_generated_limit, "limit on cells generated", 25); addsaver(vid.skiprope, "mobius", 0); @@ -629,6 +630,14 @@ void add_cells_drawn(char c = 'C') { ); dialog::scaleLog(); }); + if(WDIM == 3 || vid.use_smart_range == 2) { + dialog::addSelItem(XLAT("limit generation per frame"), its(vid.cells_generated_limit), 'L'); + dialog::add_action([] () { + dialog::editNumber(vid.cells_generated_limit, 1, 1000, log(10), 25, XLAT("limit generation per frame"), + XLAT("In the 3D mode, lowering this value may help if the game lags while exploring new areas.") + ); + }); + } } void edit_sightrange() { diff --git a/hyper.h b/hyper.h index fb577edc..99f52f54 100644 --- a/hyper.h +++ b/hyper.h @@ -1160,6 +1160,7 @@ struct videopar { ld smart_range_detail;// minimum visible cell for modes 1 and 2 ld smart_range_detail_3;// minimum visible cell in 3D (for mode 2, there is no mode 1) int cells_drawn_limit; + int cells_generated_limit; // limit on cells generated per frame ld skiprope; diff --git a/hypgraph.cpp b/hypgraph.cpp index 969caf73..145c7722 100644 --- a/hypgraph.cpp +++ b/hypgraph.cpp @@ -1272,7 +1272,7 @@ void panning(hyperpoint hf, hyperpoint ht) { playermoved = false; } -int cells_drawn; +int cells_drawn, cells_generated; void fullcenter() { conformal::path_for_lineanimation.clear(); @@ -1690,6 +1690,8 @@ bool do_draw(cell *c, const transmatrix& T) { if(cells_drawn > vid.cells_drawn_limit) return false; if(vid.use_smart_range) { if(cells_drawn >= 50 && !in_smart_range(T)) return false; + if(c->mpdist > 7 && cells_generated > vid.cells_generated_limit) return false; + cells_generated++; setdist(c, 7, c); } else { @@ -1720,7 +1722,11 @@ bool do_draw(cell *c, const transmatrix& T) { if(cells_drawn > vid.cells_drawn_limit) return false; bool usr = vid.use_smart_range || quotient || euwrap; if(usr && cells_drawn >= 50 && !in_smart_range(T)) return false; - if(vid.use_smart_range == 2) setdist(c, 7, c); + if(vid.use_smart_range == 2) { + if(cells_generated > vid.cells_generated_limit) return false; + setdist(c, 7, c); + cells_generated++; + } return true; } diff --git a/screenshot.cpp b/screenshot.cpp index a5d6a753..d153954e 100644 --- a/screenshot.cpp +++ b/screenshot.cpp @@ -312,6 +312,7 @@ void take(string fname, const function& what) { dynamicval v2(inHighQual, true); dynamicval v6(auraNOGL, true); dynamicval vn(nohud, nohud || hide_hud); + dynamicval cgl(vid.cells_generated_limit, 9999999); vid.smart_range_detail *= multiplier; darken = 0;