# HG changeset patch # User unc0rr # Date 1180558137 0 # Node ID eebb7684ac22440e1f7db2b3a401d12cc5582c70 # Parent 8136a53635869cd58794aa468a5e29489b805c2f Save saves in Save directory diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/game.cpp Wed May 30 20:48:57 2007 +0000 @@ -23,8 +23,6 @@ #include #include #include -#include -#include #include "game.h" #include "hwconsts.h" @@ -50,8 +48,9 @@ void HWGame::onClientDisconnect() { - SaveDemo(cfgdir->absolutePath() + "/Demos/LastRound.hwd_" + cProtoVer); - emit GameStateChanged(gsStopped); + if (gameState == gsInterrupted) emit HaveRecord(false, demo); + else if (gameState == gsFinished) emit HaveRecord(true, demo); + SetGameState(gsStopped); } void HWGame::commonConfig() @@ -166,11 +165,11 @@ break; } case 'Q': { - emit GameStateChanged(gsInterrupted); + SetGameState(gsInterrupted); break; } case 'q': { - emit GameStateChanged(gsFinished); + SetGameState(gsFinished); break; } default: { @@ -178,7 +177,7 @@ { emit SendNet(msg); } - demo->append(msg); + demo.append(msg); } } } @@ -227,24 +226,6 @@ TeamCount++; } -void HWGame::SaveDemo(const QString & filename) -{ - demo->replace(QByteArray("\x02TL"), QByteArray("\x02TD")); - demo->replace(QByteArray("\x02TN"), QByteArray("\x02TD")); - - QFile demofile(filename); - if (!demofile.open(QIODevice::WriteOnly)) - { - emit ErrorMessage(tr("Cannot save demo to file %1").arg(filename)); - return ; - } - QDataStream stream(&demofile); - stream.writeRawData(demo->constData(), demo->size()); - demofile.close(); - delete demo; - demo=0; -} - void HWGame::PlayDemo(const QString & demofilename) { gameType = gtDemo; @@ -259,33 +240,39 @@ toSendBuf = demofile.readAll(); // run engine - demo = new QByteArray; + demo.clear(); Start(); - emit GameStateChanged(gsStarted); + SetGameState(gsStarted); } void HWGame::StartNet() { gameType = gtNet; - demo = new QByteArray; + demo.clear(); Start(); - emit GameStateChanged(gsStarted); + SetGameState(gsStarted); } void HWGame::StartLocal() { gameType = gtLocal; seed = gamecfg->getCurrentSeed(); - demo = new QByteArray; + demo.clear(); Start(); - emit GameStateChanged(gsStarted); + SetGameState(gsStarted); } void HWGame::StartQuick() { gameType = gtQLocal; seed = gamecfg->getCurrentSeed(); - demo = new QByteArray; + demo.clear(); Start(); - emit GameStateChanged(gsStarted); + SetGameState(gsStarted); } + +void HWGame::SetGameState(GameState state) +{ + gameState = state; + emit GameStateChanged(state); +} diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/game.h --- a/QTfrontend/game.h Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/game.h Wed May 30 20:48:57 2007 +0000 @@ -19,13 +19,9 @@ #ifndef GAME_H #define GAME_H -#include -#include #include #include "team.h" -#include - #include "tcpBase.h" class GameUIConfig; @@ -62,6 +58,7 @@ void SendNet(const QByteArray & msg); void GameStateChanged(GameState gameState); void GameStats(char type, const QString & info); + void HaveRecord(bool isDemo, const QByteArray & record); void ErrorMessage(const QString &); public slots: @@ -82,13 +79,14 @@ GameCFGWidget * gamecfg; TeamSelWidget* m_pTeamSelWidget; GameType gameType; + GameState gameState; void commonConfig(); void SendConfig(); void SendQuickConfig(); void SendNetConfig(); void ParseMessage(const QByteArray & msg); - void SaveDemo(const QString & filename); + void SetGameState(GameState state); }; #endif diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/hwform.cpp Wed May 30 20:48:57 2007 +0000 @@ -455,6 +455,7 @@ connect(game, SIGNAL(GameStateChanged(GameState)), this, SLOT(GameStateChanged(GameState))); connect(game, SIGNAL(GameStats(char, const QString &)), this, SLOT(GameStats(char, const QString &))); connect(game, SIGNAL(ErrorMessage(const QString &)), this, SLOT(ShowErrorMessage(const QString &)), Qt::QueuedConnection); + connect(game, SIGNAL(HaveRecord(bool, const QByteArray &)), this, SLOT(GetRecord(bool, const QByteArray &))); } void HWForm::ShowErrorMessage(const QString & msg) @@ -463,3 +464,30 @@ "Hedgewars", msg); } + +void HWForm::GetRecord(bool isDemo, const QByteArray & record) +{ + QString filename; + QByteArray demo = record; + if (isDemo) + { + demo.replace(QByteArray("\x02TL"), QByteArray("\x02TD")); + demo.replace(QByteArray("\x02TN"), QByteArray("\x02TD")); + filename = cfgdir->absolutePath() + "/Demos/LastRound.hwd_" + cProtoVer; + } else + { + demo.replace(QByteArray("\x02TL"), QByteArray("\x02TS")); + demo.replace(QByteArray("\x02TN"), QByteArray("\x02TS")); + filename = cfgdir->absolutePath() + "/Saves/LastRound.hws_" + cProtoVer; + } + + + QFile demofile(filename); + if (!demofile.open(QIODevice::WriteOnly)) + { + ShowErrorMessage(tr("Cannot save record to file %1").arg(filename)); + return ; + } + demofile.write(demo.constData(), demo.size()); + demofile.close(); +} diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/hwform.h --- a/QTfrontend/hwform.h Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/hwform.h Wed May 30 20:48:57 2007 +0000 @@ -72,6 +72,7 @@ void GameStats(char type, const QString & info); void ForcedDisconnect(); void ShowErrorMessage(const QString &); + void GetRecord(bool isDemo, const QByteArray & record); private: void _NetConnect(const QString & hostName, quint16 port, const QString & nick); diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/main.cpp.in --- a/QTfrontend/main.cpp.in Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/main.cpp.in Wed May 30 20:48:57 2007 +0000 @@ -66,6 +66,7 @@ if (checkForDir(cfgdir->absolutePath() + "/.hedgewars")) { checkForDir(cfgdir->absolutePath() + "/.hedgewars/Demos"); + checkForDir(cfgdir->absolutePath() + "/.hedgewars/Saves"); } cfgdir->cd(".hedgewars"); diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/tcpBase.cpp --- a/QTfrontend/tcpBase.cpp Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/tcpBase.cpp Wed May 30 20:48:57 2007 +0000 @@ -150,12 +150,12 @@ if (toSendBuf.size() > 0) { IPCSocket->write(toSendBuf); - if(m_isDemoMode) demo->append(toSendBuf); + if(m_isDemoMode) demo.append(toSendBuf); toSendBuf.clear(); } if(!buf.isEmpty()) { IPCSocket->write(buf); - if(m_isDemoMode && demo) demo->append(buf); + if(m_isDemoMode) demo.append(buf); } } } diff -r 8136a5363586 -r eebb7684ac22 QTfrontend/tcpBase.h --- a/QTfrontend/tcpBase.h Wed May 30 19:29:27 2007 +0000 +++ b/QTfrontend/tcpBase.h Wed May 30 20:48:57 2007 +0000 @@ -51,7 +51,7 @@ QByteArray readbuffer; QByteArray toSendBuf; - QByteArray * demo; + QByteArray demo; void SendIPC(const QByteArray & buf); void RawSendIPC(const QByteArray & buf);