|
From: Tim R. <tim...@us...> - 2001-07-12 15:57:15
|
Update of /cvsroot/bzflag/bzflag/src/bzflag
In directory usw-pr-cvs1:/tmp/cvs-serv1634/src/bzflag
Modified Files:
HUDRenderer.cxx HUDRenderer.h
Log Message:
better, faster, stronger, able to leap tall buildings score sort
Index: HUDRenderer.cxx
===================================================================
RCS file: /cvsroot/bzflag/bzflag/src/bzflag/HUDRenderer.cxx,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- HUDRenderer.cxx 2001/07/12 02:18:53 1.12
+++ HUDRenderer.cxx 2001/07/12 15:57:12 1.13
@@ -23,6 +23,7 @@
#include "World.h"
#include "OpenGLGState.h"
#include "texture.h"
+#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
@@ -753,6 +754,14 @@
majorFont.draw(buffer, x, y);
}
+int HUDRenderer::tankScoreCompare(const void* _a, const void* _b)
+{
+ LocalPlayer *a = (LocalPlayer *) _a;
+ LocalPlayer *b = (LocalPlayer *) _b;
+
+ return a->getScore() - b->getScore();
+}
+
void HUDRenderer::renderScoreboard(SceneRenderer& renderer)
{
int i, j;
@@ -776,44 +785,24 @@
int y = (int)(y0 - dy);
drawPlayerScore(myTank, x1, x2, x3, (float)y);
y -= (int)dy;
- RemotePlayer **players_unsorted;
- RemotePlayer **players;
- int hiScore;
- int hiScoreIndex;
- RemotePlayer* hiScorePlayer;
int plrCount = 0;
- int maxPlayers = World::getWorld()->getMaxPlayers();
+ const int maxPlayers = World::getWorld()->getMaxPlayers();
// run a sort by score
- players_unsorted = (RemotePlayer **)malloc(maxPlayers * sizeof(RemotePlayer *));
- players = (RemotePlayer **)malloc(maxPlayers * sizeof(RemotePlayer *));
+ RemotePlayer **players = (RemotePlayer **)alloca(maxPlayers * sizeof(RemotePlayer *));
for (j = 0; j < maxPlayers; j++) {
- players_unsorted[j] = World::getWorld()->getPlayer(j);
- if (players_unsorted[j]) plrCount++;
- }
- for (i = 0; i < plrCount; i++) {
- hiScoreIndex = -1;
- hiScore = 0;
- hiScorePlayer = (RemotePlayer *)NULL;
- for (j = 0; j < maxPlayers; j++) {
- if (players_unsorted[j] && (hiScoreIndex < 0 || (players_unsorted[j]->getScore() > hiScore))) {
- hiScore = players_unsorted[j]->getScore();
- hiScorePlayer = players_unsorted[j];
- hiScoreIndex = j;
- }
- }
- if (hiScoreIndex >= 0) {
- players[i] = hiScorePlayer;
- players_unsorted[hiScoreIndex] = (RemotePlayer *)NULL;
- }
+ players[j] = World::getWorld()->getPlayer(j);
+ if (players[j]) plrCount++;
}
- free(players_unsorted);
+
+ qsort(players, plrCount, sizeof(LocalPlayer*), tankScoreCompare);
+
for (i = 0; i < plrCount; i++) {
RemotePlayer* player = players[i];
if (!player) continue;
y -= (int)dy;
drawPlayerScore(player, x1, x2, x3, (float)y);
}
- free(players);
+
y -= (int)dy;
const int maxDeadPlayers = World::getWorld()->getMaxDeadPlayers();
DeadPlayer** deadPlayers = World::getWorld()->getDeadPlayers();
Index: HUDRenderer.h
===================================================================
RCS file: /cvsroot/bzflag/bzflag/src/bzflag/HUDRenderer.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- HUDRenderer.h 2001/07/11 08:42:50 1.6
+++ HUDRenderer.h 2001/07/12 15:57:12 1.7
@@ -124,6 +124,7 @@
void resize(boolean firstTime);
static void resizeCallback(void*);
+ static int tankScoreCompare(const void* _a, const void* _b);
class Marker {
public:
|