All pastes #9112 Raw Edit

Someone

public text v1 · immutable
#9112 ·published 2005-04-08 17:32 UTC
rendered paste body
diff -u src/bzflag-orig/HUDRenderer.cxx src/bzflag/HUDRenderer.cxx
--- src/bzflag-orig/HUDRenderer.cxx 2005-04-08 13:28:30.000000000 -0400
+++ src/bzflag/HUDRenderer.cxx   2005-04-08 13:28:33.000000000 -0400
@@ -779,6 +779,27 @@
   fm.drawString(x, y, 0, majorFontFace, majorFontSize, buffer);
 }
 
+int HUDRenderer::tankTKRatioCompare(const void* _a, const void* _b)
+{
+  RemotePlayer* a = World::getWorld()->getPlayer(*(int*)_a);
+  RemotePlayer* b = World::getWorld()->getPlayer(*(int*)_b);
+
+  float a_ratio=a->getTKRatio();
+  float b_ratio=b->getTKRatio();
+
+  if ( a_ratio > b_ratio ) {
+    return -1;
+  } else if ( b_ratio > a_ratio ) {
+    return 1;
+  } else {
+    // fallback on reverse of tankScoreCompare
+    if (World::getWorld()->allowRabbit())
+      return a->getRabbitScore() - b->getRabbitScore();
+    else
+      return a->getScore() - b->getScore();
+  }
+}
+
 int HUDRenderer::tankScoreCompare(const void* _a, const void* _b)
 {
   RemotePlayer* a = World::getWorld()->getPlayer(*(int*)_a);
@@ -896,7 +917,8 @@
     }
   }
 
-  qsort(players, plrCount, sizeof(int), tankScoreCompare);
+  // qsort(players, plrCount, sizeof(int), tankScoreCompare);
+  qsort(players, plrCount, sizeof(int), tankTKRatioCompare);
 
   // list player scores
   bool drewMyScore = false;
diff -u src/bzflag-orig/HUDRenderer.h src/bzflag/HUDRenderer.h
--- src/bzflag-orig/HUDRenderer.h   2005-04-08 13:28:30.000000000 -0400
+++ src/bzflag/HUDRenderer.h  2005-04-08 13:28:33.000000000 -0400
@@ -140,6 +140,7 @@
   void     resize(bool firstTime);
   static void resizeCallback(void*);
   static int  tankScoreCompare(const void* _a, const void* _b);
+  static int  tankTKRatioCompare(const void* _a, const void* _b);
   static int  teamScoreCompare(const void* _a, const void* _b);
 
 private:
diff -u src/bzflag-orig/Player.cxx src/bzflag/Player.cxx
--- src/bzflag-orig/Player.cxx   2005-04-08 13:28:30.000000000 -0400
+++ src/bzflag/Player.cxx  2005-04-08 13:28:33.000000000 -0400
@@ -166,6 +166,17 @@
 }
 
 
+float Player::getTKRatio() const
+{
+  if ( wins == 0 ) {
+    // well, we have to return *something* if they have no wins
+    return (float)tks/1.0f;
+  } else {
+    return (float)tks/(float)wins;
+  }
+}
+
+
 void Player::getMuzzle(float* m) const
 {
   // NOTE: like getRadius(), we only use dimensionsScale[0].
diff -u src/bzflag-orig/Player.h src/bzflag/Player.h
--- src/bzflag-orig/Player.h  2005-04-08 13:28:30.000000000 -0400
+++ src/bzflag/Player.h 2005-04-08 13:28:33.000000000 -0400
@@ -84,6 +84,7 @@
   short    getWins() const;
   short    getLosses() const;
   short    getTeamKills() const;
+  float         getTKRatio() const;
   short    getScore() const;
   const float*   getDimensions() const;
   short    getRabbitScore() const;
diff -u src/bzflag-orig/playing.cxx src/bzflag/playing.cxx
--- src/bzflag-orig/playing.cxx  2005-04-08 13:28:30.000000000 -0400
+++ src/bzflag/playing.cxx 2005-04-08 13:28:33.000000000 -0400
@@ -584,15 +584,24 @@
       // in case we don't find one
       roamTrackWinner = 0;
     }
-    // FIXME find the current living winner alive
-    int bestScore = -65536; // nobody should be this bad, should they?
+//    // FIXME find the current living winner alive
+//    int bestScore = -65536; // nobody should be this bad, should they?
+//    for (int i = 0; i < curMaxPlayers; i++) {
+//      if (player[i] && player[i]->isAlive() && player[i]->getScore() >= bestScore) {
+//   roamTrackWinner = i;
+//   bestScore = player[i]->getScore();
+//      }
+//    }
+//    playerString = "Winner ";
+    // find the worst tk alive
+    float worstTKRatio = -1.0f;
     for (int i = 0; i < curMaxPlayers; i++) {
-      if (player[i] && player[i]->isAlive() && player[i]->getScore() >= bestScore) {
+      if (player[i] && player[i]->isAlive() && player[i]->getTKRatio() >= worstTKRatio) {
   roamTrackWinner = i;
-  bestScore = player[i]->getScore();
+  worstTKRatio = player[i]->getTKRatio();
       }
     }
-    playerString = "Winner ";
+    playerString = "Worst TK ";
   }
 
   Player* tracked = player[roamTrackWinner];