summaryrefslogtreecommitdiffstats
path: root/libkdegames/kgame/kplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdegames/kgame/kplayer.cpp')
-rw-r--r--libkdegames/kgame/kplayer.cpp446
1 files changed, 0 insertions, 446 deletions
diff --git a/libkdegames/kgame/kplayer.cpp b/libkdegames/kgame/kplayer.cpp
deleted file mode 100644
index 965f5e83..00000000
--- a/libkdegames/kgame/kplayer.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni ([email protected])
- Copyright (C) 2001 Andreas Beckermann ([email protected])
-
- 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$
-*/
-
-
-#include "kgame.h"
-#include "kgameio.h"
-#include "kplayer.h"
-#include "kgamemessage.h"
-#include "kgamepropertyhandler.h"
-
-#include <kdebug.h>
-#include <klocale.h>
-
-#include <tqbuffer.h>
-
-#include <stdio.h>
-#include <assert.h>
-
-#define KPLAYER_LOAD_COOKIE 7285
-
-class KPlayerPrivate
-{
-public:
- KPlayerPrivate()
- {
- mNetworkPlayer = 0;
- }
-
- TQ_UINT32 mId;
- bool mVirtual; // virtual player
- int mPriority; // tag for replacement
-
- KPlayer* mNetworkPlayer; // replacement player
-
- KGamePropertyHandler mProperties;
-
-// Playerdata
- KGamePropertyTQString mName;
- KGamePropertyTQString mGroup;
-};
-
-KPlayer::KPlayer() : TQObject(0,0)
-{
- init();
-}
-
-KPlayer::KPlayer(KGame* game) : TQObject(0, 0)
-{
- init();
- game->addPlayer(this);
-}
-
-void KPlayer::init()
-{
-// note that NO KGame object exists here! so we cannot use KGameProperty::send!
- kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)="<<sizeof(KPlayer) << endl;
- kdDebug(11001) << "sizeof(m_Group)="<<sizeof(d->mGroup)<<endl;
- d = new KPlayerPrivate;
-
- d->mProperties.registerHandler(KGameMessage::IdPlayerProperty,
- this,TQT_SLOT(sendProperty(int, TQDataStream&, bool*)),
- TQT_SLOT(emitSignal(KGamePropertyBase *)));
- d->mVirtual=false;
- mActive=true;
- mGame=0;
- d->mId=0; // "0" is always an invalid ID!
- d->mPriority=0;
- // I guess we cannot translate the group otherwise no
- // international conenctions are possible
-
- mUserId.registerData(KGamePropertyBase::IdUserId, this, i18n("UserId"));
- mUserId.setLocal(0);
- d->mGroup.registerData(KGamePropertyBase::IdGroup, this, i18n("Group"));
- d->mGroup.setLocal(i18n("default"));
- d->mName.registerData(KGamePropertyBase::IdName, this, i18n("Name"));
- d->mName.setLocal(i18n("default"));
-
- mAsyncInput.registerData(KGamePropertyBase::IdAsyncInput, this, i18n("AsyncInput"));
- mAsyncInput.setLocal(false);
- mMyTurn.registerData(KGamePropertyBase::IdTurn, this, i18n("myTurn"));
- mMyTurn.setLocal(false);
- mMyTurn.setEmittingSignal(true);
- mMyTurn.setOptimized(false);
-}
-
-KPlayer::~KPlayer()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this <<", id=" << this->id() << endl;
-
- // Delete IODevices
- KGameIO *input;
- while((input=mInputList.first()))
- {
- delete input;
- }
- if (game())
- {
- game()->playerDeleted(this);
- }
-
-// note: mProperties does not use autoDelete or so - user must delete objects
-// himself
- d->mProperties.clear();
- delete d;
-// kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-bool KPlayer::forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver,TQ_UINT32 sender)
-{
- if (!isActive())
- {
- return false;
- }
- if (!game())
- {
- return false;
- }
- kdDebug(11001) << k_funcinfo << ": to game sender="<<sender<<"" << "recv="<<receiver <<"msgid="<<msgid << endl;
- return game()->sendSystemMessage(msg,msgid,receiver,sender);
-}
-
-bool KPlayer::forwardInput(TQDataStream &msg,bool transmit,TQ_UINT32 sender)
-{
- if (!isActive())
- {
- return false;
- }
- if (!game())
- {
- return false;
- }
-
- kdDebug(11001) << k_funcinfo << ": to game playerInput(sender="<<sender<<")" << endl;
- if (!asyncInput() && !myTurn())
- {
- kdDebug(11001) << k_funcinfo << ": rejected cause it is not our turn" << endl;
- return false;
- }
-
- // AB: I hope I remember the usage correctly:
- // this function is called twice (on sender side) - once with transmit = true
- // where it sends the input to the comserver and once with transmit = false
- // where it really looks at the input
- if (transmit)
- {
- kdDebug(11001) << "indirect playerInput" << endl;
- return game()->sendPlayerInput(msg,this,sender);
- }
- else
- {
- kdDebug(11001) << "direct playerInput" << endl;
- return game()->systemPlayerInput(msg,this,sender);
- }
-}
-
-void KPlayer::setId(TQ_UINT32 newid)
-{
- // Needs to be after the sendProcess
- d->mId=newid;
-}
-
-
-void KPlayer::setGroup(const TQString& group)
-{ d->mGroup = group; }
-
-const TQString& KPlayer::group() const
-{ return d->mGroup.value(); }
-
-void KPlayer::setName(const TQString& name)
-{ d->mName = name; }
-
-const TQString& KPlayer::name() const
-{ return d->mName.value(); }
-
-TQ_UINT32 KPlayer::id() const
-{ return d->mId; }
-
-KGamePropertyHandler * KPlayer::dataHandler()
-{ return &d->mProperties; }
-
-void KPlayer::setVirtual(bool v)
-{ d->mVirtual = v; }
-
-bool KPlayer::isVirtual() const
-{ return d->mVirtual;}
-
-void KPlayer::setNetworkPlayer(KPlayer* p)
-{ d->mNetworkPlayer = p; }
-
-KPlayer* KPlayer::networkPlayer() const
-{ return d->mNetworkPlayer; }
-
-int KPlayer::networkPriority() const
-{ return d->mPriority; }
-
-void KPlayer::setNetworkPriority(int p)
-{ d->mPriority = p; }
-
-bool KPlayer::addGameIO(KGameIO *input)
-{
- if (!input)
- {
- return false;
- }
- mInputList.append(input);
- input->initIO(this); // set player and init device
- return true;
-}
-
-// input=0, remove all
-bool KPlayer::removeGameIO(KGameIO *targetinput,bool deleteit)
-{
- kdDebug(11001) << k_funcinfo << ": " << targetinput << " delete=" << deleteit<< endl;
- bool result=true;
- if (!targetinput) // delete all
- {
- KGameIO *input;
- while((input=mInputList.first()))
- {
- if (input) removeGameIO(input,deleteit);
- }
- }
- else
- {
-// kdDebug(11001) << "remove IO " << targetinput << endl;
- if (deleteit)
- {
- delete targetinput;
- }
- else
- {
- targetinput->setPlayer(0);
- result=mInputList.remove(targetinput);
- }
- }
- return result;
-}
-
-KGameIO * KPlayer::findRttiIO(int rtti) const
-{
- TQPtrListIterator<KGameIO> it(mInputList);
- while (it.current())
- {
- if (it.current()->rtti() == rtti)
- {
- return it.current();
- }
- ++it;
- }
- return 0;
-}
-
-int KPlayer::calcIOValue()
-{
- int value=0;
- TQPtrListIterator<KGameIO> it(mInputList);
- while (it.current())
- {
- value|=it.current()->rtti();
- ++it;
- }
- return value;
-}
-
-bool KPlayer::setTurn(bool b, bool exclusive)
-{
- kdDebug(11001) << k_funcinfo << ": " << id() << " (" << this << ") to " << b << endl;
- if (!isActive())
- {
- return false;
- }
-
- // if we get to do an exclusive turn all other players are disallowed
- if (exclusive && b && game())
- {
- KPlayer *player;
- KGame::KGamePlayerList *list=game()->playerList();
- for ( player=list->first(); player != 0; player=list->next() )
- {
- if (player==this)
- {
- continue;
- }
- player->setTurn(false,false);
- }
- }
-
- // Return if nothing changed
- mMyTurn = b;
-
- return true;
-}
-
-bool KPlayer::load(TQDataStream &stream)
-{
- TQ_INT32 id,priority;
- stream >> id >> priority;
- setId(id);
- setNetworkPriority(priority);
-
- // Load Player Data
- //FIXME: maybe set all properties setEmitSignal(false) before?
- d->mProperties.load(stream);
-
- TQ_INT16 cookie;
- stream >> cookie;
- if (cookie==KPLAYER_LOAD_COOKIE)
- {
- kdDebug(11001) << " Player loaded propertly"<<endl;
- }
- else
- {
- kdError(11001) << " Player loading error. probably format error"<<endl;
- }
-
- // emit signalLoad(stream);
- return true;
-}
-
-bool KPlayer::save(TQDataStream &stream)
-{
- stream << (TQ_INT32)id() << (TQ_INT32)networkPriority();
-
- d->mProperties.save(stream);
-
- stream << (TQ_INT16)KPLAYER_LOAD_COOKIE;
-
- //emit signalSave(stream);
- return true;
-}
-
-
-void KPlayer::networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender)
-{
- //kdDebug(11001) << k_funcinfo ": msgid=" << msgid << " sender=" << sender << " we are=" << id() << endl;
- // PlayerProperties processed
- bool issender;
- if (game())
- {
- issender=sender==game()->gameId();
- }
- else
- {
- issender=true;
- }
- if (d->mProperties.processMessage(stream,msgid,issender))
- {
- return ;
- }
- switch(msgid)
- {
- case KGameMessage::IdPlayerInput:
- {
- kdDebug(11001) << k_funcinfo << ": Got player move "
- << "KPlayer (virtual) forwards it to the game object" << endl;
- forwardInput(stream,false);
- }
- break;
- default:
- emit signalNetworkData(msgid - KGameMessage::IdUser,
- ((TQBuffer*)stream.device())->readAll(),sender,this);
- kdDebug(11001) << k_funcinfo << ": "
- << "User data msgid " << msgid << endl;
- break;
- }
-
-}
-
-KGamePropertyBase* KPlayer::findProperty(int id) const
-{
- return d->mProperties.find(id);
-}
-
-bool KPlayer::addProperty(KGamePropertyBase* data)
-{
- return d->mProperties.addProperty(data);
-}
-
-void KPlayer::sendProperty(int msgid, TQDataStream& stream, bool* sent)
-{
- if (game())
- {
- bool s = game()->sendPlayerProperty(msgid, stream, id());
- if (s)
- {
- *sent = true;
- }
- }
-}
-
-void KPlayer::emitSignal(KGamePropertyBase *me)
-{
- // Notify KGameIO (Process) for a new turn
- if (me->id()==KGamePropertyBase::IdTurn)
- {
- //kdDebug(11001) << k_funcinfo << ": for KGamePropertyBase::IdTurn " << endl;
- TQPtrListIterator<KGameIO> it(mInputList);
- while (it.current())
- {
- it.current()->notifyTurn(mMyTurn.value());
- ++it;
- }
- }
- emit signalPropertyChanged(me,this);
-}
-
-// --------------------- DEBUG --------------------
-void KPlayer::Debug()
-{
- kdDebug(11001) << "------------------- KPLAYER -----------------------" << endl;
- kdDebug(11001) << "this: " << this << endl;
- kdDebug(11001) << "rtti: " << rtti() << endl;
- kdDebug(11001) << "id : " << id() << endl;
- kdDebug(11001) << "Name : " << name() << endl;
- kdDebug(11001) << "Group: " << group() << endl;
- kdDebug(11001) << "Async: " << asyncInput() << endl;
- kdDebug(11001) << "myTurn: " << myTurn() << endl;
- kdDebug(11001) << "Virtual: " << isVirtual() << endl;
- kdDebug(11001) << "Active: " << isActive() << endl;
- kdDebug(11001) << "Priority:" << networkPriority() << endl;
- kdDebug(11001) << "Game : " << game() << endl;
- kdDebug(11001) << "#IOs: " << mInputList.count() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-#include "kplayer.moc"