From: Christian S. <blu...@us...> - 2005-05-27 14:12:37
|
Update of /cvsroot/planeshift/planeshift/src/client In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30294/src/client Modified Files: modehandler.cpp modehandler.h Log Message: - Removed some bits of the callback code to make it compileable in GCC (and hopefully better) Index: modehandler.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/modehandler.cpp,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -d -r1.119 -r1.120 *** modehandler.cpp 23 May 2005 18:26:33 -0000 1.119 --- modehandler.cpp 27 May 2005 14:12:28 -0000 1.120 *************** *** 76,99 **** - /// Header for csMissingSectorCallback - class csMissingSectorCallback : public iPortalCallback - { - public: - csRef<iLoaderContext> ldr_context; - char* sectorname; - bool autoresolve; - - SCF_DECLARE_IBASE; - csMissingSectorCallback (iLoaderContext*, const char*, bool); - virtual ~csMissingSectorCallback (); - virtual bool Traverse (iPortal* , iBase*); - }; - /// Callback class for the portal traversing ! psPortalCallback::psPortalCallback(iLoaderContext* loader, const char* sector) { SCF_CONSTRUCT_IBASE (0); - loaderContext = loader; - this->sector = sector; } --- 76,83 ---- /// Callback class for the portal traversing ! psPortalCallback::psPortalCallback() { SCF_CONSTRUCT_IBASE (0); } *************** *** 105,117 **** bool psPortalCallback::Traverse(iPortal* portal,iBase* base) { - // Get the sector - iSector* sect = loaderContext->FindSector (sector); - if (!sect) return false; - - // Set the new sector - portal->SetSector (sect); - // Refresh the weather psengine->GetModeHandler()->CreatePortalWeather(portal); return true; } --- 89,98 ---- bool psPortalCallback::Traverse(iPortal* portal,iBase* base) { // Refresh the weather psengine->GetModeHandler()->CreatePortalWeather(portal); + + // Remove us from the list, we have created it now + portal->RemovePortalCallback(this); + return true; } *************** *** 417,442 **** if(!sect) // No sector yet assigned? Subscribe to visibility event { ! psPortalCallback* psCall; ! csMissingSectorCallback* csCall; // Check if we already have this subscribed to our class ! psCall = dynamic_cast<psPortalCallback*>(portal->GetMissingSectorCallback(0)); ! ! if(!psCall) // Not a psPortalCallback class, assume it's a csMissingSectorCallback { ! // Get the old callback ! csCall = dynamic_cast<csMissingSectorCallback*>(portal->GetMissingSectorCallback(0)); ! if(!csCall) { ! Error2("Portal '%s' has unknown Missing sector callback",portal->GetName()); ! return false; } ! // Set the new callback ! psCall = new psPortalCallback( csCall->ldr_context, (const char*)csCall->sectorname); ! portal->SetMissingSectorCallback(psCall); psCall->DecRef(); - - // Remove the old callback - portal->RemoveMissingSectorCallback(csCall); return true; } --- 398,421 ---- if(!sect) // No sector yet assigned? Subscribe to visibility event { ! // Check if we already have this subscribed to our class ! bool subbed = false; ! for(int i = 0; i < portal->GetPortalCallbackCount();i++) { ! // Test if this is a psPortalCallback object ! psPortalCallback* psCall = dynamic_cast<psPortalCallback*>(portal->GetPortalCallback(i)); ! if(psCall) // Found! { ! subbed = true; ! break; } ! } ! ! if(!subbed) // Not a psPortalCallback class, subscribe ! { // Set the new callback ! psPortalCallback* psCall = new psPortalCallback(); ! portal->SetPortalCallback(psCall); psCall->DecRef(); return true; } Index: modehandler.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/client/modehandler.h,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** modehandler.h 23 May 2005 18:26:34 -0000 1.37 --- modehandler.h 27 May 2005 14:12:28 -0000 1.38 *************** *** 62,66 **** SCF_DECLARE_IBASE; ! psPortalCallback(iLoaderContext* loader, const char* sector); virtual ~psPortalCallback(); --- 62,66 ---- SCF_DECLARE_IBASE; ! psPortalCallback(); virtual ~psPortalCallback(); |