• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • libtdegames
 

libtdegames

  • libtdegames
  • kgame
kgame.h
1 /*
2  This file is part of the TDE games library
3  Copyright (C) 2001 Martin Heni (martin@heni-online.de)
4  Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Library General Public
8  License version 2 as published by the Free Software Foundation.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 /*
21  $Id$
22 */
23 #ifndef __KGAME_H_
24 #define __KGAME_H_
25 
26 #include <tqstring.h>
27 #include <tqptrlist.h>
28 #include <tqvaluelist.h>
29 
30 #include "kgamenetwork.h"
31 #include <tdemacros.h>
32 class KRandomSequence;
33 
34 class KPlayer;
35 class KGamePropertyBase;
36 class KGamePropertyHandler;
37 class KGameSequence;
38 
39 class KGamePrivate;
40 
62 class TDE_EXPORT KGame : public KGameNetwork
63 {
64  TQ_OBJECT
65 
66 
67 public:
68  typedef TQPtrList<KPlayer> KGamePlayerList;
69 
91  enum GamePolicy
92  {
93  PolicyUndefined = 0,
94  PolicyClean = 1,
95  PolicyDirty = 2,
96  PolicyLocal = 3
97  };
98 
104  KGame(int cookie=42,TQObject* parent=0);
105 
109  virtual ~KGame();
110 
114  virtual void Debug();
115 
121  enum GameStatus
122  {
123  Init = 0,
124  Run = 1,
125  Pause = 2,
126  End = 3,
127  Abort = 4,
128  SystemPause = 5,
129  Intro = 6,
130  UserStatus = 7
131  };
132 
133  // Properties
139  KGamePlayerList *playerList();
140 
144  const KGamePlayerList *playerList() const;
145 
150  KGamePlayerList *inactivePlayerList();
151 
155  const KGamePlayerList *inactivePlayerList() const;
156 
162  KRandomSequence *random() const;
163 
168  KGameSequence *gameSequence() const;
169 
174  bool isRunning() const;
175 
176  // Player handling
182  KPlayer *findPlayer(TQ_UINT32 id) const;
183 
193  void setGameSequence(KGameSequence* sequence);
194 
212  void addPlayer(KPlayer* newplayer);
213 
220  //AB: TODO: make sendMessage to return if the message will be able to be
221  //sent, eg if a socket is connected, etc. If sendMessage returns false
222  //remove the player directly using systemRemovePlayer
223  bool removePlayer(KPlayer * player) { return removePlayer(player, 0); }
224 
229  void playerDeleted(KPlayer * player);
230 
234  bool activatePlayer(KPlayer *player);
235 
239  bool inactivatePlayer(KPlayer *player);
240 
247  void setMaxPlayers(uint maxnumber);
248 
253  int maxPlayers() const;
254 
261  void setMinPlayers(uint minnumber);
262 
267  uint minPlayers() const;
268 
273  uint playerCount() const;
274 
279  virtual KPlayer * nextPlayer(KPlayer *last,bool exclusive=true);
280 
281  // Input events
286  virtual bool sendPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
287 
298  virtual bool systemPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
299 
326  virtual KPlayer *createPlayer(int rtti,int io,bool isvirtual);
327 
328  // load/save
341  virtual bool load(TQDataStream &stream,bool reset=true);
342 
351  virtual bool load(TQString filename,bool reset=true);
352 
362  virtual bool save(TQDataStream &stream,bool saveplayers=true);
363 
372  virtual bool save(TQString filename,bool saveplayers=true);
373 
381  virtual bool reset();
382 
383 
384  // Game sequence
390  int gameStatus() const;
391 
397  void setGameStatus(int status);
398 
402  bool addProperty(KGamePropertyBase* data);
403 
407  bool sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId);
408 
413  KGamePropertyBase* findProperty(int id) const;
414 
421  void setPolicy(GamePolicy p,bool recursive=true);
422 
426  GamePolicy policy() const;
427 
439  bool sendGroupMessage(const TQByteArray& msg, int msgid, TQ_UINT32 sender, const TQString& group);
440  bool sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group);
441  bool sendGroupMessage(int msg, int msgid, TQ_UINT32 sender, const TQString& group);
442  bool sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group);
443 
462  virtual void networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 clientID);
463 
467  KGamePropertyHandler* dataHandler() const;
468 
469 protected slots:
473  void sendProperty(int msgid, TQDataStream& stream, bool* sent);
474 
478  void emitSignal(KGamePropertyBase *me);
479 
484  virtual void prepareNext();
485 
486 
491  void slotClientConnected(TQ_UINT32 clientId);
492 
500  void slotClientDisconnected(TQ_UINT32 clientId,bool broken);
501 
507  void slotServerDisconnected();
508 
509 signals:
527  void signalReplacePlayerIO(KPlayer* player, bool* remove);
528 
543  void signalLoadPrePlayers(TQDataStream &stream);
544 
552  void signalLoad(TQDataStream &stream);
553 
567  void signalSavePrePlayers(TQDataStream &stream);
568 
576  void signalSave(TQDataStream &stream);
577 
589  void signalLoadError(TQDataStream &stream,bool network,int cookie, bool &result);
590 
597  void signalNetworkData(int msgid,const TQByteArray& buffer, TQ_UINT32 receiver, TQ_UINT32 sender);
598 
604  void signalMessageUpdate(int msgid,TQ_UINT32 receiver,TQ_UINT32 sender);
605 
616  void signalPlayerLeftGame(KPlayer *player);
617 
623  void signalPlayerJoinedGame(KPlayer *player);
624 
625 
630  void signalPropertyChanged(KGamePropertyBase *property, KGame *me);
631 
640  void signalGameOver(int status, KPlayer *current, KGame *me);
641 
653  void signalClientJoinedGame(TQ_UINT32 clientid,KGame *me);
654 
672  void signalClientLeftGame(int clientID,int oldgamestatus,KGame *me);
673 
674 
675 protected:
704  virtual bool playerInput(TQDataStream &msg,KPlayer *player)=0;
705 
706 
718  KPlayer *playerInputFinished(KPlayer *player);
719 
720 
754  virtual void newPlayersJoin(KGamePlayerList *oldplayer,
755  KGamePlayerList *newplayer,
756  TQValueList<int> &inactivate) {
757  Q_UNUSED( oldplayer );
758  Q_UNUSED( newplayer );
759  Q_UNUSED( inactivate );
760  }
761 
770  void savePlayers(TQDataStream &stream,KGamePlayerList *list=0);
771 
782  void savePlayer(TQDataStream& stream,KPlayer* player);
783 
792  KPlayer *loadPlayer(TQDataStream& stream,bool isvirtual=false);
793 
794 
798  bool systemInactivatePlayer(KPlayer *player);
799 
803  bool systemActivatePlayer(KPlayer *player);
804 
822  void systemAddPlayer(KPlayer* newplayer);
823 
831  void systemRemovePlayer(KPlayer* player,bool deleteit);
832 
843  virtual void negotiateNetworkGame(TQ_UINT32 clientID);
844 
849  void syncRandom();
850 
851  void deletePlayers();
852  void deleteInactivePlayers();
853 
861  virtual int checkGameOver(KPlayer *player);
862 
876  virtual bool loadgame(TQDataStream &stream, bool network, bool reset);
877 
887  virtual bool savegame(TQDataStream &stream, bool network,bool saveplayers);
888 
889 private:
890  //AB: this is to hide the "receiver" parameter from the user. It shouldn't be
891  //used if possible (except for init).
900  //void addPlayer(KPlayer* newplayer, TQ_UINT32 receiver);
901 
907  bool removePlayer(KPlayer * player, TQ_UINT32 receiver);
908 
912  void setupGame(TQ_UINT32 sender);
913 
917  void setupGameContinue(TQDataStream& msg, TQ_UINT32 sender);
918 
926  bool systemRemove(KPlayer* player,bool deleteit);
927 
928 
929 private:
930  KGamePrivate* d;
931 };
932 
933 #endif
KGameNetwork
The KGameNetwork class is the KGame class with network support.
Definition: kgamenetwork.h:47
KGameNetwork::Debug
virtual void Debug()
Gives debug output of the game status.
Definition: kgamenetwork.cpp:505
KGameNetwork::networkTransmission
virtual void networkTransmission(TQDataStream &, int, TQ_UINT32, TQ_UINT32, TQ_UINT32 clientID)=0
Called by ReceiveNetworkTransmission().
KGamePropertyBase
Base class of KGameProperty.
Definition: kgameproperty.h:43
KGamePropertyHandler
A collection class for KGameProperty objects.
Definition: kgamepropertyhandler.h:73
KGameSequence
This class takes care of round or move management as well of the gameover condition.
Definition: kgamesequence.h:43
KGame
The main KDE game object.
Definition: kgame.h:63
KGame::signalSavePrePlayers
void signalSavePrePlayers(TQDataStream &stream)
The game will be saved to the given stream.
KGame::removePlayer
bool removePlayer(KPlayer *player)
Sends a message over the network, msgid=IdRemovePlayer.
Definition: kgame.h:223
KGame::newPlayersJoin
virtual void newPlayersJoin(KGamePlayerList *oldplayer, KGamePlayerList *newplayer, TQValueList< int > &inactivate)
This virtual function can be overwritten for your own player management.
Definition: kgame.h:754
KGame::signalPropertyChanged
void signalPropertyChanged(KGamePropertyBase *property, KGame *me)
This signal is emmited if a player property changes its value and the property is set to notify this ...
KGame::signalReplacePlayerIO
void signalReplacePlayerIO(KPlayer *player, bool *remove)
When a client disconnects from the game usually all players from that client are removed.
KGame::signalLoadError
void signalLoadError(TQDataStream &stream, bool network, int cookie, bool &result)
Is emmited if a game with a different version cookie is loaded.
KGame::signalMessageUpdate
void signalMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
We got an network message.
KGame::signalGameOver
void signalGameOver(int status, KPlayer *current, KGame *me)
Is emitted after a call to gameOver() returns a non zero return code.
KGame::signalPlayerJoinedGame
void signalPlayerJoinedGame(KPlayer *player)
a player joined the game
KGame::signalSave
void signalSave(TQDataStream &stream)
The game will be saved to the given stream.
KGame::signalLoadPrePlayers
void signalLoadPrePlayers(TQDataStream &stream)
The game will be loaded from the given stream.
KGame::playerInput
virtual bool playerInput(TQDataStream &msg, KPlayer *player)=0
A player input occurred.
KGame::signalNetworkData
void signalNetworkData(int msgid, const TQByteArray &buffer, TQ_UINT32 receiver, TQ_UINT32 sender)
We got an user defined update message.
KGame::GameStatus
GameStatus
Game status - Use this to Control the game flow.
Definition: kgame.h:122
KGame::GamePolicy
GamePolicy
The policy of the property.
Definition: kgame.h:92
KGame::signalPlayerLeftGame
void signalPlayerLeftGame(KPlayer *player)
a player left the game because of a broken connection or so!
KGame::signalLoad
void signalLoad(TQDataStream &stream)
The game will be loaded from the given stream.
KGame::signalClientLeftGame
void signalClientLeftGame(int clientID, int oldgamestatus, KGame *me)
This signal is emitted after a network partner left the game (either by a broken connection or volunt...
KGame::signalClientJoinedGame
void signalClientJoinedGame(TQ_UINT32 clientid, KGame *me)
Is emmited after a client is successfully connected to the game.
KPlayer
Base class for a game player.
Definition: kplayer.h:70

libtdegames

Skip menu "libtdegames"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

libtdegames

Skip menu "libtdegames"
  • libtdegames
Generated for libtdegames by doxygen 1.9.1
This website is maintained by Timothy Pearson.