# HG changeset patch
# User sheepluva
# Date 1319586608 -7200
# Node ID ee9465c0ea824da1f687c19891e3df6a3840d982
# Parent  923c8414e3af27ee5203938222ac22fcaba65737
move (prematurely) finishing game by removing all teams into engine since that's where it should happen

diff -r 923c8414e3af -r ee9465c0ea82 QTfrontend/game.cpp
--- a/QTfrontend/game.cpp	Wed Oct 26 01:17:44 2011 +0200
+++ b/QTfrontend/game.cpp	Wed Oct 26 01:50:08 2011 +0200
@@ -390,13 +390,9 @@
     emit GameStateChanged(state);
 }
 
-void HWGame::KillAllTeams()
+void HWGame::abort()
 {
-    if (m_pTeamSelWidget)
-    {
-        QByteArray buf;
-        foreach(HWTeam team, m_pTeamSelWidget->getPlayingTeams())
-            HWProto::addStringToBuffer(buf, QString("eteamgone %1").arg(team.name()));
-        RawSendIPC(buf);
-    }
+    QByteArray buf;
+    HWProto::addStringToBuffer(buf, QString("efinish"));
+    RawSendIPC(buf);
 }
diff -r 923c8414e3af -r ee9465c0ea82 QTfrontend/game.h
--- a/QTfrontend/game.h	Wed Oct 26 01:17:44 2011 +0200
+++ b/QTfrontend/game.h	Wed Oct 26 01:50:08 2011 +0200
@@ -54,7 +54,7 @@
     void StartNet();
     void StartTraining(const QString & file);
     void StartCampaign(const QString & file);
-    void KillAllTeams();
+    void abort();
     GameState gameState;
     bool netSuspend;
 
diff -r 923c8414e3af -r ee9465c0ea82 QTfrontend/hwform.cpp
--- a/QTfrontend/hwform.cpp	Wed Oct 26 01:17:44 2011 +0200
+++ b/QTfrontend/hwform.cpp	Wed Oct 26 01:50:08 2011 +0200
@@ -482,7 +482,8 @@
     if (id == ID_PAGE_ROOMSLIST) {
         if (hwnet && game && game->gameState == gsStarted) { // abnormal exit - kick or room destruction - send kills.
             game->netSuspend = true;
-            game->KillAllTeams();
+            ui.pageRoomsList->displayWarning(tr("Game aborted"));
+            game->abort();
         }
     }
 
diff -r 923c8414e3af -r ee9465c0ea82 hedgewars/uTeams.pas
--- a/hedgewars/uTeams.pas	Wed Oct 26 01:17:44 2011 +0200
+++ b/hedgewars/uTeams.pas	Wed Oct 26 01:50:08 2011 +0200
@@ -542,6 +542,23 @@
 end;
 
 
+procedure chFinish(var s:shortstring);
+var t: LongInt;
+begin
+// avoid compiler hint
+s:= s;
+
+t:= 0;
+while (t < cMaxTeams) and (TeamsArray[t] <> nil) do
+    begin
+    TeamsArray[t]^.hasGone:= true;
+    inc(t);
+    end;
+
+AddChatString('** Good-bye!');
+RecountAllTeamsHealth();
+end;
+
 procedure initModule;
 begin
     RegisterVariable('addhh', vtCommand, @chAddHH, false);
@@ -549,6 +566,7 @@
     RegisterVariable('hhcoords', vtCommand, @chSetHHCoords, false);
     RegisterVariable('bind', vtCommand, @chBind, true );
     RegisterVariable('teamgone', vtCommand, @chTeamGone, true );
+    RegisterVariable('finish', vtCommand, @chFinish, true ); // all teams gone
 
     CurrentTeam:= nil;
     PreviousTeam:= nil;