mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-05-12 20:24:06 +00:00
fix to propagate_scale_change
This commit is contained in:
parent
ee788c8822
commit
d9dec7f841
35
geometry.cpp
35
geometry.cpp
@ -1451,25 +1451,26 @@ EX void check_cgi() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** auxiliary for propagate_scale_change */
|
||||||
|
template<class T> void affect_scale_change(geometry_information*& alt_cgip, const T& switcher) {
|
||||||
|
auto gi = alt_cgip;
|
||||||
|
bool changed = false;
|
||||||
|
switcher([&] {
|
||||||
|
check_cgi();
|
||||||
|
changed = gi != cgip;
|
||||||
|
if(changed && (gi->state & 1)) cgi.require_basics();
|
||||||
|
if(changed && (gi->state & 2)) cgi.require_shapes();
|
||||||
|
gi = alt_cgip = cgip;
|
||||||
|
});
|
||||||
|
alt_cgip = gi;
|
||||||
|
if(changed) switcher(propagate_scale_change);
|
||||||
|
};
|
||||||
|
|
||||||
EX void propagate_scale_change() {
|
EX void propagate_scale_change() {
|
||||||
|
|
||||||
auto affect = [] (geometry_information*& alt_cgip, const auto& switcher) {
|
if(mhybrid) affect_scale_change(hybrid::underlying_cgip, [] (const auto& f) { hybrid::in_underlying_geometry(f); });
|
||||||
auto gi = alt_cgip;
|
if(hybrid::pmap) affect_scale_change(hybrid::pcgip, [] (const auto& f) { hybrid::in_actual(f); });
|
||||||
bool changed = false;
|
if(fake::in()) affect_scale_change(fake::underlying_cgip, [] (const auto& f) { fake::in_underlying_geometry(f); });
|
||||||
switcher([&] {
|
|
||||||
check_cgi();
|
|
||||||
changed = gi != cgip;
|
|
||||||
if(changed && (gi->state & 1)) cgi.require_basics();
|
|
||||||
if(changed && (gi->state & 2)) cgi.require_shapes();
|
|
||||||
gi = alt_cgip = cgip;
|
|
||||||
});
|
|
||||||
alt_cgip = gi;
|
|
||||||
if(changed) switcher(propagate_scale_change);
|
|
||||||
};
|
|
||||||
|
|
||||||
if(mhybrid) affect(hybrid::underlying_cgip, [] (const auto& f) { hybrid::in_underlying_geometry(f); });
|
|
||||||
if(hybrid::pmap) affect(hybrid::pcgip, [] (const auto& f) { hybrid::in_actual(f); });
|
|
||||||
if(fake::in()) affect(fake::underlying_cgip, [] (const auto& f) { fake::in_underlying_geometry(f); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_cgis() {
|
void clear_cgis() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user