prvm_eval_t *val, *val2;
int csqcents = 0;
- if(!eval_SendEntity || !eval_Version)
+ if(prog->fieldoffsets.SendEntity < 0 || prog->fieldoffsets.Version < 0)
return;
--csqc_clent;
if(!sv2csqcents_version[csqc_clent])
// if(!s->active)
// continue;
- val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_SendEntity);
+ val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
if(val->function)
{
- val2 = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_Version);
+ val2 = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.Version);
if(sv2csqcents_version[csqc_clent][s->number] == (unsigned char)val2->_float)
continue;
if(!csqcents)
for (i = 0, s = states;i < numstates;i++, s++)
{
- val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_SendEntity);
+ val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
if(val && val->function)
continue;
ent = states + i;
number = ent->number;
- val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[number]), eval_SendEntity);
+ val = PRVM_EDICTFIELDVALUE((&prog->edicts[number]), prog->fieldoffsets.SendEntity);
if(val && val->function)
continue;
for (;onum < o->numentities && o->entitydata[onum].number < number;onum++)
d->currententitynumber = 1;
for (i = 0, n = startnumber;n < prog->max_edicts;n++)
{
- val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[n]), eval_SendEntity);
+ val = PRVM_EDICTFIELDVALUE((&prog->edicts[n]), prog->fieldoffsets.SendEntity);
if(val && val->function)
continue;
// find the old state to delta from
int EntityState5_Priority(entityframe5_database_t *d, int stateindex)
{
int limit, priority;
- double distance;
- int changedbits;
entity_state_t *s;
// if it is the player, update urgently
if (stateindex == d->viewentnum)
priority++;
return bound(1, priority, E5_PROTOCOL_PRIORITYLEVELS - 1);
}
- changedbits = d->deltabits[stateindex];
+ // certain changes are more noticable than others
+ if (d->deltabits[stateindex] & (E5_FULLUPDATE | E5_ATTACHMENT | E5_MODEL | E5_FLAGS | E5_COLORMAP))
+ priority++;
// find the root entity this one is attached to, and judge relevance by it
for (limit = 0;limit < 256;limit++)
{
if (limit >= 256)
Con_DPrintf("Protocol: Runaway loop recursing tagentity links on entity %i\n", stateindex);
// now that we have the parent entity we can make some decisions based on
- // distance and other factors
- // note: this origin check does not work properly on doors/lifts whose
- // origin is normally far away
- distance = VectorDistance(d->states[d->viewentnum].origin, s->origin);
- // if it is not very far from the player, update more often
- if (distance < 1024.0f)
- priority++;
- // certain changes are more noticable than others
- if (changedbits & E5_FULLUPDATE)
- priority++;
- else if (changedbits & (E5_ATTACHMENT | E5_MODEL | E5_FLAGS | E5_COLORMAP))
+ // distance from the player
+ if (VectorDistance(d->states[d->viewentnum].origin, s->origin) < 1024.0f)
priority++;
- return (int) bound(1, priority, E5_PROTOCOL_PRIORITYLEVELS - 1);
+ return bound(1, priority, E5_PROTOCOL_PRIORITYLEVELS - 1);
}
void EntityState5_WriteUpdate(int number, const entity_state_t *s, int changedbits, sizebuf_t *msg)
unsigned int bits = 0;
prvm_eval_t *val;
- val = PRVM_GETEDICTFIELDVALUE((&prog->edicts[s->number]), eval_SendEntity);
+ val = PRVM_EDICTFIELDVALUE((&prog->edicts[s->number]), prog->fieldoffsets.SendEntity);
if(val && val->function)
return;
}
SETPVSBIT(d->visiblebits, num);
d->deltabits[num] |= EntityState5_DeltaBits(d->states + num, n);
+ d->priorities[num] = max(d->priorities[num], 1);
d->states[num] = *n;
d->states[num].number = num;
// advance to next entity so the next iteration doesn't immediately remove it