diff options
Diffstat (limited to 'libkdegames/kgame/kgame.h')
-rw-r--r-- | libkdegames/kgame/kgame.h | 933 |
1 files changed, 0 insertions, 933 deletions
diff --git a/libkdegames/kgame/kgame.h b/libkdegames/kgame/kgame.h deleted file mode 100644 index bf66dcb8..00000000 --- a/libkdegames/kgame/kgame.h +++ /dev/null @@ -1,933 +0,0 @@ -/* - This file is part of the KDE games library - Copyright (C) 2001 Martin Heni (martin@heni-online.de) - Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ -/* - $Id$ -*/ -#ifndef __KGAME_H_ -#define __KGAME_H_ - -#include <tqstring.h> -#include <tqptrlist.h> -#include <tqvaluelist.h> - -#include "kgamenetwork.h" -#include <kdemacros.h> -class KRandomSequence; - -class KPlayer; -class KGamePropertyBase; -class KGamePropertyHandler; -class KGameSequence; - -class KGamePrivate; - -/** - * @short The main KDE game object - * - * The KGame class is the central game object. A game basically - * consists of following features: - * - Player handling (add, remove,...) - * - Game status (end,start,pause,...) - * - load/save - * - Move (and message) handling - * - nextPlayer and gameOver() - * - Network connection (for KGameNetwork) - * - * Example: - * \code - * KGame *game=new KGame; - * \endcode - * - * - * @author Martin Heni <martin@heni-online.de> - * - */ -class KDE_EXPORT KGame : public KGameNetwork -{ - Q_OBJECT - TQ_OBJECT - -public: - typedef TQPtrList<KPlayer> KGamePlayerList; - - /** - * The policy of the property. This can be PolicyClean (setVale uses - * send), PolicyDirty (setValue uses changeValue) or - * PolicyLocal (setValue uses setLocal). - * - * A "clean" policy means that the property is always the same on every - * client. This is achieved by calling send which actually changes - * the value only when the message from the MessageServer is received. - * - * A "dirty" policy means that as soon as setValue is called the - * property is changed immediately. And additionally sent over network. - * This can sometimes lead to bugs as the other clients do not - * immediately have the same value. For more information see - * changeValue. - * - * PolicyLocal means that a KGameProperty behaves like ever - * "normal" variable. Whenever setValue is called (e.g. using "=") - * the value of the property is changes immediately without sending it - * over network. You might want to use this if you are sure that all - * clients set the property at the same time. - **/ - enum GamePolicy - { - PolicyUndefined = 0, - PolicyClean = 1, - PolicyDirty = 2, - PolicyLocal = 3 - }; - - /** - * Create a KGame object. The cookie is used to identify your - * game in load/save and network operations. Change this between - * games. - */ - KGame(int cookie=42,TQObject* parent=0); - - /** - * Destructs the game - */ - virtual ~KGame(); - - /** - * Gives debug output of the game status - */ - virtual void Debug(); - - /** - * Game status - Use this to Control the game flow. - * The KGame e.g. sets the status to Pause when you have - * less player than the minimum amount - */ - enum GametqStatus - { - Init = 0, - Run = 1, - Pause = 2, - End = 3, - Abort = 4, - SystemPause = 5, - Intro = 6, - UsertqStatus = 7 - }; - - // Properties - /** - * Returns a list of all active players - * - * @return the list of players - */ - KGamePlayerList *playerList(); - - /** - * The same as @ref playerList but returns a const pointer. - **/ - const KGamePlayerList *playerList() const; - - /** - * Returns a list of all inactive players - * @return the list of players - */ - KGamePlayerList *inactivePlayerList(); - - /** - * The same as @ref inactivePlayerList but returns a const pointer. - **/ - const KGamePlayerList *inactivePlayerList() const; - - /** - * Returns a pointer to the game's KRandomSequence. This sequence is - * identical for all network players! - * @return KRandomSequence pointer - */ - KRandomSequence *random() const; - - /** - * @return The KGameSequence object that is currently in use. - * @see setGameSequence - **/ - KGameSequence *gameSequence() const; - - /** - * Is the game running - * @return true/false - */ - bool isRunning() const; - - // Player handling - /** - * Returns the player object for a given player id - * @param id Player id - * @return player object - */ - KPlayer *findPlayer(TQ_UINT32 id) const; - - /** - * Set a new @ref KGameSequence to control player management. By default - * KGame uses a normal @ref KGameSequence object. You might want to subclass - * that and provide your own object. - * - * The previous sequence will get deleted. - * @param sequence The new game sequence object. KGame takes ownership and - * will delete it on destruction! - **/ - void setGameSequence(KGameSequence* sequence); - - /** - * Note that KPlayer::save must be implemented properly, as well as - * KPlayer::rtti - * This will only send a message to all clients. The player is _not_ added - * directly! - * See also playerInput which will be called as soon as the - * player really has been added. - * - * Note that an added player will first get into a "queue" and won't be in - * the game. It will be added to the game as soon as systemAddPlayer is - * called what will happen as soon as IdAddPlayer is received. - * - * Note: you probably want to connect to signalPlayerJoinedGame for - * further initialization! - * @param newplayer The player you want to add. KGame will send a message to - * all clients and add the player using systemAddPlayer - **/ - void addPlayer(KPlayer* newplayer); - - /** - * Sends a message over the network, msgid=IdRemovePlayer. - * - * As soon as this message is received by networkTransmission - * systemRemovePlayer is called and the player is removed. - **/ - //AB: TODO: make sendMessage to return if the message will be able to be - //sent, eg if a socket is connected, etc. If sendMessage returns false - //remove the player directly using systemRemovePlayer - bool removePlayer(KPlayer * player) { return removePlayer(player, 0); } - - /** - * Called by the destructor of KPlayer to remove itself from the game - * - **/ - void playerDeleted(KPlayer * player); - - /** - * sends activate player: internal use only? - */ - bool activatePlayer(KPlayer *player); - - /** - * sends inactivate player: internal use only? - */ - bool inactivatePlayer(KPlayer *player); - - /** - * Set the maximal number of players. After this is - * reached no more players can be added. You must be ADMIN to call this (@see - * isAdmin). - * @param maxnumber maximal number of players - */ - void setMaxPlayers(uint maxnumber); - - /** - * What is the maximal number of players? - * @return maximal number of players - */ - int maxPlayers() const; - - /** - * Set the minimal number of players. A game can not be started - * with less player resp. is paused when already running. You must be ADMIN - * to call this (see @ref isAdmin)! - * @param minnumber minimal number of players - */ - void setMinPlayers(uint minnumber); - - /** - * What is the minimal number of players? - * @return minimal number of players - */ - uint minPlayers() const; - - /** - * Returns how many players are plugged into the game - * @return number of players - */ - uint playerCount() const; - - /** - * @deprecated - * Use @ref KGameSequence::nextPlayer instead - **/ - virtual KPlayer * nextPlayer(KPlayer *last,bool exclusive=true); - - // Input events - /** - * Called by KPlayer to send a player input to the - * KMessageServer. - **/ - virtual bool sendPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0); - - /** - * Called when a player input arrives from KMessageServer. - * - * Calls prepareNext (using TQTimer::singleShot) if gameOver() - * returns 0. This function should normally not be used outside KGame. - * It could be made non-virtual,protected in a later version. At the - * moment it is a virtual function to give you more control over KGame. - * - * For documentation see playerInput. - **/ - virtual bool systemPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0); - - /** - * This virtual function is called if the KGame needs to create a new player. - * This happens only over a network and with load/save. Doing nothing - * will create a default KPlayer. If you want to have your own player - * you have to create one with the given rtti here. - * Note: If your game uses a player class derived from KPlayer you MUST - * override this function and create your player here. Otherwise the - * game will crash. - * Example: - * \code - * KPlayer *MyGame::createPlayer(int rtti,int io,bool isvirtual) - * { - * KPlayer *player=new MyPlayer; - * if (!isvirtual) // network player ? - * { - * // Define something like this to add the IO modules - * createIO(player,(KGameIO::IOMode)io); - * } - * return player; - * } - * \endcode - * - * @param rtti is the type of the player (0 means default KPlayer) - * @param io is the 'or'ed rtti of the KGameIO's - * @param isvirtual true if player is virtual - */ - virtual KPlayer *createPlayer(int rtti,int io,bool isvirtual); - - // load/save - /** - * Load a saved game, from file OR network. This function has - * to be overwritten or you need to connect to the load signal - * if you have game data other than KGameProperty. - * For file load you should reset() the game before any load attempt - * to make sure you load into an clear state. - * - * @param stream a data stream where you can stream the game from - * @param reset - shall the game be reset before loading - * - * @return true? - */ - virtual bool load(TQDataStream &stream,bool reset=true); - - /** - * Same as above function but with different parameters - * - * @param filename - the filename of the file to be opened - * @param reset - shall the game be reset before loading - * - * @return true? - **/ - virtual bool load(TQString filename,bool reset=true); - - /** - * Save a game to a file OR to network. Otherwise the same as - * the load function - * - * @param stream a data stream to load the game from - * @param saveplayers If true then all players wil be saved too - * - * @return true? - */ - virtual bool save(TQDataStream &stream,bool saveplayers=true); - - /** - * Same as above function but with different parameters - * - * @param filename the filename of the file to be saved - * @param saveplayers If true then all players wil be saved too - * - * @return true? - **/ - virtual bool save(TQString filename,bool saveplayers=true); - - /** - * Resets the game, i.e. puts it into a state where everything - * can be started from, e.g. a load game - * Right now it does only need to delete all players - * - * @return true on success - */ - virtual bool reset(); - - - // Game sequence - /** - * returns the game status, ie running,pause,ended,... - * - * @return game status - */ - int gametqStatus() const; - - /** - * sets the game status - * - * @param status the new status - */ - void setGametqStatus(int status); - - /** - * docu: see KPlayer - **/ - bool addProperty(KGamePropertyBase* data); - - /** - * This is called by KPlayer::sendProperty only! Internal function! - **/ - bool sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId); - - /** - * This function allows to find the pointer to a player - * property when you know it's id - */ - KGamePropertyBase* findProperty(int id) const; - - /** - * Changes the consistency policy of a property. The - * GamePolicy is one of PolicyClean (default), PolicyDirty or PolicyLocal. - * - * It is up to you to decide how you want to work. - **/ - void setPolicy(GamePolicy p,bool recursive=true); - - /** - * @return The default policy of the property - **/ - GamePolicy policy() const; - - /** - * See KGameNetwork::sendMessage - * - * Send a network message msg with a given message ID msgid to all players of - * a given group (see KPlayer::group) - * @param msg the message which will be send. See messages.txt for contents - * @param msgid an id for this message - * @param sender the id of the sender - * @param group the group of the tqreceivers - * @return true if worked - */ - bool sendGroupMessage(const TQByteArray& msg, int msgid, TQ_UINT32 sender, const TQString& group); - bool sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group); - bool sendGroupMessage(int msg, int msgid, TQ_UINT32 sender, const TQString& group); - bool sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group); - - /** - * This will either forward an incoming message to a specified player - * (see KPlayer::networkTransmission) or - * handle the message directly (e.g. if msgif==IdRemovePlayer it will remove - * the (in the stream) specified player). If both is not possible (i.e. the - * message is user specified data) the signal signalNetworkData is - * emitted. - * - * This emits signalMessageUpdate <em>before</em> doing anything with - * the message. You can use this signal when you want to be notified about - * an update/change. - * @param msgid Specifies the kind of the message. See messages.txt for - * further information - * @param stream The message that is being sent - * @param receiver The is of the player this message is for. 0 For broadcast. - * @param sender - * @param clientID the client from which we received the transmission - hardly used - **/ - virtual void networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 clientID); - - /** - * Returns a pointer to the KGame property handler - **/ - KGamePropertyHandler* dataHandler() const; - -protected slots: - /** - * Called by KGamePropertyHandler only! Internal function! - **/ - void sendProperty(int msgid, TQDataStream& stream, bool* sent); - - /** - * Called by KGamePropertyHandler only! Internal function! - **/ - void emitSignal(KGamePropertyBase *me); - - /** - * @deprecated - * Use KGameSequence::prepareNext() instead - **/ - virtual void prepareNext(); - - - /** - * Calls negotiateNetworkGame() - * See KGameNetwork::signalClientConnected - **/ - void slotClientConnected(TQ_UINT32 clientId); - - /** - * This slot is called whenever the connection to a client is lost (ie the - * signal KGameNetwork::signalClientDisconnected is emitted) and will remove - * the players from that client. - * @param clientId The client the connection has been lost to - * @param broken (ignore this - not used) - **/ - void slotClientDisconnected(TQ_UINT32 clientId,bool broken); - - /** - * This slot is called whenever the connection to the server is lost (ie the - * signal KGameNetwork::signalConnectionBroken is emitted) and will - * switch to local game mode - **/ - void slotServerDisconnected(); - -signals: - /** - * When a client disconnects from the game usually all players from that - * client are removed. But if you use completely the KGame structure you - * probably don't want this. You just want to replace the KGameIO of the - * (human) player by a computer KGameIO. So this player continues game but - * is from this point on controlled by the computer. - * - * You achieve this by connecting to this signal. It is emitted as soon as a - * client disconnects on <em>all</em> other clients. Make sure to add a new - * KGameIO only once! you might want to use @ref isAdmin for this. If you - * added a new KGameIO set *remove=false otherwise the player is completely - * removed. - * @param player The player that is about to be removed. Add your new - * KGameIO here - but only on <em>one</em> client! - * @param remove Set this to FALSE if you don't want this player to be - * removed completely. - **/ - void signalReplacePlayerIO(KPlayer* player, bool* remove); - - /** - * The game will be loaded from the given stream. Load from here - * the data which is NOT a game or player property. - * It is not necessary to use this signal for a full property game. - * - * This signal is emitted <em>before</em> the players are loaded by - * KGame. See also signalLoad - * - * You must load <em>exactly</em> the same data from the stream that you have saved - * in signalSavePrePlayers. Otherwise player loading will not work - * anymore. - * - * @param stream the load stream - */ - void signalLoadPrePlayers(TQDataStream &stream); - - /** - * The game will be loaded from the given stream. Load from here - * the data which is NOT a game or player property. - * It is not necessary to use this signal for a full property game. - * - * @param stream the load stream - */ - void signalLoad(TQDataStream &stream); - - /** - * The game will be saved to the given stream. Fill this with data - * which is NOT a game or player property. - * It is not necessary to use this signal for a full property game. - * - * This signal is emitted <em>before</em> the players are saved by - * KGame. See also signalSave - * - * If you can choose between signalSavePrePlayers and signalSave then - * better use signalSave - * - * @param stream the save stream - **/ - void signalSavePrePlayers(TQDataStream &stream); - - /** - * The game will be saved to the given stream. Fill this with data - * which is NOT a game or player property. - * It is not necessary to use this signal for a full property game. - * - * @param stream the save stream - */ - void signalSave(TQDataStream &stream); - - /** - * Is emmited if a game with a different version cookie is loaded. - * Normally this should result in an error. But maybe you do support - * loading of older game versions. Here would be a good place to do a - * conversion. - * - * @param stream - the load stream - * @param network - true if this is a network connect. False for load game - * @param cookie - the saved cookie. It differs from KGame::cookie() - * @param result - set this to true if you managed to load the game - */ - void signalLoadError(TQDataStream &stream,bool network,int cookie, bool &result); - - /** - * We got an user defined update message. This is usually done - * by a sendData in a inherited KGame Object which defines its - * own methods and has to syncronise them over the network. - * Reaction to this is usually a call to a KGame function. - */ - void signalNetworkData(int msgid,const TQByteArray& buffer, TQ_UINT32 receiver, TQ_UINT32 sender); - - /** - * We got an network message. this can be used to notify us that something - * changed. What changed can be seen in the message id. Whether this is - * the best possible method to do this is unclear... - */ - void signalMessageUpdate(int msgid,TQ_UINT32 receiver,TQ_UINT32 sender); - - /** - * a player left the game because of a broken connection or so! - * - * Note that when this signal is emitted the player is not part of @ref - * playerList anymore but the pointer is still valid. You should do some - * final cleanups here since the player is usually deleted after the signal - * is emitted. - * - * @param player the player who left the game - */ - void signalPlayerLeftGame(KPlayer *player); - - /** - * a player joined the game - * - * @param player the player who joined the game - */ - void signalPlayerJoinedGame(KPlayer *player); - - - /** - * This signal is emmited if a player property changes its value and - * the property is set to notify this change - */ - void signalPropertyChanged(KGamePropertyBase *property, KGame *me); - - /** - * Is emitted after a call to gameOver() returns a non zero - * return code. This code is forwarded to this signal as 'status'. - * - * @param status the return code of gameOver() - * @param current the player who did the last move - * @param me a pointer to the KGame object - */ - void signalGameOver(int status, KPlayer *current, KGame *me); - - /** - * Is emmited after a client is successfully connected to the game. - * The client id is the id of the new game client. An easy way to - * check whether that's us is - * \code - * if (clientid==gameid()) .. // we joined - * else ... // someone joined the game - * \endcode - * @param clientid - The id of the new client - * @param me - our game pointer - */ - void signalClientJoinedGame(TQ_UINT32 clientid,KGame *me); - - /** - * This signal is emitted after a network partner left the - * game (either by a broken connection or voluntarily). - * All changes to the network players have already be done. - * If there are not enough players left, the game might have - * been paused. To check this you get the old gamestatus - * before the disconnection as argument here. The id of the - * client who left the game allows to distinguish who left the - * game. If it is 0, the server disconnected and you were a client - * which has been switched back to local play. - * You can use this signal to, e.g. set some menues back to local - * player when they were network before. - * - * @param clientID - 0:server left, otherwise the client who left - * @param oldgamestatus - the gamestatus before the loss - * @param me - our game pointer - **/ - void signalClientLeftGame(int clientID,int oldgamestatus,KGame *me); - - -protected: - /** - * A player input occurred. This is the most important function - * as the given message will contain the current move made by - * the given player. - * Note that you HAVE to overwrite this function. Otherwise your - * game makes no sense at all. - * Generally you have to return TRUE in this function. Only then - * the game sequence is proceeded by calling @ref playerInputFinished - * which in turn will check for game over or the next player - * However, if you have a delayed move, because you e.g. move a - * card or a piece you want to return FALSE to pause the game sequence - * and then manually call @ref playerInputFinished to resume it. - * Example: - * \code - * bool MyClass::playerInput(TQDataStream &msg,KPlayer *player) - * { - * TQ_INT32 move; - * msg >> move; - * kdDebug() << " Player " << player->id() << " moved to " << move << - * endl; - * return true; - * } - * \endcode - * - * @param msg the move message - * @param player the player who did the move - * @return true - input ready, false: input manual - */ - virtual bool playerInput(TQDataStream &msg,KPlayer *player)=0; - - - /** - * Called after the player input is processed by the game. Here the - * checks for game over and nextPlayer (in the case of turn base games) - * are processed. - * Call this manually if you have a delayed move, i.e. your playerInput - * function returns FALSE. If it returns true you need not do anything - * here. - * - * @return the current player - * - **/ - KPlayer *playerInputFinished(KPlayer *player); - - - /** - * This virtual function can be overwritten for your own player management. - * It is called when a new game connects to an existing network game or - * to the network master. In case you do not want all players of both games - * to be present in the new network game, you can deactivate players here. - * This is of particular importance if you have a game with fixed number of - * player like e.g. chess. A network connect needs to disable one player of - * each game to make sense. - * - * Not overwriting this function will activate a default behaviour which - * will deactivate players until the @ref maxPlayers() numebr is reached - * according to the KPlayer::networkPriority() value. Players with a low - * value will be kicked out first. With equal priority players of the new - * client will leave first. This means, not setting this value and not - * overwriting this function will never allow a chess game to add client - * players!!! - * On the other hand setting one player of each game to a networkPriorty of - * say 10, already does most of the work for you. - * - * The parameters of this function are the playerlist of the network game, - * which is @ref playerList(). The second argument is the player list of - * the new client who wants to join and the third argument serves as return - * parameter. All <em>player ID's</em> which are written into this list - * will be <em>removed</em> from the created game. You do this by an - * \code - * inactivate.append(player->id()); - * \endcode - * - * @param oldplayer - the list of the network players - * @param newplayer - the list of the client players - * @param inactivate - the value list of ids to be deactivated - * - **/ - virtual void newPlayersJoin(KGamePlayerList *oldplayer, - KGamePlayerList *newplayer, - TQValueList<int> &inactivate) { - Q_UNUSED( oldplayer ); - Q_UNUSED( newplayer ); - Q_UNUSED( inactivate ); - } - - /** - * Save the player list to a stream. Used for network game and load/save. - * Can be overwritten if you know what you are doing - * - * @param stream is the stream to save the player ot - * @param list the optional list is the player list to be saved, default is playerList() - * - **/ - void savePlayers(TQDataStream &stream,KGamePlayerList *list=0); - - /** - * Prepare a player for being added. Put all data about a player into the - * stream so that it can be sent to the KGameCommunicationServer using - * addPlayer (e.g.) - * - * This function ensures that the code for adding a player is the same in - * addPlayer as well as in negotiateNetworkGame - * @param stream is the stream to add the player - * @param player The player to add - **/ - void savePlayer(TQDataStream& stream,KPlayer* player); - - /** - * Load the player list from a stream. Used for network game and load/save. - * Can be overwritten if you know what you are doing - * - * @param stream is the stream to save the player to - * @param isvirtual will set the virtual flag true/false - * - **/ - KPlayer *loadPlayer(TQDataStream& stream,bool isvirtual=false); - - - /** - * inactivates player. Use @ref inactivatePlayer instead! - */ - bool systemInactivatePlayer(KPlayer *player); - - /** - * activates player. Use @ref activatePlayer instead! - */ - bool systemActivatePlayer(KPlayer *player); - - /** - * Adds a player to the game - * - * Use @ref addPlayer to send @ref KGameMessage::IdAddPlayer. As soon as - * this Id is received this function is called, where the player (see @ref - * KPlayer::rtti) is added as well as its properties (see @ref KPlayer::save - * and @ref KPlayer::load) - * - * This method calls the overloaded @ref systemAddPlayer with the created - * player as argument. That method will really add the player. - * If you need to do some changes to your newly added player just connect to - * @ref signalPlayerJoinedGame - */ - - /** - * Finally adds a player to the game and therefore to the list. - **/ - void systemAddPlayer(KPlayer* newplayer); - - /** - * Removes a player from the game - * - * Use removePlayer to send KGameMessage::IdRemovePlayer. As soon - * as this Id is received systemRemovePlayer is called and the player is - * removed directly. - **/ - void systemRemovePlayer(KPlayer* player,bool deleteit); - - /** - * This member function will transmit e.g. all players to that client, as well as - * all properties of these players (at least if they have been added by - * @ref KPlayer::addProperty) so that the client will finally have the same - * status as the master. You want to overwrite this function if you expand - * KGame by any properties which have to be known by all clients. - * - * Only the ADMIN is allowed to call this. - * @param clientID The ID of the message client which has connected - **/ - virtual void negotiateNetworkGame(TQ_UINT32 clientID); - - /** - * syncronise the random numbers with all network clients - * not used by KGame - if it should be kept then as public method - */ - void syncRandom(); - - void deletePlayers(); - void deleteInactivePlayers(); - - /** - * @deprecated - * Use @ref KGameSequence instead. - * - * @param player the player who made the last move - * @return anything else but 0 is considered as game over - */ - virtual int checkGameOver(KPlayer *player); - - /** - * Load a saved game, from file OR network. Internal. - * Warning: loadgame must not rely that all players all already - * activated. Actually the network will activate a player AFTER - * the loadgame only. This is not true anymore. But be careful - * anyway. - * - * @param stream a data stream where you can stream the game from - * @param network is it a network call -> make players virtual - * @param reset shall the game be reset before loading - * - * @return true? - */ - virtual bool loadgame(TQDataStream &stream, bool network, bool reset); - - /** - * Save a game, to file OR network. Internal. - * - * @param stream a data stream where you can stream the game from - * @param network is it a call from the network or from a file (unused but informative) - * @param saveplayers shall the players be saved too (should be TRUE) - * - * @return true? - */ - virtual bool savegame(TQDataStream &stream, bool network,bool saveplayers); - -private: - //AB: this is to hide the "receiver" parameter from the user. It shouldn't be - //used if possible (except for init). - /** - * This is an overloaded function. Id differs from the public one only in - * its parameters: - * - * @param receiver The Client that will receive the message. You will hardly - * ever need this. It it internally used to initialize a newly connected - * client. - **/ - //void addPlayer(KPlayer* newplayer, TQ_UINT32 receiver); - - /** - * Just the same as the public one except receiver: - * @param receiver 0 for broadcast, otherwise the receiver. Should only be - * used in special circumstances and not outside KGame. - **/ - bool removePlayer(KPlayer * player, TQ_UINT32 receiver); - - /** - * Helping function - game negotiation - **/ - void setupGame(TQ_UINT32 sender); - - /** - * Helping function - game negotiation - **/ - void setupGameContinue(TQDataStream& msg, TQ_UINT32 sender); - - /** - * Removes a player from all lists, removes the @ref KGame pointer from the - * @ref KPlayer and deletes the player. Used by (e.g.) @ref - * systemRemovePlayer - * @return True if the player has been removed, false if the current is not - * found - **/ - bool systemRemove(KPlayer* player,bool deleteit); - - -private: - KGamePrivate* d; -}; - -#endif |