mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-08-05 21:33:58 +00:00
nilrider:: saving/viewing goals
This commit is contained in:
parent
09266b3059
commit
bc8811530f
@ -110,6 +110,9 @@ void level::init() {
|
|||||||
/* start facing slightly to the right from the slope */
|
/* start facing slightly to the right from the slope */
|
||||||
for(auto b: {true, false}) while(true) {
|
for(auto b: {true, false}) while(true) {
|
||||||
auto c = start;
|
auto c = start;
|
||||||
|
/* no treasures are known, which confuses goals */
|
||||||
|
dynamicval<bool> lop1(loaded_or_planned, true);
|
||||||
|
dynamicval<bool> lop2(planning_mode, false);
|
||||||
if(c.tick(this) == b) break;
|
if(c.tick(this) == b) break;
|
||||||
start.heading_angle -= 1 * degree;
|
start.heading_angle -= 1 * degree;
|
||||||
}
|
}
|
||||||
|
@ -275,9 +275,29 @@ void pick_game() {
|
|||||||
dialog::init(XLAT("how do you want to play?"), 0xC0C0FFFF, 150, 100);
|
dialog::init(XLAT("how do you want to play?"), 0xC0C0FFFF, 150, 100);
|
||||||
dialog::addSelItem("selected track", curlev->name, 't');
|
dialog::addSelItem("selected track", curlev->name, 't');
|
||||||
dialog::add_action_push(pick_level);
|
dialog::add_action_push(pick_level);
|
||||||
dialog::addInfo(curlev->longdesc);
|
dialog::addBreak(50);
|
||||||
|
dialog::addHelp(curlev->longdesc);
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
add_edit(planning_mode);
|
add_edit(planning_mode);
|
||||||
|
|
||||||
|
int gid = 0;
|
||||||
|
for(auto& g: curlev->goals) {
|
||||||
|
dialog::addBreak(50);
|
||||||
|
auto man = curlev->records[0][gid];
|
||||||
|
auto plan = curlev->records[1][gid];
|
||||||
|
if(man && plan)
|
||||||
|
dialog::addInfo("manual: " + format_timer(man) + " planning: " + format_timer(plan), g.color);
|
||||||
|
else if(man)
|
||||||
|
dialog::addInfo("manual: " + format_timer(man), g.color);
|
||||||
|
else if(plan)
|
||||||
|
dialog::addInfo("planning: " + format_timer(plan), g.color);
|
||||||
|
else
|
||||||
|
dialog::addInfo("goal not obtained:", g.color);
|
||||||
|
dialog::addBreak(50);
|
||||||
|
dialog::addHelp(g.desc);
|
||||||
|
gid++;
|
||||||
|
}
|
||||||
|
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
dialog::addBack();
|
dialog::addBack();
|
||||||
dialog::display();
|
dialog::display();
|
||||||
@ -425,10 +445,10 @@ void main_menu() {
|
|||||||
dialog::add_action(pop_and_push_replays);
|
dialog::add_action(pop_and_push_replays);
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog::addItem("change track or game settings", 't');
|
dialog::addItem("track / mode / goals", 't');
|
||||||
dialog::add_action_push(pick_game);
|
dialog::add_action_push(pick_game);
|
||||||
|
|
||||||
dialog::addItem("change other settings", 'o');
|
dialog::addItem("change settings", 'o');
|
||||||
dialog::add_action_push(settings);
|
dialog::add_action_push(settings);
|
||||||
|
|
||||||
dialog::addItem("quit", 'q');
|
dialog::addItem("quit", 'q');
|
||||||
|
@ -202,4 +202,6 @@ hyperpoint sym_to_heis(hyperpoint H);
|
|||||||
extern int reversals;
|
extern int reversals;
|
||||||
extern bool loaded_or_planned;
|
extern bool loaded_or_planned;
|
||||||
extern bool planning_mode;
|
extern bool planning_mode;
|
||||||
|
|
||||||
|
void save();
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,17 @@ void save() {
|
|||||||
println(hlog, "save called");
|
println(hlog, "save called");
|
||||||
fhstream f("nilrider.save", "wt");
|
fhstream f("nilrider.save", "wt");
|
||||||
println(f, "NilRider version ", ver);
|
println(f, "NilRider version ", ver);
|
||||||
|
for(auto l: all_levels) {
|
||||||
|
for(int i: {0,1}) {
|
||||||
|
int qg = isize(l->records[i]);
|
||||||
|
for(int g=0; g<qg; g++)
|
||||||
|
if(l->records[i][g]) {
|
||||||
|
println(f, "*RECORD");
|
||||||
|
println(f, l->name);
|
||||||
|
println(f, format("%d %d %f", i, g, l->records[i][g]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
for(auto l: all_levels) {
|
for(auto l: all_levels) {
|
||||||
for(auto& p: l->manual_replays) {
|
for(auto& p: l->manual_replays) {
|
||||||
println(f, "*MANUAL");
|
println(f, "*MANUAL");
|
||||||
@ -71,8 +82,22 @@ void load() {
|
|||||||
if(l) l->plan_replays.emplace_back(plan_replay{name, std::move(plan)});
|
if(l) l->plan_replays.emplace_back(plan_replay{name, std::move(plan)});
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if(s == "*RECORD") {
|
||||||
|
string lev = scanline_noblank(f);
|
||||||
|
int i = scan<int>(f);
|
||||||
|
int g = scan<int>(f);
|
||||||
|
ld t = scan<ld>(f);
|
||||||
|
auto l = level_by_name(lev);
|
||||||
|
if(l) {
|
||||||
|
int qg = isize(l->goals);
|
||||||
|
if(i < 0 || i > 1) println(hlog, "error: wrong number as i");
|
||||||
|
if(g < 0 || g >= qg) println(hlog, "error: wrong goal index");
|
||||||
|
l->records[i].resize(qg, 0);
|
||||||
|
l->records[i][g] = t;
|
||||||
|
}
|
||||||
println(hlog, "error: unknown content ", s);
|
println(hlog, "error: unknown content ", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,7 @@ void level::solve() {
|
|||||||
ts.where = point0;
|
ts.where = point0;
|
||||||
ts.collected_triangles = v.collected;
|
ts.collected_triangles = v.collected;
|
||||||
ts.timer = 0;
|
ts.timer = 0;
|
||||||
|
loaded_or_planned = true;
|
||||||
ts.collect(this);
|
ts.collect(this);
|
||||||
checkerparam p {&ts, this, 0};
|
checkerparam p {&ts, this, 0};
|
||||||
auto res = goals[goal_id].check(p);
|
auto res = goals[goal_id].check(p);
|
||||||
|
@ -98,9 +98,14 @@ bool timestamp::collect(level *lev) {
|
|||||||
else if(res == grSuccess) {
|
else if(res == grSuccess) {
|
||||||
goals |= Flag(gid);
|
goals |= Flag(gid);
|
||||||
lev->current_score[gid] = timer;
|
lev->current_score[gid] = timer;
|
||||||
|
if(planning_mode || !loaded_or_planned) {
|
||||||
auto &res = lev->records[planning_mode][gid];
|
auto &res = lev->records[planning_mode][gid];
|
||||||
if(res == 0 || timer < res)
|
if(res == 0 || timer < res) {
|
||||||
res = timer;
|
res = timer;
|
||||||
|
println(hlog, "saved -- success on goal ", gid, " in time ", timer);
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
gid++;
|
gid++;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user