1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-05 05:36:17 +00:00

smoothcam:: moved to namespace rogueviz

This commit is contained in:
Zeno Rogue 2023-05-15 02:04:49 +02:00
parent 3692ef68b9
commit 58a1b085c7

View File

@ -8,22 +8,65 @@
// to add: insert positions? split/merge segments? improved join?
namespace rogueviz {
namespace smoothcam {
struct frame {
string title;
cell *where;
transmatrix sView;
transmatrix V;
transmatrix ori;
ld front_distance, up_distance;
ld interval;
map<string, ld> params;
};
struct animation {
cell *start_cell;
transmatrix start;
ld start_interval;
vector<frame> frames;
};
}
}
namespace hr {
using pcell = cell*;
using pcell = cell*;
inline void hread(hstream& hs, transmatrix& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
inline void hwrite(hstream& hs, const transmatrix& h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
static void hwrite(hstream& hs, const pcell& c) {
hs.write<int>(mapstream::cellids[c]);
}
static void hread(hstream& hs, pcell& c) {
int32_t at = hs.get<int>();
c = mapstream::cellbyid[at];
}
static void hread(hstream& hs, transmatrix& h) { for(int i=0; i<MDIM; i++) hread(hs, h[i]); }
static void hwrite(hstream& hs, const transmatrix& h) { for(int i=0; i<MDIM; i++) hwrite(hs, h[i]); }
void hwrite(hstream& hs, const rogueviz::smoothcam::animation& anim) {
hwrite(hs, anim.start_cell, anim.start, anim.start_interval, anim.frames);
}
void hread(hstream& hs, rogueviz::smoothcam::animation& anim) {
hread(hs, anim.start_cell, anim.start, anim.start_interval, anim.frames);
}
void hwrite(hstream& hs, const rogueviz::smoothcam::frame& frame) {
hwrite(hs, frame.title, frame.where, frame.sView, frame.V, frame.ori, frame.front_distance, frame.up_distance, frame.interval);
}
void hread(hstream& hs, rogueviz::smoothcam::frame& frame) {
hread(hs, frame.title, frame.where, frame.sView, frame.V, frame.ori, frame.front_distance, frame.up_distance, frame.interval);
}
inline void hwrite(hstream& hs, const pcell& c) {
hs.write<int>(mapstream::cellids[c]);
}
inline void hread(hstream& hs, pcell& c) {
int32_t at = hs.get<int>();
c = mapstream::cellbyid[at];
}
namespace rogueviz {
namespace smoothcam {
string smooth_camera_help =
@ -39,23 +82,6 @@ string smooth_camera_help =
"as the actual position, while Y-X will be the first derivative. Thus, for example, "
"placing two equal positions with interval 0 will force the camera to smoothly stop.";
struct frame {
string title;
cell *where;
transmatrix sView;
transmatrix V;
transmatrix ori;
ld front_distance, up_distance;
ld interval;
};
struct animation {
cell *start_cell;
transmatrix start;
ld start_interval;
vector<frame> frames;
};
map<cell*, map<hyperpoint, string> > labels;
map<cell*, vector<vector<hyperpoint> > > traces;
@ -606,22 +632,6 @@ void generate_trace() {
send();
}
void hwrite(hstream& hs, const animation& anim) {
hwrite(hs, anim.start_cell, anim.start, anim.start_interval, anim.frames);
}
void hread(hstream& hs, animation& anim) {
hread(hs, anim.start_cell, anim.start, anim.start_interval, anim.frames);
}
void hwrite(hstream& hs, const frame& frame) {
hwrite(hs, frame.title, frame.where, frame.sView, frame.V, frame.ori, frame.front_distance, frame.up_distance, frame.interval);
}
void hread(hstream& hs, frame& frame) {
hread(hs, frame.title, frame.where, frame.sView, frame.V, frame.ori, frame.front_distance, frame.up_distance, frame.interval);
}
bool draw_labels(cell *c, const shiftmatrix& V) {
if(view_labels) for(auto& p: labels[c])
queuestr(V * rgpushxto0(p.first), .1, p.second, 0xFFFFFFFF, 1);