forked from github/server
speedup for is_guarded(), which is more important with new combat code.
This commit is contained in:
parent
523f47eb58
commit
f1a2a355d0
|
@ -2494,6 +2494,7 @@ setguard(unit * u, unsigned int flags)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fset(u, UFL_GUARD);
|
fset(u, UFL_GUARD);
|
||||||
|
fset(u->region, RF_GUARDED);
|
||||||
if (!a) a = a_add(&u->attribs, a_new(&at_guard));
|
if (!a) a = a_add(&u->attribs, a_new(&at_guard));
|
||||||
a->data.i = (int)flags;
|
a->data.i = (int)flags;
|
||||||
}
|
}
|
||||||
|
|
|
@ -867,9 +867,22 @@ unit *
|
||||||
is_guarded(region * r, unit * u, unsigned int mask)
|
is_guarded(region * r, unit * u, unsigned int mask)
|
||||||
{
|
{
|
||||||
unit *u2;
|
unit *u2;
|
||||||
|
static unit * guardcache;
|
||||||
|
|
||||||
for (u2 = r->units; u2; u2 = u2->next)
|
if (!fval(r, RF_GUARDED)) {
|
||||||
if (is_guardian(u2, u, mask)) return u2;
|
return NULL;
|
||||||
|
}
|
||||||
|
if (guardcache && guardcache->region==r) {
|
||||||
|
if (is_guardian(guardcache, u, mask)) {
|
||||||
|
return guardcache;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (u2 = r->units; u2; u2 = u2->next) {
|
||||||
|
if (is_guardian(u2, u, mask)) {
|
||||||
|
guardcache = u2;
|
||||||
|
return u2;
|
||||||
|
}
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ extern "C" {
|
||||||
|
|
||||||
/* flags that speed up attribute access: */
|
/* flags that speed up attribute access: */
|
||||||
#define RF_TRAVELUNIT (1<<19)
|
#define RF_TRAVELUNIT (1<<19)
|
||||||
|
#define RF_GUARDED (1<<20)
|
||||||
|
|
||||||
#define RF_ALL 0xFFFFFF
|
#define RF_ALL 0xFFFFFF
|
||||||
|
|
||||||
|
|
|
@ -1053,6 +1053,7 @@ readunit(FILE * F)
|
||||||
u->flags = ri(F) & ~UFL_DEBUG;
|
u->flags = ri(F) & ~UFL_DEBUG;
|
||||||
u->flags &= UFL_SAVEMASK;
|
u->flags &= UFL_SAVEMASK;
|
||||||
}
|
}
|
||||||
|
if (u->flags&UFL_GUARD) fset(u->region, UFL_GUARD);
|
||||||
/* Persistente Befehle einlesen */
|
/* Persistente Befehle einlesen */
|
||||||
free_orders(&u->orders);
|
free_orders(&u->orders);
|
||||||
freadstr(F, buf, sizeof(buf));
|
freadstr(F, buf, sizeof(buf));
|
||||||
|
|
|
@ -892,6 +892,7 @@ fix_attribflags(void)
|
||||||
while (a) {
|
while (a) {
|
||||||
if (a->type==&at_guard) {
|
if (a->type==&at_guard) {
|
||||||
fset(u, UFL_GUARD);
|
fset(u, UFL_GUARD);
|
||||||
|
fset(u->region, RF_GUARDED);
|
||||||
}
|
}
|
||||||
else if (a->type==&at_group) {
|
else if (a->type==&at_group) {
|
||||||
fset(u, UFL_GROUP);
|
fset(u, UFL_GROUP);
|
||||||
|
|
Loading…
Reference in New Issue