X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=fe5f8afd642dd37de7f002e0362ec628e4538012;hb=945d5cb14ef4508270926b3f45a1854fd6e1572b;hp=547045307769442e510866a76fab273d2b8876dd;hpb=b3895a134a65c7be9ccfe2db7cf7132d5934f316;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index 54704530..fe5f8afd 100644 --- a/cl_main.c +++ b/cl_main.c @@ -98,6 +98,7 @@ void CL_ClearState(void) if (!sv.active) Host_ClearMemory (); + // note: this also gets rid of the entity database Mem_EmptyPool(cl_entities_mempool); // wipe the entire cl structure @@ -349,7 +350,7 @@ static float CL_LerpPoint(void) // LordHavoc: lerp in listen games as the server is being capped below the client (usually) f = cl.mtime[0] - cl.mtime[1]; - if (!f || cl_nolerp.integer || cls.timedemo || (sv.active && svs.maxclients == 1)) + if (!f || cl_nolerp.integer || cls.timedemo || cl.islocalgame) { cl.time = cl.mtime[0]; return 1; @@ -456,25 +457,11 @@ void CL_DecayLights(void) float time; time = cl.time - cl.oldtime; - - dl = cl_dlights; - for (i=0 ; iradius) - continue; - if (dl->die < cl.time) - { - dl->radius = 0; - continue; - } - - dl->radius -= time*dl->decay; - if (dl->radius < 0) - dl->radius = 0; - } + for (i = 0, dl = cl_dlights;i < MAX_DLIGHTS;i++, dl++) + if (dl->radius) + dl->radius = (cl.time < dl->die) ? max(0, dl->radius - time * dl->decay) : 0; } -extern qboolean Nehahrademcompatibility; #define MAXVIEWMODELS 32 entity_t *viewmodels[MAXVIEWMODELS]; int numviewmodels; @@ -532,7 +519,6 @@ void CL_LinkNetworkEntity(entity_t *e) if (e->state_current.tagentity && e->state_current.tagindex >= 1 && (model = t->render.model) && e->state_current.tagindex <= t->render.model->alias.aliasnum_tags) { // blend the matrices - R_LerpAnimation(&t->render); memset(&blendmatrix, 0, sizeof(blendmatrix)); for (j = 0;j < 4 && t->render.frameblend[j].lerp > 0;j++) { @@ -582,7 +568,17 @@ void CL_LinkNetworkEntity(entity_t *e) VectorCopy(e->persistent.newangles, angles); } // animation lerp - if (e->render.frame2 != e->state_current.frame) + if (e->render.frame2 == e->state_current.frame) + { + // update frame lerp fraction + e->render.framelerp = 1; + if (e->render.frame2time > e->render.frame1time) + { + e->render.framelerp = (cl.time - e->render.frame2time) / (e->render.frame2time - e->render.frame1time); + e->render.framelerp = bound(0, e->render.framelerp, 1); + } + } + else { // begin a new frame lerp e->render.frame1 = e->render.frame2; @@ -591,12 +587,6 @@ void CL_LinkNetworkEntity(entity_t *e) e->render.frame2time = cl.time; e->render.framelerp = 0; } - else - { - // update frame lerp fraction - e->render.framelerp = e->render.frame2time > e->render.frame1time ? ((cl.time - e->render.frame2time) / (e->render.frame2time - e->render.frame1time)) : 1; - e->render.framelerp = bound(0, e->render.framelerp, 1); - } } else { @@ -612,7 +602,7 @@ void CL_LinkNetworkEntity(entity_t *e) if (e->render.model) { Mod_CheckLoaded(e->render.model); - if (e->render.model->type != mod_brush) + if (e->render.model->type == mod_alias || e->render.model->type == mod_sprite) angles[0] = -angles[0]; if (e->render.model->flags & EF_ROTATE) { @@ -622,6 +612,8 @@ void CL_LinkNetworkEntity(entity_t *e) } } + R_LerpAnimation(&e->render); + // FIXME: e->render.scale should go away Matrix4x4_CreateFromQuakeEntity(&matrix2, origin[0], origin[1], origin[2], angles[0], angles[1], angles[2], e->render.scale); // concat the matrices to make the entity relative to its tag @@ -717,7 +709,7 @@ void CL_LinkNetworkEntity(entity_t *e) if (e->persistent.muzzleflash > 0) { Matrix4x4_Transform(&e->render.matrix, muzzleflashorigin, v2); - CL_TraceLine(origin, v2, v, NULL, 0, true, NULL); + CL_TraceLine(origin, v2, v, NULL, true, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY); CL_AllocDlight(NULL, v, e->persistent.muzzleflash, 1, 1, 1, 0, 0); e->persistent.muzzleflash -= cl.frametime * 1000; } @@ -793,12 +785,12 @@ void CL_LinkNetworkEntity(entity_t *e) if (!(e->render.effects & (EF_NOSHADOW | EF_ADDITIVE)) && (e->render.alpha == 1) && !(e->render.flags & RENDER_VIEWMODEL) - && ((e - cl_entities) != cl.viewentity || (!cl.intermission && !Nehahrademcompatibility && !cl_noplayershadow.integer))) + && ((e - cl_entities) != cl.viewentity || (!cl.intermission && cl.protocol != PROTOCOL_NEHAHRAMOVIE && !cl_noplayershadow.integer))) e->render.flags |= RENDER_SHADOW; // as soon as player is known we can call V_CalcRefDef if ((e - cl_entities) == cl.viewentity) V_CalcRefdef(); - if (e->render.model && e->render.model->name[0] == '*' && e->render.model->type == mod_brush) + if (e->render.model && e->render.model->name[0] == '*' && e->render.model->brush.TraceBox) cl_brushmodel_entities[cl_num_brushmodel_entities++] = &e->render; // don't show entities with no modelindex (note: this still shows // entities which have a modelindex that resolved to a NULL model)