Index: src/clientextras.mm ================================================================== --- src/clientextras.mm +++ src/clientextras.mm @@ -78,19 +78,17 @@ extern int democlientnum; void renderclients() { - size_t i = 0; - for (id player in players) { + [players enumerateObjectsUsingBlock:^(id player, size_t i, bool *stop) { if (player != [OFNull null] && (!demoplayback || i != democlientnum)) renderclient(player, isteam(player1.team, [player team]), @"monster/ogro", false, 1.0f); - i++; - } + }]; } // creation of scoreboard pseudo-menu bool scoreson = false; Index: src/clientgame.mm ================================================================== --- src/clientgame.mm +++ src/clientgame.mm @@ -196,26 +196,25 @@ extern int democlientnum; void otherplayers() { - size_t i = 0; - for (id player in players) { - if (player != [OFNull null]) { - const int lagtime = lastmillis - [player lastupdate]; - if (lagtime > 1000 && [player state] == CS_ALIVE) { - [player setState:CS_LAGGED]; - i++; - continue; - } - if (lagtime && [player state] != CS_DEAD && - (!demoplayback || i != democlientnum)) - // use physics to extrapolate player position - moveplayer(player, 2, false); - } - i++; - } + [players enumerateObjectsUsingBlock:^(id player, size_t i, bool *stop) { + if (player == [OFNull null]) + return; + + const int lagtime = lastmillis - [player lastupdate]; + if (lagtime > 1000 && [player state] == CS_ALIVE) { + [player setState:CS_LAGGED]; + return; + } + + if (lagtime && [player state] != CS_DEAD && + (!demoplayback || i != democlientnum)) + // use physics to extrapolate player position + moveplayer(player, 2, false); + }]; } void respawn() { Index: src/server.mm ================================================================== --- src/server.mm +++ src/server.mm @@ -427,21 +427,20 @@ if ((mode > 1 || (mode == 0 && nonlocalclients)) && seconds > mapend - minremain * 60) checkintermission(); if (interm && seconds > interm) { interm = 0; - size_t i = 0; - for (Client *client in clients) { + [clients enumerateObjectsUsingBlock:^( + Client *client, size_t i, bool *stop) { if (client.type != ST_EMPTY) { // ask a client to trigger map reload send2(true, i, SV_MAPRELOAD, 0); mapreload = true; - break; + *stop = true; + return; } - - i++; - } + }]; } resetserverifempty(); if (!isdedicated) Index: src/serverbrowser.mm ================================================================== --- src/serverbrowser.mm +++ src/serverbrowser.mm @@ -272,14 +272,14 @@ checkresolver(); checkpings(); if (lastmillis - lastinfo >= 5000) pingservers(); [servers sort]; - int maxmenu = 16; - size_t i = 0; - for (ServerInfo *si in servers) { + __block int maxmenu = 16; + [servers enumerateObjectsUsingBlock:^( + ServerInfo *si, size_t i, bool *stop) { if (si.address.host != ENET_HOST_ANY && si.ping != 9999) { if (si.protocol != PROTOCOL_VERSION) si.full = [[OFString alloc] initWithFormat: @"%@ [different cube protocol]", @@ -304,13 +304,11 @@ menumanual(1, i, si.full); if (!--maxmenu) return; - - i++; - } + }]; } void servermenu() { Index: src/weapon.mm ================================================================== --- src/weapon.mm +++ src/weapon.mm @@ -343,21 +343,21 @@ } } void hitpush(int target, int damage, DynamicEntity *d, DynamicEntity *at, - OFVector3D &from, OFVector3D &to) + const OFVector3D &from, const OFVector3D &to) { hit(target, damage, d, at); vdist(dist, v, from, to); vmul(v, damage / dist / 50); vadd(d.vel, v); } void raydamage( - DynamicEntity *o, OFVector3D &from, OFVector3D &to, DynamicEntity *d, int i) + DynamicEntity *o, const OFVector3D &from, const OFVector3D &to, DynamicEntity *d, int i) { if (o.state != CS_ALIVE) return; int qdam = guns[d.gunselect].damage; if (d.quadmillis) @@ -422,19 +422,17 @@ d.gunwait = guns[d.gunselect].attackdelay; if (guns[d.gunselect].projspeed) return; - size_t i = 0; - for (id player in players) { + [players enumerateObjectsUsingBlock:^(id player, size_t i, bool *stop) { if (player != [OFNull null]) raydamage(player, from, to, d, i); - i++; - } + }]; for (DynamicEntity *monster in getmonsters()) if (monster != d) raydamage(monster, from, to, d, -2); if (d.monsterstate) raydamage(player1, from, to, d, -1); }