UTBYB5NBZ67NHS4K3FGUKMKZKTKXVEXRW46BXH5CUBFVAEFUKK6AC ZFJTELN4KZJH36IW3RP5INLIAXBJCL3GQKRRKEVJM4L6DXYPY6DAC XKHJTY5AQ4HTOI33GIBK6LYJE22PACJR3XQ6TCZXJLOG3YBVSNPQC DTLSPUE47XI4YC3QWKTBWJOWBU52GXPGXFEEBG374I4JAYVM7KZAC 2EBEWIV4YHXXAFR4GG2GMZJ2K77NK762HNQ77CZLHI3LDVGX7RJAC TZNURHCLTLE3A55EPNU66BU6NX7LOBA7EFG4NAJJBUKZLOAEFU4AC ACZYEIX7WMPIIODKCATBCUE626AJ4ZGGBOMVC6BGXM27EQU2RECAC 6KANK4BOEJYMBUWOZURH57BZJ52YJRGBXN4TMKO27B3JFIP6MHSQC 3ORZZ66JXYWJUO4W5YP2JRKKZ6ZNMHU7QWAF2QMKH4LFWNNMPM7QC MRKWHW7QPSB7BBOLKP5OZTYKAARQGLSQCOEFKGS64JK5BAODT5OQC PEWNWU7TD3LETUMWCCI365KH7PVV2XCUOIFTPBH2LK2ZPGS4URZAC KMF52RF3NIY2ABMHEZABT3GOG3KCHEJD55NBJ3IPAOHBKF2WPKQAC QNDI5MFPHZZXZOJFF2IELF2LIHWVY2HGFRCJWYEFN4WL4ICYZUYQC // Coordinate transformation so we can find_ray quadrant-by-quadrant.// TODO: Unify with los_params.struct trans{coord_def source;int signx, signy;coord_def transform(coord_def l){return coord_def(source.x + signx*l.x, source.y + signy*l.y);}};
}else{bool blocked = true;for (unsigned int i = start; blocked && (i < start + min.size()); i++){index = i % min.size();c = min[index];blocked = false;// Check all inner points.for (unsigned int j = 0; j < c.end && !blocked; j++){coord_def cur = t.transform(c[j]);blocked = grid_is_solid(grd(cur));}}if (blocked)return (false);
blocked = OPC_CLEAR;// Check all inner points.for (unsigned int j = 0; j < c.end && blocked < OPC_OPAQUE; j++)blocked += opc(c[j]);
// Coordinate transformation so we can find_ray quadrant-by-quadrant.struct opacity_trans : opacity_func{const coord_def& source;int signx, signy;const opacity_func& orig;opacity_trans(const opacity_func& opc, const coord_def& s, int sx, int sy): source(s), signx(sx), signy(sy), orig(opc){}
trans t;t.source = source;t.signx = signx;t.signy = signy;ray.accx -= source.x;ray.accy -= source.y;if (signx < 0)ray.accx = 1.0 - ray.accx;if (signy < 0)ray.accy = 1.0 - ray.accy;
opacity_trans opc_trans = opacity_trans(opc, source, signx, signy);
ray.quadx = 1;ray.quady = 1;if (!_find_ray_se(abs, ray, cycle, ignore_solid, t))return false;
if (!_find_ray_se(abs, ray, cycle, opc_trans, bds))return (false);