Unit/Frame: made submerge handling more readable
This commit is contained in:
parent
cbd7f0d309
commit
cd21c4f26b
1 changed files with 33 additions and 14 deletions
|
@ -522,6 +522,7 @@ void render_unit_image(
|
|||
|
||||
disp->drawing_buffer_add(drawing_layer, loc, [=](const rect&) mutable {
|
||||
tex.set_alpha_mod(alpha);
|
||||
|
||||
if(submerge > 0.0) {
|
||||
// set clip for dry part
|
||||
// smooth_shaded doesn't use the clip information so it's fine to set it up front
|
||||
|
@ -529,19 +530,28 @@ void render_unit_image(
|
|||
|
||||
// draw underwater part
|
||||
draw::smooth_shaded(tex, data.alpha_verts);
|
||||
|
||||
// draw dry part
|
||||
draw::flipped(tex, data.unsub_dest, hreverse, vreverse);
|
||||
} else {
|
||||
// draw whole texture
|
||||
draw::flipped(tex, dest, hreverse, vreverse);
|
||||
}
|
||||
// draw dry part
|
||||
draw::flipped(tex, submerge > 0.0 ? data.unsub_dest : dest, hreverse, vreverse);
|
||||
|
||||
if(uint8_t hl = float_to_color(highlight); hl > 0) {
|
||||
tex.set_blend_mode(SDL_BLENDMODE_ADD);
|
||||
tex.set_alpha_mod(hl);
|
||||
|
||||
if(submerge > 0.0) {
|
||||
// draw underwater part
|
||||
draw::smooth_shaded(tex, data.alpha_verts);
|
||||
|
||||
// draw dry part
|
||||
draw::flipped(tex, data.unsub_dest, hreverse, vreverse);
|
||||
} else {
|
||||
// draw whole texture
|
||||
draw::flipped(tex, dest, hreverse, vreverse);
|
||||
}
|
||||
// draw dry part
|
||||
draw::flipped(tex, submerge > 0.0 ? data.unsub_dest : dest, hreverse, vreverse);
|
||||
}
|
||||
|
||||
tex.set_blend_mode(SDL_BLENDMODE_BLEND);
|
||||
|
@ -561,7 +571,10 @@ void render_unit_image(
|
|||
);
|
||||
|
||||
disp->drawing_buffer_add(drawing_layer, loc, [=, tex = image::get_texture(whiteout_locator)](const rect&) mutable {
|
||||
if (submerge > 0.0) {
|
||||
tex.set_alpha_mod(alpha * blend_ratio);
|
||||
tex.set_color_mod(blendto);
|
||||
|
||||
if(submerge > 0.0) {
|
||||
// also draw submerged portion
|
||||
// alpha_mod and color_mod are ignored,
|
||||
// so we have to put them in the smooth shaded vertex data.
|
||||
|
@ -569,6 +582,7 @@ void render_unit_image(
|
|||
blendto.a = uint8_t(data.alpha_verts[0].color.a * blend_ratio);
|
||||
data.alpha_verts[0].color = blendto;
|
||||
data.alpha_verts[1].color = blendto;
|
||||
|
||||
blendto.a = uint8_t(data.alpha_verts[2].color.a * blend_ratio);
|
||||
data.alpha_verts[2].color = blendto;
|
||||
data.alpha_verts[3].color = blendto;
|
||||
|
@ -579,23 +593,28 @@ void render_unit_image(
|
|||
|
||||
// draw underwater part
|
||||
draw::smooth_shaded(tex, data.alpha_verts);
|
||||
|
||||
// draw dry part
|
||||
draw::flipped(tex, data.unsub_dest, hreverse, vreverse);
|
||||
} else {
|
||||
// draw whole texture
|
||||
draw::flipped(tex, dest, hreverse, vreverse);
|
||||
}
|
||||
|
||||
tex.set_alpha_mod(alpha * blend_ratio);
|
||||
tex.set_color_mod(blendto);
|
||||
|
||||
// draw dry part
|
||||
draw::flipped(tex, submerge > 0.0 ? data.unsub_dest : dest, hreverse, vreverse);
|
||||
|
||||
if(uint8_t hl = float_to_color(highlight); hl > 0) {
|
||||
tex.set_blend_mode(SDL_BLENDMODE_ADD);
|
||||
tex.set_alpha_mod(hl);
|
||||
if (submerge > 0.0) {
|
||||
|
||||
if(submerge > 0.0) {
|
||||
// draw underwater part
|
||||
draw::smooth_shaded(tex, data.alpha_verts);
|
||||
|
||||
// draw dry part
|
||||
draw::flipped(tex, data.unsub_dest, hreverse, vreverse);
|
||||
} else {
|
||||
// draw whole texture
|
||||
draw::flipped(tex, dest, hreverse, vreverse);
|
||||
}
|
||||
// draw dry part
|
||||
draw::flipped(tex, submerge > 0.0 ? data.unsub_dest : dest, hreverse, vreverse);
|
||||
}
|
||||
|
||||
tex.set_color_mod(255, 255, 255);
|
||||
|
|
Loading…
Add table
Reference in a new issue