1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-02-05 13:40:10 +00:00

draw_back() now darkens both fill color and stroke color

This commit is contained in:
Zeno Rogue 2018-10-23 20:11:49 +02:00
parent 2a9f93273a
commit f887ae23a6

View File

@ -1213,20 +1213,29 @@ purehookset hook_drawqueue;
constexpr int PMAX = int(PPR::MAX); constexpr int PMAX = int(PPR::MAX);
int qp[PMAX], qp0[PMAX]; int qp[PMAX], qp0[PMAX];
void drawqueueitem::draw_darker() { void darken_color(color_t& color) {
unsigned c = color;
int alpha = color & 255; int alpha = color & 255;
if(vid.alpha <= 1) { if(vid.alpha <= 1) {
color = 0; color = 0;
} }
else if(alpha == 255) else if(alpha == 255)
color = (gradient(backcolor, c>>8, 0, backbrightness, 1)<<8) | 0xFF; color = (gradient(backcolor, color>>8, 0, backbrightness, 1)<<8) | 0xFF;
else color = color - alpha + int(backbrightness * alpha); else color = color - alpha + int(backbrightness * alpha);
}
void drawqueueitem::draw_darker() {
color_t c = color;
darken_color(color);
draw(); draw();
color = c; color = c;
} }
void dqi_poly::draw_back() { draw_darker(); } void dqi_poly::draw_back() {
color_t c = outline;
darken_color(outline);
drawqueueitem::draw_darker();
outline = c;
}
void dqi_line::draw_back() { draw_darker(); } void dqi_line::draw_back() { draw_darker(); }
@ -1242,11 +1251,11 @@ void sort_drawqueue() {
#if MINIMIZE_GL_CALLS #if MINIMIZE_GL_CALLS
unordered_map<color_t, vector<unique_ptr<drawqueueitem>>> subqueue; unordered_map<color_t, vector<unique_ptr<drawqueueitem>>> subqueue;
for(auto& p: ptds) subqueue[p->outline_group()].push_back(move(p)); for(auto& p: ptds) subqueue[p->prio == PPR::CIRCLE ? 0 : p->outline_group()].push_back(move(p));
ptds.clear(); ptds.clear();
for(auto& p: subqueue) for(auto& r: p.second) ptds.push_back(move(r)); for(auto& p: subqueue) for(auto& r: p.second) ptds.push_back(move(r));
subqueue.clear(); subqueue.clear();
for(auto& p: ptds) subqueue[p->color].push_back(move(p)); for(auto& p: ptds) subqueue[p->prio == PPR::CIRCLE ? 0 : p->color].push_back(move(p));
ptds.clear(); ptds.clear();
for(auto& p: subqueue) for(auto& r: p.second) ptds.push_back(move(r)); for(auto& p: subqueue) for(auto& r: p.second) ptds.push_back(move(r));
#endif #endif