Steam rich presence

This commit is contained in:
Zeno Rogue 2020-01-06 22:03:45 +01:00
parent 9d0d0fb182
commit 2ec37a4a6d
3 changed files with 89 additions and 25 deletions

View File

@ -834,6 +834,61 @@ EX void achievement_victory(bool hyper) {
/** call the achievement callbacks */
EX void achievement_pump();
EX string get_rich_presence_text() {
#if CAP_DAILY
if(daily::on)
return "Strange Challenge #" + its(daily::daily_id) + ", score " + its(gold());
#endif
if(tour::on)
return "Guided Tour";
string res;
if(geometry != gNormal || !BITRUNCATED)
res = res + full_geometry_name() + " ";
if(chaosmode) res += "chaos ";
if(shmup::on) res += "shmup ";
if(dual::state) res += "dual ";
if(randomPatternsMode) res += "random ";
if(inv::on) res += "OSM ";
if(multi::players > 1) res += "multi ";
if(cheater || among(cwt.at->land, laCanvas, laCA))
return res + "(?)";
if(yendor::on) {
res += "Yendor Challenge: " + yendor::name(yendor::challenge);
if(items[itOrbYendor]) res += " (level " + its(items[itOrbYendor]) + ")";
return res;
}
if(peace::on) return res + "peaceful";
if(tactic::on)
return res + "PTM: " + linf[specialland].name + " $" + its(gold());
if(princess::challenge) return res + "Princess Challenge";
if(racing::on) {
using namespace racing;
res = res + "racing in " + linf[specialland].name;
for(int i=0; i<multi::players; i++) {
if(race_finish_tick[i])
res += racetimeformat(race_finish_tick[i] - race_start_tick);
}
return res;
}
res += linf[cwt.at->land].name;
res += ", " + its(gold()) + " $$$";
return res;
}
#ifndef HAVE_ACHIEVEMENTS
void achievement_pump() {}
#endif

View File

@ -504,6 +504,17 @@ EX void select_quotient() {
}
}
EX string full_geometry_name() {
string qstring = ginf[geometry].quotient_name;
bool variable =
!(prod || hybri || bt::in() || WDIM == 3 || kite::in() || arb::in());
string fgname = XLAT(ginf[geometry].tiling_name);
if(qstring != "none") fgname += " " + XLAT(qstring);
if(variable) fgname = gp::operation_name() + " " + fgname;
return fgname;
}
EX void showEuclideanMenu() {
// for(int i=2; i<lt; i++) landvisited[i] = true;
@ -662,8 +673,6 @@ EX void showEuclideanMenu() {
}
#endif
bool variable = false;
if(prod) {
dialog::addSelItem(XLAT("Z-level height factor"), fts(vid.plevel_factor), 'Z');
dialog::add_action([] {
@ -689,7 +698,6 @@ EX void showEuclideanMenu() {
}
else if(WDIM == 3 || kite::in() || arb::in()) dialog::addBreak(100);
else {
variable = true;
dialog::addSelItem(XLAT("variations"), gp::operation_name(), 'v');
dialog::add_action([] {
if(0) ;
@ -799,11 +807,7 @@ EX void showEuclideanMenu() {
dialog::addBreak(150);
string fgname = XLAT(ginf[geometry].tiling_name);
if(qstring != "none") fgname += " " + XLAT(qstring);
if(variable) fgname = gp::operation_name() + " " + fgname;
dialog::addTitle(XLAT("info about: %1", fgname), 0xFFFFFF, 150);
dialog::addTitle(XLAT("info about: %1", full_geometry_name()), 0xFFFFFF, 150);
if(WDIM == 2 && !arb::in() && !kite::in()) dialog::addSelItem(XLAT("faces per vertex"), spf, 0);

View File

@ -147,7 +147,6 @@ EX namespace yendor {
return laNone;
}
string name;
eLand first, second, last;
#if HDR
@ -654,6 +653,27 @@ EX namespace yendor {
return c - 'A' + 1 + 26;
return 0;
}
EX string name(int i) {
yendorlevel& ylev(levels[i]);
string s = XLATT1(ylev.l);
if(!euclid) {
if(ylev.flags & YF_CHAOS) { s = "Chaos mode"; }
if(ylev.flags & YF_NEAR_IVY) { s += "+"; s += XLATT1(laJungle); }
if(ylev.flags & YF_NEAR_FJORD) { s += "+"; s += XLATT1(laLivefjord); }
if(ylev.flags & YF_NEAR_TENT) { s += "+"; s += XLATT1(laRlyeh); }
if(ylev.flags & YF_NEAR_ELEM) { s += "+"; s += XLATT1(laElementalWall); }
if(ylev.flags & YF_NEAR_OVER) { s += "+"; s += XLATT1(laOvergrown); }
if(ylev.flags & YF_NEAR_RED) { s += "+"; s += XLATT1(laRedRock); }
if(ylev.flags & YF_START_AL) { s += "+"; s += XLATT1(laAlchemist); }
if(ylev.flags & YF_DEAD) { s += "+"; s += XLATT1(itGreenStone); }
if(ylev.flags & YF_RECALL) { s += "+"; s += XLATT1(itOrbRecall); }
}
return s;
}
EX void showMenu() {
set_priority_board(LB_YENDOR_CHALLENGE);
@ -663,24 +683,9 @@ EX namespace yendor {
for(int i=1; i<YENDORLEVELS; i++) {
string s;
yendorlevel& ylev(levels[i]);
if(autocheat || levelUnlocked(i)) {
s = XLATT1(ylev.l);
if(!euclid) {
if(ylev.flags & YF_CHAOS) { s = "Chaos mode"; }
if(ylev.flags & YF_NEAR_IVY) { s += "+"; s += XLATT1(laJungle); }
if(ylev.flags & YF_NEAR_FJORD) { s += "+"; s += XLATT1(laLivefjord); }
if(ylev.flags & YF_NEAR_TENT) { s += "+"; s += XLATT1(laRlyeh); }
if(ylev.flags & YF_NEAR_ELEM) { s += "+"; s += XLATT1(laElementalWall); }
if(ylev.flags & YF_NEAR_OVER) { s += "+"; s += XLATT1(laOvergrown); }
if(ylev.flags & YF_NEAR_RED) { s += "+"; s += XLATT1(laRedRock); }
if(ylev.flags & YF_START_AL) { s += "+"; s += XLATT1(laAlchemist); }
if(ylev.flags & YF_DEAD) { s += "+"; s += XLATT1(itGreenStone); }
if(ylev.flags & YF_RECALL) { s += "+"; s += XLATT1(itOrbRecall); }
}
s = name(i);
}
else {