()
| 897 | * Sets cl.refdef view values =============== |
| 898 | */ |
| 899 | static void CalcViewValues() { |
| 900 | int i; |
| 901 | float lerp, backlerp; |
| 902 | frame_t oldframe; |
| 903 | player_state_t ps, ops; |
| 904 | |
| 905 | // find the previous frame to interpolate from |
| 906 | ps = ClientGlobals.cl.frame.playerstate; |
| 907 | |
| 908 | i = (ClientGlobals.cl.frame.serverframe - 1) & Defines.UPDATE_MASK; |
| 909 | oldframe = ClientGlobals.cl.frames[i]; |
| 910 | |
| 911 | if (oldframe.serverframe != ClientGlobals.cl.frame.serverframe - 1 || !oldframe.valid) |
| 912 | oldframe = ClientGlobals.cl.frame; // previous frame was dropped or |
| 913 | // involid |
| 914 | ops = oldframe.playerstate; |
| 915 | |
| 916 | // see if the player entity was teleported this frame |
| 917 | if (Math.abs(ops.pmove.origin[0] - ps.pmove.origin[0]) > 256 * 8 |
| 918 | || Math.abs(ops.pmove.origin[1] - ps.pmove.origin[1]) > 256 * 8 |
| 919 | || Math.abs(ops.pmove.origin[2] - ps.pmove.origin[2]) > 256 * 8) |
| 920 | ops = ps; // don't interpolate |
| 921 | |
| 922 | lerp = ClientGlobals.cl.lerpfrac; |
| 923 | |
| 924 | // calculate the origin |
| 925 | if ((ClientGlobals.cl_predict.value != 0) && 0 == (ClientGlobals.cl.frame.playerstate.pmove.pm_flags & Defines.PMF_NO_PREDICTION)) { // use |
| 926 | // values |
| 927 | int delta; |
| 928 | |
| 929 | backlerp = 1.0f - lerp; |
| 930 | for (i = 0; i < 3; i++) { |
| 931 | ClientGlobals.cl.refdef.vieworg[i] = ClientGlobals.cl.predicted_origin[i] + ops.viewoffset[i] + ClientGlobals.cl.lerpfrac |
| 932 | * (ps.viewoffset[i] - ops.viewoffset[i]) - backlerp * ClientGlobals.cl.prediction_error[i]; |
| 933 | |
| 934 | // this smooths out platform riding |
| 935 | ClientGlobals.cl.predicted_origin[i] -= backlerp * ClientGlobals.cl.prediction_error[i]; |
| 936 | } |
| 937 | |
| 938 | // smooth out stair climbing |
| 939 | delta = (int) (ClientGlobals.cls.realtime - ClientGlobals.cl.predicted_step_time); |
| 940 | |
| 941 | if (delta < 100) { |
| 942 | ClientGlobals.cl.refdef.vieworg[2] -= ClientGlobals.cl.predicted_step * (100 - delta) * 0.01; |
| 943 | ClientGlobals.cl.predicted_origin[2] -= ClientGlobals.cl.predicted_step * (100 - delta) * 0.01; |
| 944 | } |
| 945 | |
| 946 | } else { // just use interpolated values |
| 947 | for (i = 0; i < 3; i++) |
| 948 | ClientGlobals.cl.refdef.vieworg[i] = ops.pmove.origin[i] * 0.125f + ops.viewoffset[i] + lerp |
| 949 | * (ps.pmove.origin[i] * 0.125f + ps.viewoffset[i] - (ops.pmove.origin[i] * 0.125f + ops.viewoffset[i])); |
| 950 | } |
| 951 | |
| 952 | // if not running a demo or on a locked frame, add the local angle |
| 953 | // movement |
| 954 | if (ClientGlobals.cl.frame.playerstate.pmove.pm_type < Defines.PM_DEAD) { // use |
| 955 | // predicted |
| 956 | // values |
no test coverage detected