Skip to content

Commit

Permalink
Clean up the IdToNN() functions. Patch reviewed by Cyp.
Browse files Browse the repository at this point in the history
  • Loading branch information
perim committed Feb 6, 2011
1 parent a9169a0 commit 294335e
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 86 deletions.
29 changes: 15 additions & 14 deletions src/multibot.cpp
Expand Up @@ -159,7 +159,8 @@ BOOL recvDroidSecondary(NETQUEUE queue)
NETenum(&state);

// If we can not find the droid should we not ask for it?
if (!IdToDroid(droid, player, &psDroid))
psDroid = IdToDroid(droid, player);
if (!psDroid)
{
NETend();
return false;
Expand Down Expand Up @@ -218,14 +219,16 @@ BOOL recvDroidEmbark(NETQUEUE queue)
NETuint32_t(&transporterID);

// we have to find the droid on our (local) list first.
if (!IdToDroid(droidID, player, &psDroid))
psDroid = IdToDroid(droidID, player);
if (!psDroid)
{
NETend();
// Possible it already died? (sync error?)
debug(LOG_WARNING, "player's %d droid %d wasn't found?", player,droidID);
return false;
}
if (!IdToDroid(transporterID, player, &psTransporterDroid))
psTransporterDroid = IdToDroid(transporterID, player);
if (!psTransporterDroid)
{
NETend();
// Possible it already died? (sync error?)
Expand Down Expand Up @@ -310,7 +313,8 @@ BOOL recvDroidDisEmbark(NETQUEUE queue)
NETend();

// find the transporter first
if (!IdToDroid(transporterID, player, &psTransporterDroid))
psTransporterDroid = IdToDroid(transporterID, player);
if (!psTransporterDroid)
{
// Possible it already died? (sync error?)
debug(LOG_WARNING, "player's %d transport droid %d wasn't found?", player, transporterID);
Expand Down Expand Up @@ -676,8 +680,8 @@ BOOL recvDroidInfo(NETQUEUE queue)
NETuint32_t(&deltaDroidId);
info.droidId += deltaDroidId;

DROID *psDroid = NULL;
if (!IdToDroid(info.droidId, ANYPLAYER, &psDroid))
DROID *psDroid = IdToDroid(info.droidId, ANYPLAYER);
if (!psDroid)
{
debug(LOG_NEVER, "Packet from %d refers to non-existent droid %u, [%s : p%d]",
queue.index, info.droidId, isHumanPlayer(info.player) ? "Human" : "AI", info.player);
Expand Down Expand Up @@ -734,21 +738,17 @@ static BASE_OBJECT *processDroidTarget(OBJECT_TYPE desttype, uint32_t destid)
else
{
BASE_OBJECT *psObj = NULL;
DROID *pD;

switch (desttype)
{
case OBJ_DROID:
if (IdToDroid(destid, ANYPLAYER, &pD))
{
psObj = (BASE_OBJECT*)pD;
}
psObj = IdToDroid(destid, ANYPLAYER);
break;
case OBJ_STRUCTURE:
psObj = (BASE_OBJECT*)IdToStruct(destid,ANYPLAYER);
psObj = IdToStruct(destid, ANYPLAYER);
break;
case OBJ_FEATURE:
psObj = (BASE_OBJECT*)IdToFeature(destid,ANYPLAYER);
psObj = IdToFeature(destid, ANYPLAYER);
break;

// We should not get this!
Expand Down Expand Up @@ -804,7 +804,8 @@ BOOL recvDestroyDroid(NETQUEUE queue)

// Retrieve the droid
NETuint32_t(&id);
if (!IdToDroid(id, ANYPLAYER, &psDroid))
psDroid = IdToDroid(id, ANYPLAYER);
if (!psDroid)
{
debug(LOG_DEATH, "droid %d on request from player %d can't be found? Must be dead already?",
id, queue.index );
Expand Down
4 changes: 2 additions & 2 deletions src/multigifts.cpp
Expand Up @@ -182,9 +182,9 @@ void giftRadar(uint8_t from, uint8_t to, BOOL send)
// \param to :player that should be getting the droid
static void recvGiftDroids(uint8_t from, uint8_t to, uint32_t droidID)
{
DROID *psDroid;
DROID *psDroid = IdToDroid(droidID, from);

if (IdToDroid(droidID, from, &psDroid))
if (psDroid)
{
syncDebugDroid(psDroid, '<');
giftSingleDroid(psDroid, to);
Expand Down
106 changes: 40 additions & 66 deletions src/multiplay.cpp
Expand Up @@ -290,110 +290,82 @@ BOOL multiPlayerLoop(void)
// quikie functions.

// to get droids ...
BOOL IdToDroid(UDWORD id, UDWORD player, DROID **psDroid)
DROID *IdToDroid(UDWORD id, UDWORD player)
{
UDWORD i;
DROID *d;

if(player == ANYPLAYER)
if (player == ANYPLAYER)
{
for(i=0;i<MAX_PLAYERS;i++) // find the droid to order form them all
for (int i = 0; i < MAX_PLAYERS; i++)
{
d = apsDroidLists[i];
while((d != NULL )&&(d->id !=id) )d=d->psNext;
if(d)
for (DROID *d = apsDroidLists[i]; d; d = d->psNext)
{
*psDroid = d;
return true;
if (d->id == id)
{
return d;
}
}
}
return false;
}
else // find the droid, given player
else if (player < MAX_PLAYERS)
{
if (player >= MAX_PLAYERS)
for (DROID *d = apsDroidLists[player]; d; d = d->psNext)
{
debug(LOG_FEATURE, "Feature detected");
// feature hack, player = PLAYER_FEATURE are features
return false;
}
d = apsDroidLists[player];
while( (d != NULL ) && (d->id !=id))d=d->psNext;
if(d)
{
*psDroid = d;
return true;
if (d->id == id)
{
return d;
}
}
return false;
}
return NULL;
}

// ////////////////////////////////////////////////////////////////////////////
// find a structure
STRUCTURE *IdToStruct(UDWORD id,UDWORD player)
STRUCTURE *IdToStruct(UDWORD id, UDWORD player)
{
STRUCTURE *psStr = NULL;
UDWORD i;

if(player == ANYPLAYER)
if (player == ANYPLAYER)
{
for(i=0;i<MAX_PLAYERS;i++)
for (int i = 0; i < MAX_PLAYERS; i++)
{
for (psStr=apsStructLists[i];( (psStr != NULL) && (psStr->id != id)); psStr=psStr->psNext) {}
if(psStr)
for (STRUCTURE *d = apsStructLists[i]; d; d = d->psNext)
{
return psStr;
if (d->id == id)
{
return d;
}
}
}
}
else
else if (player < MAX_PLAYERS)
{
if (player >= MAX_PLAYERS)
for (STRUCTURE *d = apsStructLists[player]; d; d = d->psNext)
{
debug(LOG_FEATURE, "Feature detected");
// feature hack, player = PLAYER_FEATURE are features
return NULL;
if (d->id == id)
{
return d;
}
}
for (psStr=apsStructLists[player];((psStr != NULL )&&(psStr->id != id) );psStr=psStr->psNext) {}
}
return psStr;
return NULL;
}

// ////////////////////////////////////////////////////////////////////////////
// find a feature
FEATURE *IdToFeature(UDWORD id,UDWORD player)
FEATURE *IdToFeature(UDWORD id, UDWORD player)
{
FEATURE *psF =NULL;
UDWORD i;

STATIC_ASSERT(MAX_PLAYERS + 2 < ANYPLAYER);
if(player == ANYPLAYER)
{
for(i=0;i<MAX_PLAYERS;i++)
{
for(psF=apsFeatureLists[i];( (psF != NULL) && (psF->id != id)); psF=psF->psNext) {}
if(psF)
{
return psF;
}
}
}
else
(void)player; // unused, all features go into player 0
for (FEATURE *d = apsFeatureLists[0]; d; d = d->psNext)
{
if (player >= MAX_PLAYERS)
if (d->id == id)
{
debug(LOG_FEATURE, "Feature detected");
// feature hack, player = PLAYER_FEATURE are features - but we're in a function called IdTo **Feature**...
return NULL;
return d;
}
for(psF=apsFeatureLists[player];((psF != NULL )&&(psF->id != id) );psF=psF->psNext) {}
}
return psF;
return NULL;
}

// ////////////////////////////////////////////////////////////////////////////

DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player)
DROID_TEMPLATE *IdToTemplate(UDWORD tempId, UDWORD player)
{
DROID_TEMPLATE *psTempl = NULL;
UDWORD i;
Expand Down Expand Up @@ -428,7 +400,9 @@ BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player)
STRUCTURE *pS;
FEATURE *pF;
// droids.
if (IdToDroid(id,player,&pD))

pD = IdToDroid(id, player);
if (pD)
{
return (BASE_OBJECT*)pD;
}
Expand Down
2 changes: 1 addition & 1 deletion src/multiplay.h
Expand Up @@ -149,7 +149,7 @@ extern UBYTE bDisplayMultiJoiningStatus; // draw load progress?

extern WZ_DECL_WARN_UNUSED_RESULT BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player);
extern WZ_DECL_WARN_UNUSED_RESULT STRUCTURE *IdToStruct(UDWORD id,UDWORD player);
extern WZ_DECL_WARN_UNUSED_RESULT BOOL IdToDroid(UDWORD id, UDWORD player, DROID **psDroid);
extern WZ_DECL_WARN_UNUSED_RESULT DROID *IdToDroid(UDWORD id, UDWORD player);
extern WZ_DECL_WARN_UNUSED_RESULT FEATURE *IdToFeature(UDWORD id,UDWORD player);
extern WZ_DECL_WARN_UNUSED_RESULT DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player);

Expand Down
4 changes: 2 additions & 2 deletions src/multistruct.cpp
Expand Up @@ -173,12 +173,12 @@ BOOL recvDemolishFinished(NETQUEUE queue)
NETend();

psStruct = IdToStruct(structID, ANYPLAYER);
if (!IdToDroid(droidID, ANYPLAYER, &psDroid))
psDroid = IdToDroid(droidID, ANYPLAYER);
if (!psDroid)
{
debug(LOG_ERROR, "recvDemolishFinished: Packet with bad droid ID received. Discarding!");
return false;
}

if (psStruct)
{
// Demolish it
Expand Down
3 changes: 2 additions & 1 deletion src/multisync.cpp
Expand Up @@ -347,7 +347,8 @@ BOOL recvDroidCheck(NETQUEUE queue)
NETauto(&pc);

// Find the droid in question
if (!IdToDroid(pc.droidID, pc.player, &pD))
pD = IdToDroid(pc.droidID, pc.player);
if (!pD)
{
NETlogEntry("Recvd Unknown droid info. val=player", SYNC_FLAG, pc.player);
debug(LOG_SYNC, "Received checking info for an unknown (as yet) droid. player:%d ref:%d", pc.player, pc.droidID);
Expand Down

0 comments on commit 294335e

Please sign in to comment.