(FrameHeaderMessage frameMsg)
| 295 | } |
| 296 | |
| 297 | public static frame_t processFrameMessage(FrameHeaderMessage frameMsg) { |
| 298 | //memset( cl.frame, 0, sizeof(cl.frame)); |
| 299 | frame_t currentFrame = ClientGlobals.cl.frame; |
| 300 | currentFrame.reset(); |
| 301 | |
| 302 | currentFrame.serverframe = frameMsg.frameNumber; |
| 303 | currentFrame.deltaframe = frameMsg.lastFrame; |
| 304 | currentFrame.servertime = currentFrame.serverframe * 100; |
| 305 | |
| 306 | ClientGlobals.cl.surpressCount = frameMsg.suppressCount; |
| 307 | |
| 308 | if (ClientGlobals.cl_shownet.value == 3) |
| 309 | Com.Printf(" frame:" + currentFrame.serverframe + " delta:" + currentFrame.deltaframe + "\n"); |
| 310 | |
| 311 | // If the frame is delta compressed from data that we |
| 312 | // no longer have available, we must suck up the rest of |
| 313 | // the frame, but not use it, then ask for a non-compressed |
| 314 | // message |
| 315 | frame_t old; |
| 316 | if (currentFrame.deltaframe <= 0) { |
| 317 | currentFrame.valid = true; // uncompressed frame |
| 318 | old = null; |
| 319 | ClientGlobals.cls.demowaiting = false; // we can start recording now |
| 320 | } else { |
| 321 | old = ClientGlobals.cl.frames[currentFrame.deltaframe & Defines.UPDATE_MASK]; |
| 322 | if (!old.valid) { // should never happen |
| 323 | Com.Printf("Delta from invalid frame (not supposed to happen!).\n"); |
| 324 | } |
| 325 | if (old.serverframe != currentFrame.deltaframe) { |
| 326 | // The frame that the server did the delta from is too old, so we can't reconstruct it properly. |
| 327 | Com.Printf("Delta frame too old.\n"); |
| 328 | } else if (ClientGlobals.cl.parse_entities - old.parse_entities > Defines.MAX_PARSE_ENTITIES - 128) { |
| 329 | Com.Printf("Delta parse_entities too old.\n"); |
| 330 | } else |
| 331 | currentFrame.valid = true; // valid delta parse |
| 332 | } |
| 333 | |
| 334 | // clamp time |
| 335 | if (ClientGlobals.cl.time > currentFrame.servertime) |
| 336 | ClientGlobals.cl.time = currentFrame.servertime; |
| 337 | else if (ClientGlobals.cl.time < currentFrame.servertime - 100) |
| 338 | ClientGlobals.cl.time = currentFrame.servertime - 100; |
| 339 | |
| 340 | // read areabits |
| 341 | //ClientGlobals.cl.frame.areabits = frameMsg.areaBits; |
| 342 | // fixme: ref to ClientGlobals.cl.frame.areabits is scattered across code, can not change it |
| 343 | System.arraycopy(frameMsg.areaBits, 0, currentFrame.areabits, 0, frameMsg.areaBits.length); |
| 344 | return old; |
| 345 | } |
| 346 | |
| 347 | |
| 348 | /* |
no test coverage detected