00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef __KGAME_H_
00024
#define __KGAME_H_
00025
00026
#include <qstring.h>
00027
#include <qptrlist.h>
00028
#include <qvaluelist.h>
00029
00030
#include "kgamenetwork.h"
00031
00032
class KRandomSequence;
00033
00034
class KPlayer;
00035
class KGamePropertyBase;
00036
class KGamePropertyHandler;
00037
class KGameSequence;
00038
00039
class KGamePrivate;
00040
00062 class KGame :
public KGameNetwork
00063 {
00064 Q_OBJECT
00065
00066
public:
00067
typedef QPtrList<KPlayer> KGamePlayerList;
00068
00090 enum GamePolicy
00091 {
00092 PolicyUndefined = 0,
00093 PolicyClean = 1,
00094 PolicyDirty = 2,
00095 PolicyLocal = 3
00096 };
00097
00103
KGame(
int cookie=42,
QObject* parent=0);
00104
00108
virtual ~KGame();
00109
00113
virtual void Debug();
00114
00120 enum GameStatus
00121 {
00122 Init = 0,
00123 Run = 1,
00124 Pause = 2,
00125 End = 3,
00126 Abort = 4,
00127 SystemPause = 5,
00128 Intro = 6,
00129 UserStatus = 7
00130 };
00131
00132
00138 KGamePlayerList *
playerList();
00139
00143
const KGamePlayerList *
playerList() const;
00144
00149 KGamePlayerList *inactivePlayerList();
00150
00154 const KGamePlayerList *inactivePlayerList() const;
00155
00161 KRandomSequence *random() const;
00162
00167
KGameSequence *gameSequence() const;
00168
00173
bool isRunning() const;
00174
00175
00181
KPlayer *findPlayer(Q_UINT32
id) const;
00182
00192
void setGameSequence(
KGameSequence* sequence);
00193
00211
void addPlayer(
KPlayer* newplayer);
00212
00219
00220
00221
00222 bool removePlayer(
KPlayer * player) {
return removePlayer(player, 0); }
00223
00228
void playerDeleted(
KPlayer * player);
00229
00233
bool activatePlayer(
KPlayer *player);
00234
00238
bool inactivatePlayer(
KPlayer *player);
00239
00246
void setMaxPlayers(uint maxnumber);
00247
00252
int maxPlayers() const;
00253
00260
void setMinPlayers(uint minnumber);
00261
00266 uint minPlayers() const;
00267
00272 uint playerCount() const;
00273
00278 virtual
KPlayer * nextPlayer(
KPlayer *last,
bool exclusive=true);
00279
00280
00285 virtual
bool sendPlayerInput(
QDataStream &msg,
KPlayer *player,Q_UINT32 sender=0);
00286
00297 virtual
bool systemPlayerInput(
QDataStream &msg,
KPlayer *player,Q_UINT32 sender=0);
00298
00325 virtual
KPlayer *createPlayer(
int rtti,
int io,
bool isvirtual);
00326
00327
00340 virtual
bool load(
QDataStream &stream,
bool reset=true);
00341
00350 virtual
bool load(
QString filename,
bool reset=true);
00351
00361 virtual
bool save(
QDataStream &stream,
bool saveplayers=true);
00362
00371 virtual
bool save(
QString filename,
bool saveplayers=true);
00372
00380 virtual
bool reset();
00381
00382
00383
00389
int gameStatus() const;
00390
00396
void setGameStatus(
int status);
00397
00401
bool addProperty(
KGamePropertyBase* data);
00402
00406
bool sendPlayerProperty(
int msgid,
QDataStream& s, Q_UINT32 playerId);
00407
00412
KGamePropertyBase* findProperty(
int id) const;
00413
00420
void setPolicy(GamePolicy p,
bool recursive=true);
00421
00425 GamePolicy policy() const;
00426
00438
bool sendGroupMessage(const
QByteArray& msg,
int msgid, Q_UINT32 sender, const
QString& group);
00439
bool sendGroupMessage(const
QDataStream &msg,
int msgid, Q_UINT32 sender, const
QString& group);
00440
bool sendGroupMessage(
int msg,
int msgid, Q_UINT32 sender, const
QString& group);
00441
bool sendGroupMessage(const
QString& msg,
int msgid, Q_UINT32 sender, const
QString& group);
00442
00461 virtual
void networkTransmission(
QDataStream &stream,
int msgid, Q_UINT32 receiver, Q_UINT32 sender, Q_UINT32 clientID);
00462
00466
KGamePropertyHandler* dataHandler() const;
00467
00468 protected slots:
00472
void sendProperty(
int msgid,
QDataStream& stream,
bool* sent);
00473
00477
void emitSignal(
KGamePropertyBase *me);
00478
00483 virtual
void prepareNext();
00484
00485
00490
void slotClientConnected(Q_UINT32 clientId);
00491
00499
void slotClientDisconnected(Q_UINT32 clientId,
bool broken);
00500
00506
void slotServerDisconnected();
00507
00508 signals:
00526
void signalReplacePlayerIO(
KPlayer* player,
bool* remove);
00527
00542
void signalLoadPrePlayers(
QDataStream &stream);
00543
00551
void signalLoad(
QDataStream &stream);
00552
00566
void signalSavePrePlayers(
QDataStream &stream);
00567
00575
void signalSave(
QDataStream &stream);
00576
00588
void signalLoadError(
QDataStream &stream,
bool network,
int cookie,
bool &result);
00589
00596
void signalNetworkData(
int msgid,const
QByteArray& buffer, Q_UINT32 receiver, Q_UINT32 sender);
00597
00603
void signalMessageUpdate(
int msgid,Q_UINT32 receiver,Q_UINT32 sender);
00604
00615
void signalPlayerLeftGame(
KPlayer *player);
00616
00622
void signalPlayerJoinedGame(
KPlayer *player);
00623
00624
00629
void signalPropertyChanged(
KGamePropertyBase *property,
KGame *me);
00630
00639
void signalGameOver(
int status,
KPlayer *current,
KGame *me);
00640
00652
void signalClientJoinedGame(Q_UINT32 clientid,
KGame *me);
00653
00671
void signalClientLeftGame(
int clientID,
int oldgamestatus,
KGame *me);
00672
00673
00674 protected:
00703 virtual
bool playerInput(
QDataStream &msg,
KPlayer *player)=0;
00704
00705
00717
KPlayer *playerInputFinished(
KPlayer *player);
00718
00719
00753 virtual
void newPlayersJoin(
KGamePlayerList *oldplayer,
00754
KGamePlayerList *newplayer,
00755
QValueList<
int> &inactivate) {};
00756
00765
void savePlayers(
QDataStream &stream,KGamePlayerList *list=0);
00766
00777
void savePlayer(
QDataStream& stream,
KPlayer* player);
00778
00787
KPlayer *loadPlayer(
QDataStream& stream,
bool isvirtual=
false);
00788
00789
00793
bool systemInactivatePlayer(
KPlayer *player);
00794
00798
bool systemActivatePlayer(
KPlayer *player);
00799
00817
void systemAddPlayer(
KPlayer* newplayer);
00818
00826
void systemRemovePlayer(
KPlayer* player,
bool deleteit);
00827
00838
virtual void negotiateNetworkGame(Q_UINT32 clientID);
00839
00844
void syncRandom();
00845
00846
void deletePlayers();
00847
void deleteInactivePlayers();
00848
00856
virtual int checkGameOver(
KPlayer *player);
00857
00871
virtual bool loadgame(
QDataStream &stream,
bool network,
bool reset);
00872
00882
virtual bool savegame(
QDataStream &stream,
bool network,
bool saveplayers);
00883
00884
private:
00885
00886
00895
00896
00902
bool removePlayer(
KPlayer * player, Q_UINT32 receiver);
00903
00907
void setupGame(Q_UINT32 sender);
00908
00912
void setupGameContinue(
QDataStream& msg, Q_UINT32 sender);
00913
00921
bool systemRemove(
KPlayer* player,
bool deleteit);
00922
00923
00924
private:
00925 KGamePrivate* d;
00926 };
00927
00928
#endif