diff --git a/hud.cpp b/hud.cpp index e56133b6..29b753e1 100644 --- a/hud.cpp +++ b/hud.cpp @@ -60,7 +60,8 @@ enum eGlyphsortorder { EX eGlyphsortorder glyphsortorder; EX string pinnedglyphs; -EX bool glyphpinned[int(ittypes) + int(motypes)]; +EX vector revglyphpinned; +EX unsigned glyphpinned[int(ittypes) + int(motypes)]; int zero = 0; @@ -84,14 +85,19 @@ int glyphphase[glyphs]; int glyph_lastticks; EX void updateglyphpinned() { - for(int i=0; i= 0 && i < glyphs) glyphpinned[i] = true; + if(i >= 0 && i < glyphs) { + revglyphpinned.push_back(i); + glyphpinned[i] = ++n; + } } catch(hr_parse_exception&) { continue; @@ -102,8 +108,8 @@ EX void updateglyphpinned() { EX void updatepinnedglyphs() { std::stringstream ss; - for(int i=0; i glyphpinned[j]; + return glyphpinned[i] - 1 < glyphpinned[j] - 1; // We subtract 1 from both sides to make 0 wrap around, so that it compares greater than any positive value if(subclass(i) != subclass(j)) return subclass(i) < subclass(j); if(glyphsortorder == gsoFirstTop) diff --git a/menus.cpp b/menus.cpp index a68e1a31..2c9cb32f 100644 --- a/menus.cpp +++ b/menus.cpp @@ -184,7 +184,14 @@ EX void showOverview() { else if(udiv == 2 && umod < ittypes) { gotoHelp(generateHelpForItem(eItem(umod))); help_extensions.push_back(help_extension{'p', glyphpinned[umod] ? XLAT("unpin from HUD") : XLAT("pin to HUD"), [umod] () { - glyphpinned[umod] ^= true; + if(glyphpinned[umod]) { + revglyphpinned.erase(std::remove_if(revglyphpinned.begin(), revglyphpinned.end(), [umod] (int x) { return x == umod; }), revglyphpinned.end()); + glyphpinned[umod] = 0; + } + else { + revglyphpinned.push_back(umod); + glyphpinned[umod] = revglyphpinned.size(); + } updatepinnedglyphs(); popScreen(); }});