From a7f9b34affc746b81b44819e6155aef5eea0bc59 Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 17 May 2015 20:37:59 +0000 Subject: [PATCH] Refactor slide_textures --- similar/main/game.cpp | 60 ++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/similar/main/game.cpp b/similar/main/game.cpp index 1ec87e91b..aaafd0a1a 100644 --- a/similar/main/game.cpp +++ b/similar/main/game.cpp @@ -1438,6 +1438,20 @@ static void compute_slide_segs(void) Slide_segs_computed = 1; } +template +static void update_uv(array &uvls, uvl &i, fix a) +{ + if (!a) + return; + const auto ip = (i.*p += a); + if (ip > f2_0) + range_for (auto &j, uvls) + j.*p -= f1_0; + else if (ip < -f2_0) + range_for (auto &j, uvls) + j.*p += f1_0; +} + // ----------------------------------------------------------------------------- static void slide_textures(void) { @@ -1446,34 +1460,26 @@ static void slide_textures(void) range_for (const auto segnum, highest_valid(Segments)) { - if (Slide_segs[segnum]) { + const auto &segp = vsegptr(static_cast(segnum)); + if (const auto slide_seg = Slide_segs[segnum]) + { for (int sidenum=0;sidenum<6;sidenum++) { - if (Slide_segs[segnum] & (1 << sidenum)) { - int tmn = Segments[segnum].sides[sidenum].tmap_num; - if (TmapInfo[tmn].slide_u != 0 || TmapInfo[tmn].slide_v != 0) { - for (int i=0;i<4;i++) { - Segments[segnum].sides[sidenum].uvls[i].u += fixmul(FrameTime,TmapInfo[tmn].slide_u<<8); - Segments[segnum].sides[sidenum].uvls[i].v += fixmul(FrameTime,TmapInfo[tmn].slide_v<<8); - if (Segments[segnum].sides[sidenum].uvls[i].u > f2_0) { - int j; - for (j=0;j<4;j++) - Segments[segnum].sides[sidenum].uvls[j].u -= f1_0; - } - if (Segments[segnum].sides[sidenum].uvls[i].v > f2_0) { - int j; - for (j=0;j<4;j++) - Segments[segnum].sides[sidenum].uvls[j].v -= f1_0; - } - if (Segments[segnum].sides[sidenum].uvls[i].u < -f2_0) { - int j; - for (j=0;j<4;j++) - Segments[segnum].sides[sidenum].uvls[j].u += f1_0; - } - if (Segments[segnum].sides[sidenum].uvls[i].v < -f2_0) { - int j; - for (j=0;j<4;j++) - Segments[segnum].sides[sidenum].uvls[j].v += f1_0; - } + if (slide_seg & (1 << sidenum)) + { + auto &side = segp->sides[sidenum]; + const auto &ti = TmapInfo[side.tmap_num]; + const auto tiu = ti.slide_u; + const auto tiv = ti.slide_v; + if (tiu || tiv) + { + const auto frametime = FrameTime; + const auto ua = fixmul(frametime, tiu << 8); + const auto va = fixmul(frametime, tiv << 8); + auto &uvls = side.uvls; + range_for (auto &i, uvls) + { + update_uv<&uvl::u>(uvls, i, ua); + update_uv<&uvl::v>(uvls, i, va); } } }