mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-23 15:36:59 +00:00
nilrider:: support different unicycle color schemes
This commit is contained in:
parent
c4a5438f8d
commit
0ffb187d32
@ -62,7 +62,7 @@ void frame() {
|
||||
|
||||
curlev->draw_level_rec(V);
|
||||
|
||||
curlev->current.draw_unilcycle(V);
|
||||
curlev->current.draw_unilcycle(V, my_scheme);
|
||||
|
||||
for(auto g: curlev->ghosts) {
|
||||
ld t = curlev->current.timer;
|
||||
@ -72,7 +72,7 @@ void frame() {
|
||||
if(g.history[s].timer < t) a = s + 1;
|
||||
else b = s;
|
||||
}
|
||||
if(b < isize(g.history)) g.history[b].draw_unilcycle(V);
|
||||
if(b < isize(g.history)) g.history[b].draw_unilcycle(V, g.cs);
|
||||
}
|
||||
}
|
||||
|
||||
@ -547,7 +547,7 @@ void main_menu() {
|
||||
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)});
|
||||
curlev->manual_replays.emplace_back(manual_replay{new_replay_name(), my_scheme, std::move(ang)});
|
||||
save();
|
||||
});
|
||||
|
||||
@ -559,7 +559,7 @@ void main_menu() {
|
||||
#if CAP_SAVE
|
||||
dialog::addItem("save this plan", 's');
|
||||
dialog::add_action([] {
|
||||
curlev->plan_replays.emplace_back(plan_replay{new_replay_name(), curlev->plan});
|
||||
curlev->plan_replays.emplace_back(plan_replay{new_replay_name(), my_scheme, curlev->plan});
|
||||
save();
|
||||
});
|
||||
|
||||
|
@ -9,6 +9,21 @@ struct level;
|
||||
/** ticks per second */
|
||||
inline const ld tps = 1000;
|
||||
|
||||
struct colorscheme {
|
||||
color_t wheel1, wheel2, seat, seatpost;
|
||||
colorscheme(int i) {
|
||||
if(i == 1) { wheel1 = 0xFFFF40FF; wheel2 = 0xFF4040FF; seat = 0x303030FF; seatpost = 0x303030FF; }
|
||||
if(i == 2) {
|
||||
wheel1 = 0xFF | ((rand() % 0x1000000) << 8);
|
||||
wheel2 = 0xFF | ((rand() % 0x1000000) << 8);
|
||||
seat = 0xFF | ((rand() % 0x1000000) << 8);
|
||||
seatpost = 0xFF | ((rand() % 0x1000000) << 8);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
colorscheme my_scheme(1);
|
||||
|
||||
struct timestamp {
|
||||
hyperpoint where; /**< the current position of the unicycle */
|
||||
ld heading_angle; /**< the current heading angle */
|
||||
@ -36,7 +51,7 @@ struct timestamp {
|
||||
|
||||
bool tick(level*, ld timeleft = 1. / tps);/**< one tick of the simulation -- returns false if the unicycle has stopped or crashed */
|
||||
void centerview(level*);
|
||||
void draw_unilcycle(const shiftmatrix&);
|
||||
void draw_unilcycle(const shiftmatrix&, const colorscheme& cs);
|
||||
void draw_instruments(level*);
|
||||
ld energy_in_squares();
|
||||
bool collect(level*);
|
||||
@ -75,11 +90,13 @@ struct triangledata {
|
||||
|
||||
struct manual_replay {
|
||||
string name;
|
||||
colorscheme cs;
|
||||
vector<int> headings;
|
||||
};
|
||||
|
||||
struct plan_replay {
|
||||
string name;
|
||||
colorscheme cs;
|
||||
plan_t plan;
|
||||
};
|
||||
|
||||
@ -106,6 +123,7 @@ struct goal {
|
||||
using surface_fun = std::function<ld(hyperpoint h)>;
|
||||
|
||||
struct ghost {
|
||||
colorscheme cs;
|
||||
vector<timestamp> history;
|
||||
};
|
||||
|
||||
|
@ -70,7 +70,7 @@ void load() {
|
||||
if(size < 0 || size > 1000000) throw hstream_exception();
|
||||
for(int i=0; i<size; i++) headings.push_back(scan<int>(f));
|
||||
auto l = level_by_name(lev);
|
||||
if(l) l->manual_replays.emplace_back(manual_replay{name, std::move(headings)});
|
||||
if(l) l->manual_replays.emplace_back(manual_replay{name, colorscheme(2), std::move(headings)});
|
||||
continue;
|
||||
}
|
||||
if(s == "*PLANNING") {
|
||||
@ -82,7 +82,7 @@ void load() {
|
||||
plan.resize(size, {C0, C0});
|
||||
for(int i=0; i<size; i++) scan(f, plan[i].at[0], plan[i].at[1], plan[i].vel[0], plan[i].vel[1]);
|
||||
auto l = level_by_name(lev);
|
||||
if(l) l->plan_replays.emplace_back(plan_replay{name, std::move(plan)});
|
||||
if(l) l->plan_replays.emplace_back(plan_replay{name, colorscheme(2), std::move(plan)});
|
||||
continue;
|
||||
}
|
||||
if(s == "*RECORD") {
|
||||
@ -117,7 +117,7 @@ void level::load_plan_as_ghost(plan_replay& r) {
|
||||
if(isize(history) == s) break;
|
||||
}
|
||||
println(hlog, "a history of length ", isize(history), " becomes a ghost");
|
||||
ghosts.emplace_back();
|
||||
ghosts.emplace_back(ghost{r.cs, {}});
|
||||
auto& g = ghosts.back();
|
||||
g.history = std::move(history);
|
||||
swap(history_backup, history);
|
||||
|
@ -8,7 +8,7 @@ EX hyperpoint sym_to_used(hyperpoint H) {
|
||||
return H;
|
||||
}
|
||||
|
||||
void timestamp::draw_unilcycle(const shiftmatrix& V) {
|
||||
void timestamp::draw_unilcycle(const shiftmatrix& V, const colorscheme& cs) {
|
||||
const int points = 60 / (1 + reduce_quality);
|
||||
const int spoke_each = 5;
|
||||
hyperpoint whpoint[points+1];
|
||||
@ -36,9 +36,9 @@ void timestamp::draw_unilcycle(const shiftmatrix& V) {
|
||||
curvepoint(whpoint[a+b]);
|
||||
curvepoint(hub[b]);
|
||||
if(a&1)
|
||||
queuecurve(V * rgpushxto0(where), 0xFFFFFFFF, 0xFFFF40FF, PPR::WALL);
|
||||
queuecurve(V * rgpushxto0(where), 0xFFFFFFFF, cs.wheel1, PPR::WALL);
|
||||
else
|
||||
queuecurve(V * rgpushxto0(where), 0xFFFFFFFF, 0xFF4040FF, PPR::WALL);
|
||||
queuecurve(V * rgpushxto0(where), 0xFFFFFFFF, cs.wheel2, PPR::WALL);
|
||||
}
|
||||
|
||||
if(1) {
|
||||
@ -46,7 +46,7 @@ void timestamp::draw_unilcycle(const shiftmatrix& V) {
|
||||
curvepoint(base + Ta * point3(-hublen, -hublen, whrad+hublen));
|
||||
curvepoint(base + Ta * point3(-hublen, +hublen, whrad+hublen));
|
||||
curvepoint(base + Ta * point3(hublen, 0, whrad+hublen));
|
||||
queuecurve(V * rgpushxto0(where), 0xFF, 0x303030FF, PPR::WALL);
|
||||
queuecurve(V * rgpushxto0(where), 0xFF, cs.seat, PPR::WALL);
|
||||
|
||||
for(auto& y: {hublen, -hublen}) {
|
||||
curvepoint(base + Ta * point3(hublen * .1, -y, 0));
|
||||
@ -54,14 +54,14 @@ void timestamp::draw_unilcycle(const shiftmatrix& V) {
|
||||
curvepoint(base + Ta * point3(hublen * -.1, 0, whrad + hublen / 2));
|
||||
curvepoint(base + Ta * point3(hublen * .1, 0, whrad + hublen / 2));
|
||||
curvepoint(base + Ta * point3(hublen * .1, -y, 0));
|
||||
queuecurve(V * rgpushxto0(where), 0xFF, 0x303030FF, PPR::WALL);
|
||||
queuecurve(V * rgpushxto0(where), 0xFF, cs.seatpost, PPR::WALL);
|
||||
|
||||
curvepoint(base + Ta * point3(hublen * -.1, 0, whrad + hublen / 2));
|
||||
curvepoint(base + Ta * point3(hublen * .1, 0, whrad + hublen / 2));
|
||||
curvepoint(base + Ta * point3(hublen * .1, 0, whrad + hublen));
|
||||
curvepoint(base + Ta * point3(hublen * -.1, 0, whrad + hublen));
|
||||
curvepoint(base + Ta * point3(hublen * -.1, 0, whrad + hublen / 2));
|
||||
queuecurve(V * rgpushxto0(where), 0xFF, 0x303030FF, PPR::WALL);
|
||||
queuecurve(V * rgpushxto0(where), 0xFF, cs.seatpost, PPR::WALL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user