diff options
author | Andrey Nazarov <skuller@skuller.net> | 2014-11-28 12:33:59 +0300 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2014-12-01 23:04:37 +0300 |
commit | 2ea3dac6baa883430fc64916549347d6d39ee5ec (patch) | |
tree | 874c93160868938e7c1a46843725ecd69222be92 /src | |
parent | 653d52fdc3c6b9b43ccea234bedb76b12d809db2 (diff) |
Properly initialize key client frames on begin.
Make sure that when using variable server FPS, cl.keyframe and
cl.oldkeyframe structures are valid on client begin even if the first
server frame is not a key frame.
Fixes initial lerping problems that may occur until the first key frame
arrives.
Diffstat (limited to 'src')
-rw-r--r-- | src/client/entities.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/client/entities.c b/src/client/entities.c index fa28f11..82a08ff 100644 --- a/src/client/entities.c +++ b/src/client/entities.c @@ -232,14 +232,25 @@ static void entity_event(int number) static void set_active_state(void) { + cls.state = ca_active; + cl.serverdelta = Q_align(cl.frame.number, CL_FRAMEDIV); cl.time = cl.servertime = 0; // set time, needed for demos #if USE_FPS cl.keytime = cl.keyservertime = 0; + cl.keyframe = cl.frame; // initialize keyframe to make sure it's valid #endif - cls.state = ca_active; + + // initialize oldframe so lerping doesn't hurt anything cl.oldframe.valid = qfalse; + cl.oldframe.ps = cl.frame.ps; +#if USE_FPS + cl.oldkeyframe.valid = qfalse; + cl.oldkeyframe.ps = cl.keyframe.ps; +#endif + cl.frameflags = 0; + if (cls.netchan) { cl.initialSeq = cls.netchan->outgoing_sequence; } |