mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
nilrider:: basic save functionality (no load though)
This commit is contained in:
parent
3072a998ba
commit
62331b43f1
@ -5,6 +5,7 @@
|
||||
#include "level.cpp"
|
||||
#include "planning.cpp"
|
||||
#include "solver.cpp"
|
||||
#include "save.cpp"
|
||||
|
||||
namespace nilrider {
|
||||
|
||||
@ -254,13 +255,19 @@ void main_menu() {
|
||||
dialog::addItem("view the replay", 'v');
|
||||
dialog::add_action(toggle_replay);
|
||||
|
||||
dialog::addItem("save the replay", 'e');
|
||||
dialog::addItem("save the replay", 's');
|
||||
dialog::add_action([] {
|
||||
vector<int> ang;
|
||||
for(auto& h: curlev->history) ang.push_back(heading_to_int(h.heading_angle));
|
||||
curlev->manual_replays.emplace_back(manual_replay{new_replay_name(), std::move(ang)});
|
||||
save();
|
||||
});
|
||||
}
|
||||
else {
|
||||
dialog::addItem("save this plan", 's');
|
||||
dialog::add_action([] {
|
||||
curlev->plan_replays.emplace_back(plan_replay{new_replay_name(), curlev->plan});
|
||||
save();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@ struct planpoint {
|
||||
planpoint(hyperpoint a, hyperpoint v): at(a), vel(v) {};
|
||||
};
|
||||
|
||||
using plan_t = vector<planpoint>;
|
||||
|
||||
constexpr flagtype nrlPolar = Flag(1);
|
||||
|
||||
struct statue {
|
||||
@ -47,6 +49,16 @@ struct triangledata {
|
||||
array<color_t, 7> colors;
|
||||
};
|
||||
|
||||
struct manual_replay {
|
||||
string name;
|
||||
vector<int> headings;
|
||||
};
|
||||
|
||||
struct plan_replay {
|
||||
string name;
|
||||
plan_t plan;
|
||||
};
|
||||
|
||||
struct level {
|
||||
string name;
|
||||
char hotkey;
|
||||
@ -94,8 +106,11 @@ struct level {
|
||||
|
||||
vector<timestamp> history;
|
||||
|
||||
vector<manual_replay> manual_replays;
|
||||
vector<plan_replay> plan_replays;
|
||||
|
||||
/** plan for the planning mode */
|
||||
vector<planpoint> plan;
|
||||
plan_t plan;
|
||||
void init_plan();
|
||||
bool simulate();
|
||||
void draw_planning_screen();
|
||||
|
37
rogueviz/nilrider/save.cpp
Normal file
37
rogueviz/nilrider/save.cpp
Normal file
@ -0,0 +1,37 @@
|
||||
namespace nilrider {
|
||||
|
||||
const string ver = "0.1";
|
||||
|
||||
string new_replay_name() {
|
||||
time_t timer;
|
||||
timer = time(NULL);
|
||||
char timebuf[128];
|
||||
strftime(timebuf, 128, "%y%m%d-%H%M%S", localtime(&timer));
|
||||
return timebuf;
|
||||
}
|
||||
|
||||
void save() {
|
||||
println(hlog, "save called");
|
||||
fhstream f("nilrider.save", "wt");
|
||||
println(f, "version ", ver);
|
||||
for(auto l: all_levels) {
|
||||
for(auto& p: l->manual_replays) {
|
||||
println(f, "*MANUAL");
|
||||
println(f, l->name);
|
||||
println(f, p.name);
|
||||
println(f, isize(p.headings));
|
||||
for(auto t: p.headings) println(f, t);
|
||||
println(f);
|
||||
}
|
||||
for(auto& p: l->plan_replays) {
|
||||
println(f, "*PLANNING");
|
||||
println(f, l->name);
|
||||
println(f, p.name);
|
||||
println(f, isize(p.plan));
|
||||
for(auto t: p.plan) println(f, format("%.6f %.6f %.6f %.6f", t.at[0], t.at[1], t.vel[0], t.vel[1]));
|
||||
println(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user