/* * Hedgewars, a free turn based strategy game * Copyright (c) 2004-2015 Andrey Korotaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef GAME_H #define GAME_H #include #include "team.h" #include "namegen.h" #include "tcpBase.h" class GameUIConfig; class GameCFGWidget; class TeamSelWidget; enum GameType { gtNone = 0, gtLocal = 1, gtQLocal = 2, gtDemo = 3, gtNet = 4, gtTraining = 5, gtCampaign = 6, gtSave = 7, }; enum GameState { gsNotStarted = 0, gsStarted = 1, gsInterrupted = 2, gsFinished = 3, gsStopped = 4, gsDestroyed = 5, gsHalted = 6 }; enum RecordType { rtDemo, rtSave, rtNeither, }; bool checkForDir(const QString & dir); // last game info extern QList lastGameStartArgs; extern GameType lastGameType; extern GameCFGWidget * lastGameCfg; extern QString lastGameAmmo; extern TeamSelWidget * lastGameTeamSel; class HWGame : public TCPBase { Q_OBJECT public: HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget = 0); virtual ~HWGame(); void AddTeam(const QString & team); void PlayDemo(const QString & demofilename, bool isSave); void PlayOfficialServerDemo(); void StartLocal(); void StartQuick(); void StartNet(); void StartTraining(const QString & file, const QString & subFolder, const QString & trainTeam); void StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam); void abort(); GameState gameState; bool netSuspend; protected: virtual QStringList getArguments(); virtual void onClientRead(); virtual void onClientDisconnect(); signals: void SendNet(const QByteArray & msg); void SendChat(const QString & msg); void SendTeamMessage(const QString & msg); void GameStateChanged(GameState gameState); void DemoPresenceChanged(bool hasDemo); void GameStats(char type, const QString & info); void HaveRecord(RecordType type, const QByteArray & record); void ErrorMessage(const QString &); void CampStateChanged(int); void TrainingStateChanged(int); void SendConsoleCommand(const QString & command); public slots: void FromNet(const QByteArray & msg); void FromNetChat(const QString & msg); void FromNetWarning(const QString & msg); void FromNetError(const QString & msg); private: char msgbuf[MAXMSGCHARS]; QString ammostr; GameUIConfig * config; GameCFGWidget * gamecfg; TeamSelWidget* m_pTeamSelWidget; GameType gameType; QByteArray m_netSendBuffer; void commonConfig(); void SendConfig(); void SendQuickConfig(); void SendNetConfig(); void SendTrainingConfig(); void SendCampaignConfig(); void ParseMessage(const QByteArray & msg); void SetGameState(GameState state); void SetDemoPresence(bool hasDemo); void sendCampaignVar(const QByteArray & varToSend); void writeCampaignVar(const QByteArray &varVal); void sendMissionVar(const QByteArray & varToSend); void writeMissionVar(const QByteArray &varVal); void flushNetBuffer(); }; #endif