From: <mg...@us...> - 2009-07-10 13:03:31
|
Revision: 3967 http://planeshift.svn.sourceforge.net/planeshift/?rev=3967&view=rev Author: mgist Date: 2009-07-10 13:03:29 +0000 (Fri, 10 Jul 2009) Log Message: ----------- - Added iSceneManipulate and its implementation. - Changed psSlotManager to use iSceneManipulate. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/iclient/ibgloader.h trunk/src/client/psengine.cpp trunk/src/client/psengine.h trunk/src/client/psslotmgr.cpp trunk/src/client/psslotmgr.h Added Paths: ----------- trunk/src/client/iclient/iscenemanipulate.h Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/bgloader/loader.cpp 2009-07-10 13:03:29 UTC (rev 3967) @@ -19,9 +19,11 @@ #include <cssysdef.h> #include <cstool/collider.h> +#include <cstool/enginetools.h> #include <cstool/vfsdirchange.h> #include <csutil/scanstr.h> #include <csutil/scfstringarray.h> +#include <iengine/camera.h> #include <iengine/movable.h> #include <iengine/portal.h> #include <imap/services.h> @@ -31,6 +33,7 @@ #include <iutil/object.h> #include <iutil/plugin.h> #include <ivaria/collider.h> +#include <ivideo/graph2d.h> #include <ivideo/material.h> #include "loader.h" @@ -42,7 +45,8 @@ SCF_IMPLEMENT_FACTORY(BgLoader) BgLoader::BgLoader(iBase *p) - : scfImplementationType (this, p), validPosition(false) + : scfImplementationType (this, p), validPosition(false), + resetHitbeam(true) { } @@ -55,12 +59,13 @@ this->object_reg = object_reg; engine = csQueryRegistry<iEngine> (object_reg); + g2d = csQueryRegistry<iGraphics2D> (object_reg); tloader = csQueryRegistry<iThreadedLoader> (object_reg); tman = csQueryRegistry<iThreadManager> (object_reg); vfs = csQueryRegistry<iVFS> (object_reg); svstrings = csQueryRegistryTagInterface<iShaderVarStringSet>(object_reg, "crystalspace.shader.variablenameset"); strings = csQueryRegistryTagInterface<iStringSet>(object_reg, "crystalspace.shared.stringset"); - cdsys = csQueryRegistry<iCollideSystem> (object_reg); + cdsys = csQueryRegistry<iCollideSystem> (object_reg); syntaxService = csQueryRegistryOrLoad<iSyntaxService>(object_reg, "crystalspace.syntax.loader.service.text"); @@ -1859,5 +1864,104 @@ return false; } +iMeshWrapper* BgLoader::CreateAndSelectMesh(const char* factName, iCamera* camera, const csVector2& pos) +{ + // Check that requested mesh is valid. + csRef<MeshFact> meshfact = meshfacts.Get(factName, csRef<MeshFact>()); + if(!meshfact.IsValid()) + return 0; + + // Get WS position. + csScreenTargetResult result = csEngineTools::FindScreenTarget(pos, 1000, camera); + + // If there's no hit then we can't create. + if(result.mesh == 0) + return 0; + + // Load meshfactory. + while(!LoadMeshFact(meshfact)); + csRef<iMeshFactoryWrapper> factory = scfQueryInterface<iMeshFactoryWrapper>(meshfact->status->GetResultRefPtr()); + + // Update stored position. + previousPosition = pos; + + // Create new mesh. + if(selectedMesh && resetHitbeam) + { + selectedMesh->GetFlags().Reset(CS_ENTITY_NOHITBEAM); + } + resetHitbeam = false; + selectedMesh = factory->CreateMeshWrapper(); + selectedMesh->GetFlags().Set(CS_ENTITY_NOHITBEAM); + selectedMesh->GetMovable()->SetPosition(camera->GetSector(), result.isect); + selectedMesh->GetMovable()->UpdateMove(); + + return selectedMesh; } + +iMeshWrapper* BgLoader::SelectMesh(iCamera* camera, const csVector2& pos) +{ + // Get WS position. + csScreenTargetResult result = csEngineTools::FindScreenTarget(pos, 1000, camera); + + if(selectedMesh && resetHitbeam) + { + selectedMesh->GetFlags().Reset(CS_ENTITY_NOHITBEAM); + } + selectedMesh = result.mesh; + resetHitbeam = !selectedMesh->GetFlags().Check(CS_ENTITY_NOHITBEAM); + selectedMesh->GetFlags().Set(CS_ENTITY_NOHITBEAM); + + // Update stored position. + previousPosition = pos; + + return selectedMesh; +} + +bool BgLoader::TranslateSelected(bool vertical, iCamera* camera, const csVector2& pos) +{ + if(selectedMesh.IsValid()) + { + if(vertical) + { + float d = 10 * float(pos.y - previousPosition.y) / g2d->GetWidth(); + csVector3 position = selectedMesh->GetMovable()->GetPosition(); + selectedMesh->GetMovable()->SetPosition(position + csVector3(0.0f, d, 0.0f)); + } + else + { + // Get WS position. + csScreenTargetResult result = csEngineTools::FindScreenTarget(pos, 1000, camera); + if(result.mesh) + { + selectedMesh->GetMovable()->SetPosition(result.isect); + return true; + } + } + } + + return false; +} + +void BgLoader::RotateSelected(const csVector2& pos) +{ + if(selectedMesh.IsValid()) + { + float d = 6 * PI * ((float)pos.x - previousPosition.x) / g2d->GetWidth(); + csYRotMatrix3 rotation(d); + + selectedMesh->GetMovable()->GetTransform().SetO2T(rotation); + } +} + +void BgLoader::RemoveSelected() +{ + if(selectedMesh.IsValid()) + { + selectedMesh->GetMovable()->SetSector(0); + selectedMesh.Invalidate(); + } +} + +} CS_PLUGIN_NAMESPACE_END(bgLoader) Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/bgloader/loader.h 2009-07-10 13:03:29 UTC (rev 3967) @@ -38,6 +38,7 @@ #include <iutil/vfs.h> #include <iclient/ibgloader.h> +#include <iclient/iscenemanipulate.h> struct iCollideSystem; struct iSyntaxService; @@ -45,8 +46,9 @@ CS_PLUGIN_NAMESPACE_BEGIN(bgLoader) { class BgLoader : public ThreadedCallable<BgLoader>, - public scfImplementation2<BgLoader, + public scfImplementation3<BgLoader, iBgLoader, + iSceneManipulate, iComponent> { public: @@ -147,6 +149,51 @@ */ csPtr<iStringArray> GetShaderName(const char* usageType) const; + /** + * Creates a new instance of the given factory at the given screen space coordinates. + * @param factName The name of the factory to be used to create the mesh. + * @param camera The camera related to the screen space coordinates. + * @param pos The screen space coordinates. + */ + iMeshWrapper* CreateAndSelectMesh(const char* factName, iCamera* camera, const csVector2& pos); + + /** + * Selects the closest mesh at the given screen space coordinates. + * @param camera The camera related to the screen space coordinates. + * @param pos The screen space coordinates. + */ + iMeshWrapper* SelectMesh(iCamera* camera, const csVector2& pos); + + /** + * Translates the mesh selected by CreateAndSelectMesh() or SelectMesh(). + * @param vertical True if you want to translate vertically (along y-axis). + * False to translate snapped to the mesh at the screen space coordinates. + * @param camera The camera related to the screen space coordinates. + * @param pos The screen space coordinates. + */ + bool TranslateSelected(bool vertical, iCamera* camera, const csVector2& pos); + + /** + * Rotates the mesh selected by CreateAndSelectMesh() or SelectMesh(). + * @param pos The screen space coordinates to use to base the rotation, relative to the last saved coordinates. + */ + void RotateSelected(const csVector2& pos); + + /** + * Removes the currently selected mesh from the scene. + */ + void RemoveSelected(); + + /** + * Saves the passed coordinates for use as a position reference. + * E.g. Do this after a translate and before a rotate,then the rotation + * will be based on the difference between these and the given rotation coordinates. + */ + void SaveCoordinates(const csVector2& pos) + { + previousPosition = pos; + } + private: class MeshGen; class MeshObj; @@ -441,6 +488,7 @@ // Pointers to other needed plugins. iObjectRegistry* object_reg; csRef<iEngine> engine; + csRef<iGraphics2D> g2d; csRef<iTextureManager> txtmgr; csRef<iThreadedLoader> tloader; csRef<iThreadManager> tman; @@ -489,6 +537,11 @@ CS::Threading::ReadWriteMutex mfLock; CS::Threading::ReadWriteMutex meshLock; CS::Threading::ReadWriteMutex sLock; + + // For world manipulation. + csRef<iMeshWrapper> selectedMesh; + csVector2 previousPosition; + bool resetHitbeam; }; } CS_PLUGIN_NAMESPACE_END(bgLoader) Modified: trunk/src/client/iclient/ibgloader.h =================================================================== --- trunk/src/client/iclient/ibgloader.h 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/iclient/ibgloader.h 2009-07-10 13:03:29 UTC (rev 3967) @@ -1,5 +1,5 @@ /* - * loader.h - Author: Mike Gist + * ibgloader.h - Author: Mike Gist * * Copyright (C) 2009 Atomic Blue (in...@pl..., http://www.atomicblue.org) * Added: trunk/src/client/iclient/iscenemanipulate.h =================================================================== --- trunk/src/client/iclient/iscenemanipulate.h (rev 0) +++ trunk/src/client/iclient/iscenemanipulate.h 2009-07-10 13:03:29 UTC (rev 3967) @@ -0,0 +1,72 @@ +/* + * iscenemanipulate.h - Author: Mike Gist + * + * Copyright (C) 2009 Atomic Blue (in...@pl..., http://www.atomicblue.org) + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation (version 2 of the License) + * This program 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 General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef __ISCENEMANIPULATE_H__ +#define __ISCENEMANIPULATE_H__ + +class csVector2; + +struct iSceneManipulate : public virtual iBase +{ + SCF_INTERFACE(iSceneManipulate, 1, 0, 0); + + /** + * Creates a new instance of the given factory at the given screen space coordinates. + * @param factName The name of the factory to be used to create the mesh. + * @param camera The camera related to the screen space coordinates. + * @param pos The screen space coordinates. + */ + virtual iMeshWrapper* CreateAndSelectMesh(const char* factName, iCamera* camera, const csVector2& pos) = 0; + + /** + * Selects the closest mesh at the given screen space coordinates. + * @param camera The camera related to the screen space coordinates. + * @param pos The screen space coordinates. + */ + virtual iMeshWrapper* SelectMesh(iCamera* camera, const csVector2& pos) = 0; + + /** + * Translates the mesh selected by CreateAndSelectMesh() or SelectMesh(). + * @param vertical True if you want to translate vertically (along y-axis). + * False to translate snapped to the mesh at the screen space coordinates. + * @param camera The camera related to the screen space coordinates. + * @param pos The screen space coordinates. + */ + virtual bool TranslateSelected(bool vertical, iCamera* camera, const csVector2& pos) = 0; + + /** + * Rotates the mesh selected by CreateAndSelectMesh() or SelectMesh(). + * @param pos The screen space coordinates to use to base the rotation, relative to the last saved coordinates. + */ + virtual void RotateSelected(const csVector2& pos) = 0; + + /** + * Removes the currently selected mesh from the scene. + */ + virtual void RemoveSelected() = 0; + + /** + * Saves the passed coordinates for use as a position reference. + * E.g. Do this after a translate and before a rotate,then the rotation + * will be based on the difference between these and the given rotation coordinates. + */ + virtual void SaveCoordinates(const csVector2& pos) = 0; +}; + +#endif // __ISCENEMANIPULATE_H__ Property changes on: trunk/src/client/iclient/iscenemanipulate.h ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/psengine.cpp 2009-07-10 13:03:29 UTC (rev 3967) @@ -120,6 +120,7 @@ #include "chatbubbles.h" #include "questionclient.h" #include "iclient/ibgloader.h" +#include "iclient/iscenemanipulate.h" ///////////////////////////////////////////////////////////////////////////// // PAWS Includes @@ -560,6 +561,7 @@ { threadedWorldLoading = psengine->GetConfig()->GetBool("PlaneShift.Loading.ThreadedWorldLoad"); loader = csQueryRegistry<iBgLoader>(object_reg); + scenemanipulator = scfQueryInterface<iSceneManipulate>(loader); csRef<iThreadManager> tm = csQueryRegistry<iThreadManager>(object_reg); loader->Setup(gfxFeatures, 200); Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/psengine.h 2009-07-10 13:03:29 UTC (rev 3967) @@ -47,6 +47,7 @@ struct iEventQueue; struct iMeshFactoryWrapper; struct iThreadedLoader; +struct iSceneManipulate; struct iSoundManager; struct iVFS; struct iVirtualClock; @@ -175,6 +176,7 @@ iSoundManager* GetSoundManager() { return soundmanager; } iConfigManager* GetConfig() { return cfgmgr; } ///< config file iBgLoader* GetLoader() { return loader; } + iSceneManipulate* GetSceneManipulator() { return scenemanipulator; } csRandomGen& GetRandomGen() { return random; } float GetRandom() { return random.Get(); } @@ -395,6 +397,7 @@ psInventoryCache* inventoryCache;///< inventory cache for client psCSSetup* CS_Setup; csRef<iBgLoader> loader; + csRef<iSceneManipulate> scenemanipulator; /* status, misc. vars */ bool gameLoaded; ///< determines if the game is loaded or not Modified: trunk/src/client/psslotmgr.cpp =================================================================== --- trunk/src/client/psslotmgr.cpp 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/psslotmgr.cpp 2009-07-10 13:03:29 UTC (rev 3967) @@ -28,7 +28,7 @@ #include "gui/pawsslot.h" #include "paws/pawsmainwidget.h" -#include "iclient/ibgloader.h" +#include "iclient/iscenemanipulate.h" #include "pscelclient.h" #include "psslotmgr.h" #include "pscamera.h" @@ -79,6 +79,7 @@ // Else begin rotate... isRotating = true; basePoint = PawsManager::GetSingleton().GetMouse()->GetPosition(); + psengine->GetSceneManipulator()->SaveCoordinates(csVector2(basePoint.x, basePoint.y)); return false; } @@ -95,9 +96,7 @@ PawsManager::GetSingleton().GetMainWidget()->FindWidget("InventoryWindow")->Show(); // Remove outline mesh. - outline->GetMovable()->SetSector(0); - outline->GetMovable()->UpdateMove(); - outline.Invalidate(); + psengine->GetSceneManipulator()->RemoveSelected(); isPlacing = false; } @@ -189,10 +188,13 @@ { // Get WS position. psPoint p = PawsManager::GetSingleton().GetMouse()->GetPosition(); - iMeshWrapper *mesh = psengine->GetPSCamera()->Get3DPointFrom2D(p.x, p.y, &pt3d); - // If mesh under mouse is valid (so the position is valid). - if(mesh) + // Create mesh. + outline = psengine->GetSceneManipulator()->CreateAndSelectMesh(draggingSlot.meshFactName, + psengine->GetPSCamera()->GetICamera()->GetCamera(), csVector2(p.x, p.y)); + + // If created mesh is valid. + if(outline) { // Hide the inventory so we can see where we're dropping. PawsManager::GetSingleton().GetMainWidget()->FindWidget("InventoryWindow")->Hide(); @@ -200,23 +202,6 @@ // Get rid of icon. PawsManager::GetSingleton().SetDragDropWidget( NULL ); - // Create item. - csRef<iMeshFactoryWrapper> meshfact; - while(!meshfact.IsValid()) - { - bool failed = false; - meshfact = psengine->GetLoader()->LoadFactory(draggingSlot.meshFactName, &failed); - if(failed) - { - Error2("Failed to load meshfact %s\n", draggingSlot.meshFactName.GetData()); - return; - } - } - - outline = meshfact->CreateMeshWrapper(); - outline->GetMovable()->SetPosition(psengine->GetCelClient()->GetMainPlayer()->GetSector(), pt3d); - outline->GetMovable()->UpdateMove(); - // Mark placing. isPlacing = true; } @@ -224,26 +209,20 @@ void psSlotManager::UpdateItem() { - // Get new WS position. + // Get new position. psPoint p = PawsManager::GetSingleton().GetMouse()->GetPosition(); // If we're rotating then we use mouse movement to determine rotation. if(isRotating) { - float d = 6 * PI * ((float)p.x - basePoint.x) / psengine->GetG2D()->GetWidth(); - csYRotMatrix3 rotation(d); - - outline->GetMovable()->GetTransform().SetO2T(rotation); + psengine->GetSceneManipulator()->RotateSelected(csVector2(p.x, p.y)); } else { - // Else we use it to determine item position. - iMeshWrapper *mesh = psengine->GetPSCamera()->Get3DPointFrom2D(p.x, p.y, &pt3d); - - outline->GetMovable()->SetPosition(pt3d); + // Else we use it to determine item position. + psengine->GetSceneManipulator()->TranslateSelected(false, + psengine->GetPSCamera()->GetICamera()->GetCamera(), csVector2(p.x, p.y)); } - - outline->GetMovable()->UpdateMove(); } void psSlotManager::DropItem() @@ -253,20 +232,20 @@ float yrot = 6 * PI * ((float)p.x - basePoint.x) / psengine->GetG2D()->GetWidth(); // Send drop message. + csVector3 pos = outline->GetMovable()->GetPosition(); psSlotMovementMsg msg( draggingSlot.containerID, draggingSlot.slotID, - CONTAINER_WORLD, 0, draggingSlot.stackCount, &pt3d, + CONTAINER_WORLD, 0, draggingSlot.stackCount, &pos, &yrot); msg.SendMessage(); // Remove outline mesh. - outline->GetMovable()->SetSector(0); - outline.Invalidate(); + psengine->GetSceneManipulator()->RemoveSelected(); // Show inventory window again. PawsManager::GetSingleton().GetMainWidget()->FindWidget("InventoryWindow")->Show(); // Reset flags. - isDragging = false; + isDragging = false; isPlacing = false; isRotating = false; } Modified: trunk/src/client/psslotmgr.h =================================================================== --- trunk/src/client/psslotmgr.h 2009-07-10 10:14:19 UTC (rev 3966) +++ trunk/src/client/psslotmgr.h 2009-07-10 13:03:29 UTC (rev 3967) @@ -48,7 +48,6 @@ bool isPlacing; bool isRotating; - csVector3 pt3d; psPoint basePoint; csArray<pawsSlot*> slotsInUse; @@ -64,7 +63,7 @@ void DropItem(); csString draggedMesh; - csRef<iMeshWrapper> outline; + iMeshWrapper* outline; public: psSlotManager(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-07-17 20:20:49
|
Revision: 4057 http://planeshift.svn.sourceforge.net/planeshift/?rev=4057&view=rev Author: kennygraunke Date: 2009-07-17 20:20:45 +0000 (Fri, 17 Jul 2009) Log Message: ----------- Cleaned up many cases of old style message sending. Modified Paths: -------------- trunk/src/client/chatbubbles.cpp trunk/src/client/chatbubbles.h trunk/src/client/cmdusers.cpp trunk/src/client/gui/inventorywindow.cpp trunk/src/client/gui/inventorywindow.h trunk/src/client/gui/pawsactivemagicwindow.cpp trunk/src/client/gui/pawsactivemagicwindow.h trunk/src/client/gui/pawsbankwindow.cpp trunk/src/client/gui/pawsbankwindow.h trunk/src/client/gui/pawsbookreadingwindow.cpp trunk/src/client/gui/pawsbookreadingwindow.h trunk/src/client/gui/pawscharcreatemain.cpp trunk/src/client/gui/pawscharcreatemain.h trunk/src/client/gui/pawscharpick.cpp trunk/src/client/gui/pawscharpick.h trunk/src/client/gui/pawscontainerdescwindow.cpp trunk/src/client/gui/pawscontainerdescwindow.h trunk/src/client/gui/pawscraft.cpp trunk/src/client/gui/pawscraft.h trunk/src/client/gui/pawsexchangewindow.cpp trunk/src/client/gui/pawsexchangewindow.h trunk/src/client/gui/pawsgameboard.cpp trunk/src/client/gui/pawsgameboard.h trunk/src/client/gui/pawsglyphwindow.cpp trunk/src/client/gui/pawsgroupwindow.cpp trunk/src/client/gui/pawsgroupwindow.h trunk/src/client/gui/pawsguildwindow.cpp trunk/src/client/gui/pawsguildwindow.h trunk/src/client/gui/pawsinfowindow.cpp trunk/src/client/gui/pawsinfowindow.h trunk/src/client/gui/pawsinteractwindow.cpp trunk/src/client/gui/pawsinteractwindow.h trunk/src/client/gui/pawsitemdescriptionwindow.cpp trunk/src/client/gui/pawsitemdescriptionwindow.h trunk/src/client/gui/pawsmerchantwindow.cpp trunk/src/client/gui/pawsmerchantwindow.h trunk/src/client/gui/pawspetstatwindow.cpp trunk/src/client/gui/pawspetstatwindow.h trunk/src/client/gui/pawsskillwindow.cpp trunk/src/client/gui/pawsskillwindow.h trunk/src/client/gui/pawsslot.cpp trunk/src/client/gui/pawssmallinventory.cpp trunk/src/client/gui/pawssmallinventory.h trunk/src/client/gui/pawsspellbookwindow.cpp trunk/src/client/gui/pawsspellbookwindow.h trunk/src/client/gui/pawsspellcancelwindow.cpp trunk/src/client/gui/pawstutorialwindow.cpp trunk/src/client/gui/pawstutorialwindow.h trunk/src/client/psinventorycache.cpp trunk/src/client/psinventorycache.h Modified: trunk/src/client/chatbubbles.cpp =================================================================== --- trunk/src/client/chatbubbles.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/chatbubbles.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -29,6 +29,7 @@ //============================================================================= // Project Includes //============================================================================= +#include "net/clientmsghandler.h" #include "gui/chatwindow.h" #include "effects/pseffectmanager.h" @@ -47,22 +48,19 @@ #define USER_FILE "/planeshift/userdata/options/chatbubbles.xml" psChatBubbles::psChatBubbles() - : psengine(0), msgHandler(0) + : psengine(NULL) { } psChatBubbles::~psChatBubbles() { - if (msgHandler) - msgHandler->Unsubscribe(this, MSGTYPE_CHAT); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_CHAT); } bool psChatBubbles::Initialize(psEngine * psengine) { this->psengine = psengine; - msgHandler = psengine->GetMsgHandler(); - - msgHandler->Subscribe(this, MSGTYPE_CHAT); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_CHAT); return (Load(USER_FILE) || Load(DEFAULT_FILE, true)); } Modified: trunk/src/client/chatbubbles.h =================================================================== --- trunk/src/client/chatbubbles.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/chatbubbles.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -55,7 +55,6 @@ { private: psEngine * psengine; - MsgHandler * msgHandler; csArray<BubbleChatType> chatTypes; Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/cmdusers.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -254,7 +254,7 @@ { psMessageCracker *msg = (psMessageCracker*) data; if (answeredYes) - psengine->GetMsgHandler()->SendMessage(msg->msg); + msg->SendMessage(); delete msg; } Modified: trunk/src/client/gui/inventorywindow.cpp =================================================================== --- trunk/src/client/gui/inventorywindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/inventorywindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -65,8 +65,6 @@ pawsInventoryWindow::pawsInventoryWindow() { - msgHandler = NULL; - loader = csQueryRegistry<iThreadedLoader> ( PawsManager::GetSingleton().GetObjectRegistry() ); bulkSlots.SetSize( 32 ); @@ -116,11 +114,6 @@ bool pawsInventoryWindow::PostSetup() { - //printf("Inventory setup\n"); - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) - return false; - // Setup the Doll if ( !SetupDoll() ) return false; @@ -271,7 +264,7 @@ { psViewItemDescription out(psengine->GetSlotManager()->HoldingContainerID(), psengine->GetSlotManager()->HoldingSlotID()); - msgHandler->SendMessage( out.msg ); + out.SendMessage(); psengine->GetSlotManager()->CancelDrag(); } @@ -341,13 +334,9 @@ freeSlot->ID(), stackCount ); freeSlot->Reserve(); - - - msgHandler->SendMessage( msg.msg ); + msg.SendMessage(); fromSlot->Clear(); - } - } } } @@ -377,11 +366,10 @@ int slot = fromSlot->ID(); //psItem* item = charData->GetItemInSlot( slot ); - csRef<MsgHandler> msgHandler = psengine->GetMsgHandler(); psSlotMovementMsg msg( container, slot, CONTAINER_INVENTORY_EQUIPMENT, -1, stackCount ); - msgHandler->SendMessage( msg.msg ); + msg.SendMessage(); } } } @@ -432,9 +420,8 @@ int slot = fromSlot->ID(); //psItem* item = charData->GetItemInSlot( slot ); - csRef<MsgHandler> msgHandler = psengine->GetMsgHandler(); psWriteBookMessage msg(slot, container); - msgHandler->SendMessage( msg.msg ); + msg.SendMessage(); } } Modified: trunk/src/client/gui/inventorywindow.h =================================================================== --- trunk/src/client/gui/inventorywindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/inventorywindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -103,8 +103,6 @@ /// A quick pointer to the object view that is the mesh doll. pawsInventoryDollView* view; - csRef<ClientMsgHandler> msgHandler; - void UpdateMoney( const char* moneyName, const char* imageName, int value ); csRef<iThreadedLoader> loader; Modified: trunk/src/client/gui/pawsactivemagicwindow.cpp =================================================================== --- trunk/src/client/gui/pawsactivemagicwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsactivemagicwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -50,8 +50,7 @@ if (!debuffCategories) return false; - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler->Subscribe( this, MSGTYPE_ACTIVEMAGIC ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_ACTIVEMAGIC)) return false; // do something here.... Modified: trunk/src/client/gui/pawsactivemagicwindow.h =================================================================== --- trunk/src/client/gui/pawsactivemagicwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsactivemagicwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -24,7 +24,6 @@ class pawsTextBox; class pawsListBox; class pawsMessageTextBox; -class MsgHandler; class pawsProgressBar; #include "net/subscriber.h" @@ -44,15 +43,10 @@ virtual void Close(); private: - pawsListBox* buffCategories; pawsListBox* debuffCategories; - - csRef<MsgHandler> msgHandler; - }; CREATE_PAWS_FACTORY( pawsActiveMagicWindow ); - #endif Modified: trunk/src/client/gui/pawsbankwindow.cpp =================================================================== --- trunk/src/client/gui/pawsbankwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsbankwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -44,18 +44,14 @@ pawsBankWindow::~pawsBankWindow() { - msgHandler->Unsubscribe(this, MSGTYPE_BANKING); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_BANKING); } bool pawsBankWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if(!msgHandler) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_BANKING)) return false; - if(!msgHandler->Subscribe(this, MSGTYPE_BANKING)) - return false; - Money = (pawsButton*)(FindWidget("MoneyButton")); if(!Money) return false; @@ -296,9 +292,8 @@ psGUIBankingMessage outgoing(psGUIBankingMessage::WITHDRAWFUNDS, guild, circles, octas, hexas, trias); + outgoing.SendMessage(); - msgHandler->SendMessage( outgoing.msg ); - // Reset to 0. circlesToWithdraw->SetText("0"); octasToWithdraw->SetText("0"); @@ -326,9 +321,8 @@ psGUIBankingMessage outgoing(psGUIBankingMessage::DEPOSITFUNDS, guild, circles, octas, hexas, trias); + outgoing.SendMessage(); - msgHandler->SendMessage( outgoing.msg ); - // Reset to 0. circlesToDeposit->SetText("0"); octasToDeposit->SetText("0"); @@ -370,8 +364,7 @@ { psGUIBankingMessage outgoing(psGUIBankingMessage::EXCHANGECOINS, guild, coins, coin); - - msgHandler->SendMessage( outgoing.msg ); + outgoing.SendMessage(); } // Reset to 0. Modified: trunk/src/client/gui/pawsbankwindow.h =================================================================== --- trunk/src/client/gui/pawsbankwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsbankwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -27,8 +27,6 @@ #include "paws/pawslistbox.h" #include "paws/pawsradio.h" -class MsgHandler; - /** The bank window in PlaneShift. * This is the window that people will use to interact with their bank accounts. */ @@ -82,8 +80,6 @@ /* Whether or not this is a guild bank account. */ bool guild; - - csRef<MsgHandler> msgHandler; }; CREATE_PAWS_FACTORY( pawsBankWindow ); Modified: trunk/src/client/gui/pawsbookreadingwindow.cpp =================================================================== --- trunk/src/client/gui/pawsbookreadingwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsbookreadingwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -45,12 +45,9 @@ bool pawsBookReadingWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_READ_BOOK)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_CRAFT_INFO)) return false; - if ( !msgHandler ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_READ_BOOK ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_CRAFT_INFO ) ) return false; - // Store some of our children for easy access later on. name = dynamic_cast<pawsTextBox*> (FindWidget("ItemName")); if ( !name ) return false; Modified: trunk/src/client/gui/pawsbookreadingwindow.h =================================================================== --- trunk/src/client/gui/pawsbookreadingwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsbookreadingwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -39,9 +39,6 @@ bool OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ); private: -//Commented out because it made some IncRef and DecRef stuff mysteriously invisible! - csRef<MsgHandler> msgHandler; - pawsTextBox* name; pawsMultiLineTextBox* description; pawsMultiLineTextBox* descriptionCraft; Modified: trunk/src/client/gui/pawscharcreatemain.cpp =================================================================== --- trunk/src/client/gui/pawscharcreatemain.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscharcreatemain.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -68,9 +68,8 @@ { createManager = psengine->GetCharManager()->GetCreation(); - msgHandler = psengine->GetMsgHandler(); - msgHandler->Subscribe(this, MSGTYPE_CHAR_CREATE_CP); - msgHandler->Subscribe(this, MSGTYPE_CHAR_CREATE_NAME); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_CHAR_CREATE_CP); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_CHAR_CREATE_NAME); createManager->SetGender( PSCHARACTER_GENDER_MALE ); currentGender = PSCHARACTER_GENDER_MALE; lastGender = -1; @@ -946,8 +945,8 @@ newWindow = "Paths"; } - psNameCheckMessage msg( name->GetText() ); - msgHandler->SendMessage( msg.msg ); + psNameCheckMessage msg(name->GetText()); + msg.SendMessage(); } } Modified: trunk/src/client/gui/pawscharcreatemain.h =================================================================== --- trunk/src/client/gui/pawscharcreatemain.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscharcreatemain.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -129,13 +129,9 @@ /// Gender radio button group pawsRadioButtonGroup* gender; - /// For outgoing messages. - csRef<MsgHandler> msgHandler; - csRef<iPawsImage> femaleImage; csRef<iPawsImage> neutralImage; - /// Paper doll view of model. pawsObjectView* view; Modified: trunk/src/client/gui/pawscharpick.cpp =================================================================== --- trunk/src/client/gui/pawscharpick.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscharpick.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -74,22 +74,16 @@ { psengine->UnregisterDelayedLoader(this); delete charApp; - if(msgHandler) - { - msgHandler->Unsubscribe( this, MSGTYPE_AUTHAPPROVED ); - msgHandler->Unsubscribe( this, MSGTYPE_CHAR_DELETE ); - } + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_AUTHAPPROVED); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_CHAR_DELETE); } bool pawsCharacterPickerWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) return false; - // Subscribe our message types that we are interested in. - msgHandler->Subscribe(this,MSGTYPE_AUTHAPPROVED); - msgHandler->Subscribe( this, MSGTYPE_CHAR_DELETE ); + psengine->GetMsgHandler()->Subscribe(this,MSGTYPE_AUTHAPPROVED); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_CHAR_DELETE); view = (pawsObjectView*)FindWidget("PaperDollView"); view->Rotate(10,0.01f); @@ -201,8 +195,8 @@ psString charFirstName; charFullName.GetWord( 0, charFirstName ); - psCharDeleteMessage out( charFirstName, 0 ); - msgHandler->SendMessage( out.msg ); + psCharDeleteMessage msg(charFirstName, 0); + msg.SendMessage(); } } @@ -274,8 +268,8 @@ psString charFirstName; charFullName.GetWord( 0, charFirstName ); - psCharDeleteMessage out( charFirstName, 0 ); - msgHandler->SendMessage( out.msg ); + psCharDeleteMessage msg(charFirstName, 0); + msg.SendMessage(); return true; } @@ -313,8 +307,8 @@ // Send the name of the character to the server. csString charname( ((pawsButton*)FindWidget(name))->GetText() ); - psCharacterPickerMessage out( charname ); - msgHandler->SendMessage( out.msg ); + psCharacterPickerMessage msg(charname); + msg.SendMessage(); } return true; Modified: trunk/src/client/gui/pawscharpick.h =================================================================== --- trunk/src/client/gui/pawscharpick.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscharpick.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -4,7 +4,6 @@ #include "paws/pawsstringpromptwindow.h" #include "paws/pawswidget.h" #include "net/message.h" -#include "net/clientmsghandler.h" #include "psengine.h" @@ -64,8 +63,6 @@ virtual void OnStringEntered(const char *name, int param,const char *value); - csRef<MsgHandler> msgHandler; - int charactersFound; int selectedCharacter; Modified: trunk/src/client/gui/pawscontainerdescwindow.cpp =================================================================== --- trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -64,14 +64,11 @@ bool pawsContainerDescWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_VIEW_CONTAINER)) + return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_UPDATE_ITEM)) + return false; - if ( !msgHandler ) return false; - if ( !msgHandler->Subscribe(this, MSGTYPE_VIEW_CONTAINER ) ) - return false; - if ( !msgHandler->Subscribe(this, MSGTYPE_UPDATE_ITEM ) ) - return false; - // Store some of our children for easy access later on. name = (pawsTextBox*)FindWidget("ItemName"); if (!name) @@ -241,7 +238,7 @@ { psViewItemDescription out(psengine->GetSlotManager()->HoldingContainerID(), psengine->GetSlotManager()->HoldingSlotID()); - msgHandler->SendMessage( out.msg ); + out.SendMessage(); psengine->GetSlotManager()->CancelDrag(); } Modified: trunk/src/client/gui/pawscontainerdescwindow.h =================================================================== --- trunk/src/client/gui/pawscontainerdescwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscontainerdescwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -47,7 +47,6 @@ private: void HandleUpdateItem( MsgEntry* me ); void HandleViewItem( MsgEntry* me ); - csRef<MsgHandler> msgHandler; pawsTextBox* name; pawsMultiLineTextBox* description; Modified: trunk/src/client/gui/pawscraft.cpp =================================================================== --- trunk/src/client/gui/pawscraft.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscraft.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -31,14 +31,7 @@ bool pawsCraftWindow::PostSetup() { -// itemTree = NULL; - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) return false; - - if ( !msgHandler->Subscribe( this, MSGTYPE_CRAFT_INFO ) ) - return false; - - return true; + return psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_CRAFT_INFO); } void pawsCraftWindow::Show() Modified: trunk/src/client/gui/pawscraft.h =================================================================== --- trunk/src/client/gui/pawscraft.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawscraft.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -53,8 +53,6 @@ pawsMultiLineTextBox* textBox; // pawsSimpleTree* itemTree; - - csRef<MsgHandler> msgHandler; // void Add( const char* parent, const char* realParent, psMsgCraftingInfo::CraftingItem* item ); Modified: trunk/src/client/gui/pawsexchangewindow.cpp =================================================================== --- trunk/src/client/gui/pawsexchangewindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsexchangewindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -62,31 +62,28 @@ pawsExchangeWindow::~pawsExchangeWindow() { - msgHandler->Unsubscribe( this, MSGTYPE_GUIEXCHANGE ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_REQUEST ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_ADD_ITEM ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_REMOVE_ITEM ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_ACCEPT ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_END ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_STATUS ); - msgHandler->Unsubscribe( this, MSGTYPE_EXCHANGE_MONEY ); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_GUIEXCHANGE); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_REQUEST); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_ADD_ITEM); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_REMOVE_ITEM); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_ACCEPT); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_END); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_STATUS); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_EXCHANGE_MONEY); } bool pawsExchangeWindow::PostSetup() { csString slotName; - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) return false; - - if ( !msgHandler->Subscribe( this, MSGTYPE_GUIEXCHANGE ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_REQUEST ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_ADD_ITEM ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_REMOVE_ITEM ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_ACCEPT ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_END ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_STATUS ) ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_EXCHANGE_MONEY ) ) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_GUIEXCHANGE)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_REQUEST)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_ADD_ITEM)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_REMOVE_ITEM)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_ACCEPT)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_END)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_STATUS)) return false; + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_EXCHANGE_MONEY)) return false; // the two backgrounds for the offering/receiving frame offeringBG = FindWidget("Offering Frame"); @@ -397,17 +394,16 @@ void pawsExchangeWindow::SendAccept() { - psExchangeAcceptMsg mesg; - msgHandler->SendMessage(mesg.msg); + psExchangeAcceptMsg msg; + msg.SendMessage(); } void pawsExchangeWindow::SendEnd() { - psExchangeEndMsg outgoing; - msgHandler->SendMessage(outgoing.msg); + psExchangeEndMsg msg; + msg.SendMessage(); } - void pawsExchangeWindow::Clear() { for ( int x = 0; x < EXCHANGE_SLOT_COUNT; x++ ) Modified: trunk/src/client/gui/pawsexchangewindow.h =================================================================== --- trunk/src/client/gui/pawsexchangewindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsexchangewindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -29,7 +29,6 @@ #include "util/psconst.h" #include "gui/inventorywindow.h" -class MsgHandler; class pawsMoney; #define EXCHANGE_VISIBLE 4 @@ -99,9 +98,6 @@ //Text that shows the total amount of trias pawsTextBox * totalTriasOffered, *totalTriasReceived; - csRef<MsgHandler> msgHandler; - - /// List of slots for items that have been offered. pawsSlot* offeringSlots[EXCHANGE_SLOT_COUNT]; Modified: trunk/src/client/gui/pawsgameboard.cpp =================================================================== --- trunk/src/client/gui/pawsgameboard.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsgameboard.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -65,24 +65,15 @@ pawsGameBoard::~pawsGameBoard() { - if (msgHandler) - { - msgHandler->Unsubscribe(this, MSGTYPE_MINIGAME_BOARD); - msgHandler->Unsubscribe(this, MSGTYPE_MINIGAME_STARTSTOP); - } + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_MINIGAME_BOARD); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_MINIGAME_STARTSTOP); } bool pawsGameBoard::PostSetup() { - - // Setup this widget to receive messages and commands - msgHandler = psengine->GetMsgHandler(); - if (!msgHandler) - return false; - // Subscribe to Minigame messages - msgHandler->Subscribe(this, MSGTYPE_MINIGAME_BOARD); - msgHandler->Subscribe(this, MSGTYPE_MINIGAME_STARTSTOP); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_MINIGAME_BOARD); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_MINIGAME_STARTSTOP); return true; } @@ -154,18 +145,12 @@ pawsWidget::Hide(); // Stop the game - if (msgHandler) - { - psMGStartStopMessage msg(0, false); - msgHandler->SendMessage(msg.msg); - } + psMGStartStopMessage msg(0, false); + msg.SendMessage(); } void pawsGameBoard::StartGame() { - if (!msgHandler) - return; - // Clean the board CleanBoard(); @@ -175,7 +160,7 @@ // Request to start the game psMGStartStopMessage msg(0, true); - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); } void pawsGameBoard::CleanBoard() @@ -411,9 +396,6 @@ pawsGameTile *oldTile = draggingPiece; draggingPiece = NULL; - if (!msgHandler) - return; - // Don't send updates if the old tile and new tile are the same if (oldTile && tile && oldTile->GetColumn() == tile->GetColumn() && oldTile->GetRow() == tile->GetRow()) @@ -443,13 +425,13 @@ if (cnt > 0) { psMGUpdateMessage msg(0, ++currentCounter, gameID, cnt, updates); - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); } } void pawsGameBoard::UpdatePiece(pawsGameTile *tile) { - if (!tile || !msgHandler) + if (!tile) return; // Fill in the buffer with updates. @@ -459,7 +441,7 @@ // Send to the server. psMGUpdateMessage msg(0, ++currentCounter, gameID, 1, updates); - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); } void pawsGameBoard::StartDragging(pawsGameTile *tile) Modified: trunk/src/client/gui/pawsgameboard.h =================================================================== --- trunk/src/client/gui/pawsgameboard.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsgameboard.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -198,10 +198,6 @@ const csString PieceArtName(uint8_t piece) const; private: - - /// Message handler. - csRef<MsgHandler> msgHandler; - /// Array of game tiles. csArray<pawsGameTile *> tiles; Modified: trunk/src/client/gui/pawsglyphwindow.cpp =================================================================== --- trunk/src/client/gui/pawsglyphwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsglyphwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -76,8 +76,8 @@ pawsWidget::Show(); // Ask the server to send us the glyphs - psRequestGlyphsMessage outGoingMessage; - psengine->GetMsgHandler()->SendMessage( outGoingMessage.msg ); + psRequestGlyphsMessage msg; + msg.SendMessage(); } void pawsGlyphWindow::Hide() Modified: trunk/src/client/gui/pawsgroupwindow.cpp =================================================================== --- trunk/src/client/gui/pawsgroupwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsgroupwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -57,16 +57,14 @@ pawsGroupWindow::~pawsGroupWindow() { - msgHandler->Unsubscribe( this, MSGTYPE_GUIGROUP ); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_GUIGROUP); } bool pawsGroupWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_GUIGROUP)) + return false; - if ( !msgHandler ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_GUIGROUP ) ) return false; - memberList = (pawsListBox*)FindWidget("List"); if ( !memberList ) return false; Modified: trunk/src/client/gui/pawsgroupwindow.h =================================================================== --- trunk/src/client/gui/pawsgroupwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsgroupwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -51,8 +51,6 @@ void SetStats( GEMClientActor * actor ); private: - csRef<MsgHandler> msgHandler; - pawsListBox* memberList; void Draw(); Modified: trunk/src/client/gui/pawsguildwindow.cpp =================================================================== --- trunk/src/client/gui/pawsguildwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsguildwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -162,21 +162,20 @@ pawsGuildWindow::~pawsGuildWindow() { - msgHandler->Unsubscribe( this, MSGTYPE_GUIGUILD ); - msgHandler->Unsubscribe( this, MSGTYPE_MOTD ); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_GUIGUILD); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_MOTD); } bool pawsGuildWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler->Subscribe( this, MSGTYPE_GUIGUILD ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_GUIGUILD)) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_MOTD ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_MOTD)) return false; //Request a MOTD for the guild psMOTDRequestMessage motdReq; - msgHandler->SendMessage(motdReq.msg); + motdReq.SendMessage(); xml = csQueryRegistry<iDocumentSystem > ( PawsManager::GetSingleton().GetObjectRegistry()); @@ -663,7 +662,7 @@ command.Format("<l level=\"%d\" privilege=\"%s\" state=\"%s\"/>", level+1,widget->GetXMLBinding().GetData(),checkBox->GetState()?"on":"off"); psGUIGuildMessage msg(psGUIGuildMessage::SET_LEVEL_RIGHT,command); - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); /* We revert the checkbox back and let the server do the change. If the server allows the change, it will be set to new state by a LEVEL_DATA message. @@ -762,7 +761,7 @@ csString command; command.Format("<r onlineonly=\"%s\"/>", onlineOnly->GetState() ? "yes":"no"); psGUIGuildMessage msg(psGUIGuildMessage::SET_ONLINE, command); - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); retVal = true; break; } @@ -772,7 +771,7 @@ csString command; command.Format("<r guildnotifications=\"%s\"/>", guildNotifications->GetState() ? "yes":"no"); psGUIGuildMessage msg(psGUIGuildMessage::SET_GUILD_NOTIFICATION, command); - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); retVal = true; break; } @@ -906,14 +905,14 @@ csString nameMsg(guildName->GetText()); psGuildMOTDSetMessage motdSet(motdMsg,nameMsg); - msgHandler->SendMessage(motdSet.msg); + motdSet.SendMessage(); retVal = true; break; } case REFRESH_MOTD_BUTTON: { psMOTDRequestMessage motdReq; - msgHandler->SendMessage(motdReq.msg); + motdReq.SendMessage(); retVal = true; break; } @@ -1051,8 +1050,7 @@ pawsControlledWindow::Hide(); psGUIGuildMessage msg(psGUIGuildMessage::UNSUBSCRIBE_GUILD_DATA, "<x/>"); - if (msgHandler != NULL) - msgHandler->SendMessage(msg.msg); + msg.SendMessage(); } } Modified: trunk/src/client/gui/pawsguildwindow.h =================================================================== --- trunk/src/client/gui/pawsguildwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsguildwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -123,7 +123,6 @@ pawsListBox *allianceMemberList; csRef<iDocumentSystem> xml; - csRef<MsgHandler> msgHandler; csArray<guildMemberInfo> members; Modified: trunk/src/client/gui/pawsinfowindow.cpp =================================================================== --- trunk/src/client/gui/pawsinfowindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsinfowindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -48,14 +48,14 @@ pawsInfoWindow::~pawsInfoWindow() { - msgHandler->Unsubscribe(this,MSGTYPE_MODE); + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_MODE); } void pawsInfoWindow::Show() { psStatDRMessage msg; - psengine->GetMsgHandler()->SendMessage( msg.msg ); + msg.SendMessage(); pawsControlledWindow::Show(); } @@ -69,8 +69,7 @@ { pawsControlledWindow::PostSetup(); - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler->Subscribe(this,MSGTYPE_MODE) ) + if (!psengine->GetMsgHandler()->Subscribe(this,MSGTYPE_MODE)) return false; targetName = (pawsTextBox*)FindWidget( "Targeted" ); Modified: trunk/src/client/gui/pawsinfowindow.h =================================================================== --- trunk/src/client/gui/pawsinfowindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsinfowindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -27,7 +27,6 @@ #include "net/cmdbase.h" #include "gui/pawscontrolwindow.h" #include "net/message.h" -#include "net/clientmsghandler.h" class pawsTextBox; class pawsProgressBar; @@ -71,7 +70,6 @@ pawsButton *stanceButton5; pawsTextBox* timeOfDay; - csRef<MsgHandler> msgHandler; csString stanceConvert(const uint ID); uint selectedstance; Modified: trunk/src/client/gui/pawsinteractwindow.cpp =================================================================== --- trunk/src/client/gui/pawsinteractwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsinteractwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -151,12 +151,7 @@ bool pawsInteractWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - - if ( !msgHandler ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_GUIINTERACT) ) return false; - - return true; + return psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_GUIINTERACT); } void pawsInteractWindow::HandleMessage( MsgEntry* me ) @@ -234,7 +229,7 @@ // Send message to server psViewItemDescription out(id.Unbox(), -1); - msgHandler->SendMessage( out.msg ); + out.SendMessage(); Hide(); PawsManager::GetSingleton().SetCurrentFocusedWidget( NULL ); @@ -251,7 +246,7 @@ // Find entity id EID id = object->GetEID(); psEntranceMessage out(id); - msgHandler->SendMessage( out.msg ); + out.SendMessage(); Hide(); PawsManager::GetSingleton().SetCurrentFocusedWidget( NULL ); Modified: trunk/src/client/gui/pawsinteractwindow.h =================================================================== --- trunk/src/client/gui/pawsinteractwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsinteractwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -47,8 +47,6 @@ void OnStringEntered(const char *name,int param,const char *value); private: - csRef<MsgHandler> msgHandler; - csArray<csString> names; csArray<int> types; Modified: trunk/src/client/gui/pawsitemdescriptionwindow.cpp =================================================================== --- trunk/src/client/gui/pawsitemdescriptionwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsitemdescriptionwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -45,19 +45,14 @@ pawsItemDescriptionWindow::~pawsItemDescriptionWindow() { - if(msgHandler) - { - msgHandler->Unsubscribe(this,MSGTYPE_VIEW_ITEM); - } + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_VIEW_ITEM); } bool pawsItemDescriptionWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_VIEW_ITEM)) + return false; - if ( !msgHandler ) return false; - if ( !msgHandler->Subscribe( this, MSGTYPE_VIEW_ITEM ) ) return false; - // Store some of our children for easy access later on. name = dynamic_cast<pawsTextBox*> (FindWidget("ItemName")); Modified: trunk/src/client/gui/pawsitemdescriptionwindow.h =================================================================== --- trunk/src/client/gui/pawsitemdescriptionwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsitemdescriptionwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -42,8 +42,6 @@ void ShowItemDescription(csString &desc, csString &itemName, csString &icon, int count); private: - csRef<MsgHandler> msgHandler; - pawsTextBox* name; pawsMultiLineTextBox* description; pawsWidget* pic; Modified: trunk/src/client/gui/pawsmerchantwindow.cpp =================================================================== --- trunk/src/client/gui/pawsmerchantwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsmerchantwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -102,10 +102,7 @@ bool pawsMerchantWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) return false; - - if ( !msgHandler->Subscribe( this, MSGTYPE_GUIMERCHANT ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_GUIMERCHANT)) return false; categoryBox = (pawsListBox*)FindWidget("Categories"); @@ -401,7 +398,7 @@ EscpXML(nameWidget->GetText()).GetData()); psGUIMerchantMessage outgoing(psGUIMerchantMessage::CATEGORY, commandData); - msgHandler->SendMessage( outgoing.msg ); + outgoing.SendMessage(); } } else if ( widget->GetID()==ITEM_LIST && status==LISTBOX_SELECTED ) @@ -417,7 +414,7 @@ commandData.Format("<C ID=\"%d\"/>", merchantID); psGUIMerchantMessage outgoing(psGUIMerchantMessage::CANCEL, commandData); - msgHandler->SendMessage(outgoing.msg); + outgoing.SendMessage(); // Clean the boxes categoryBox->Clear(); @@ -473,7 +470,7 @@ merchantID, tradeCommand, escpxml.GetData(), cmdtxt.GetData()); psGUIMerchantMessage outgoing(psGUIMerchantMessage::VIEW, commandData); - msgHandler->SendMessage(outgoing.msg); + outgoing.SendMessage(); } return true; } @@ -487,12 +484,12 @@ if (buy) { psGUIMerchantMessage exchange(psGUIMerchantMessage::REQUEST,"<R TYPE=\"BUY\"/>"); - msgHandler->SendMessage(exchange.msg); + exchange.SendMessage(); } else { psGUIMerchantMessage exchange(psGUIMerchantMessage::REQUEST,"<R TYPE=\"SELL\"/>"); - msgHandler->SendMessage(exchange.msg); + exchange.SendMessage(); } itemsBox->Clear(); categoryBox->Clear(); @@ -505,7 +502,7 @@ sprintf(commandData, "<T ID=\"%d\" ITEM=\"%s\" COUNT=\"%d\" ITEM_ID=\"%s\" />", merchantID, escpxml.GetData(), count, itemID); psGUIMerchantMessage outgoing(tradeCommand, commandData); - msgHandler->SendMessage(outgoing.msg); + outgoing.SendMessage(); Error2("%s", commandData); } Modified: trunk/src/client/gui/pawsmerchantwindow.h =================================================================== --- trunk/src/client/gui/pawsmerchantwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsmerchantwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -26,11 +26,8 @@ #include "paws/pawslistbox.h" #include "paws/pawsnumberpromptwindow.h" -class MsgHandler; class pawsListBox; - - /** The window that deals with interacting with a NPC merchant. */ class pawsMerchantWindow : public pawsWidget, public psClientNetSubscriber,public iOnNumberEnteredAction @@ -51,8 +48,6 @@ void OnNumberEntered(const char *name,int param,int value); protected: - csRef<MsgHandler> msgHandler; - // Handle messages from the server. void HandleMerchant( const char* data ); void HandleCategories( const char* data ); Modified: trunk/src/client/gui/pawspetstatwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetstatwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawspetstatwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -77,10 +77,7 @@ bool pawsPetStatWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) return false; - - if ( !msgHandler->Subscribe( this, MSGTYPE_PET_SKILL ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_PET_SKILL)) return false; xml = csQueryRegistry<iDocumentSystem > ( PawsManager::GetSingleton().GetObjectRegistry()); @@ -494,8 +491,7 @@ csString commandData; commandData.Format("<B NAME=\"%s\" />", EscpXML(selectedSkill).GetData()); psPetSkillMessage outgoing( psPetSkillMessage::BUY_SKILL, commandData); - - msgHandler->SendMessage( outgoing.msg ); + outgoing.SendMessage(); } void pawsPetStatWindow::Show() @@ -505,25 +501,18 @@ // Hack set to no when show called because of an incoming skill table. if (skillString != "no") { - if ( msgHandler ) - { - psPetSkillMessage outgoing(psPetSkillMessage::REQUEST, ""); - msgHandler->SendMessage(outgoing.msg); - } + psPetSkillMessage msg(psPetSkillMessage::REQUEST, ""); + msg.SendMessage(); } } void pawsPetStatWindow::Hide() { - if (msgHandler) - { - psPetSkillMessage outgoing(psPetSkillMessage::QUIT, ""); - msgHandler->SendMessage(outgoing.msg); - } + psPetSkillMessage msg(psPetSkillMessage::QUIT, ""); + msg.SendMessage(); pawsWidget::Hide(); } - void pawsPetStatWindow::OnListAction( pawsListBox* widget, int status ) { if (status==LISTBOX_HIGHLIGHTED) @@ -536,13 +525,11 @@ csString commandData; commandData.Format("<S NAME=\"%s\" />", EscpXML(selectedSkill).GetData()); - psPetSkillMessage outgoing( psPetSkillMessage::SKILL_SELECTED, commandData); - - msgHandler->SendMessage( outgoing.msg ); + psPetSkillMessage msg(psPetSkillMessage::SKILL_SELECTED, commandData); + msg.SendMessage(); } } - void pawsPetStatWindow::Draw() { if ( target ) Modified: trunk/src/client/gui/pawspetstatwindow.h =================================================================== --- trunk/src/client/gui/pawspetstatwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawspetstatwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -25,7 +25,6 @@ class pawsListBox; class pawsListBoxRow; class pawsMultiLineTextBox; -class MsgHandler; class pawsProgressBar; class pawsObjectView; class psCharAppearance; @@ -82,7 +81,6 @@ int hitpointsMax, manaMax, physStaminaMax, menStaminaMax; csRef<iDocumentSystem> xml; - csRef<MsgHandler> msgHandler; GEMClientActor* target; csString targetID; Modified: trunk/src/client/gui/pawsskillwindow.cpp =================================================================== --- trunk/src/client/gui/pawsskillwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsskillwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -85,24 +85,17 @@ bool pawsSkillWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) - { - return false; - } - // Setup the Doll if ( !SetupDoll() ) { return false; } - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler->Subscribe( this, MSGTYPE_GUISKILL ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_GUISKILL)) { return false; } - if ( !msgHandler->Subscribe( this, MSGTYPE_FACTION_INFO ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_FACTION_INFO)) { return false; } @@ -631,8 +624,7 @@ commandData.Format("<B NAME=\"%s\" AMOUNT=\"%d\"/>", EscpXML(selectedSkill).GetData(), number); psGUISkillMessage outgoing(psGUISkillMessage::BUY_SKILL, commandData); - - msgHandler->SendMessage( outgoing.msg ); + outgoing.SendMessage(); } void pawsSkillWindow::BuyMaxSkill() @@ -658,9 +650,8 @@ possibleTraining = skillCache.getProgressionPoints(); commandData.Format("<B NAME=\"%s\" AMOUNT=\"%d\"/>", EscpXML(selectedSkill).GetData(), possibleTraining); - psGUISkillMessage outgoing( psGUISkillMessage::BUY_SKILL, commandData); - - msgHandler->SendMessage( outgoing.msg ); + psGUISkillMessage msg(psGUISkillMessage::BUY_SKILL, commandData); + msg.SendMessage(); } void pawsSkillWindow::BuySkill() @@ -694,7 +685,7 @@ { skillCache.clear(); // Clear the skill cache before the new request psGUISkillMessage outgoing(psGUISkillMessage::REQUEST, ""); - msgHandler->SendMessage(outgoing.msg); + outgoing.SendMessage(); } // If this is the first time the window is open then we need to get our @@ -703,17 +694,14 @@ { psFactionMessage factionRequest(0, psFactionMessage::MSG_FULL_LIST); factionRequest.BuildMsg(); - msgHandler->SendMessage(factionRequest.msg); + factionRequest.SendMessage(); } } void pawsSkillWindow::Hide() { - if (msgHandler) - { - psGUISkillMessage outgoing(psGUISkillMessage::QUIT, ""); - msgHandler->SendMessage(outgoing.msg); - } + psGUISkillMessage outgoing(psGUISkillMessage::QUIT, ""); + outgoing.SendMessage(); skillCache.clear(); pawsControlledWindow::Hide(); } @@ -745,8 +733,7 @@ csString commandData; commandData.Format("<S NAME=\"%s\" />", EscpXML(selectedSkill).GetData()); psGUISkillMessage outgoing( psGUISkillMessage::SKILL_SELECTED, commandData); - - msgHandler->SendMessage( outgoing.msg ); + outgoing.SendMessage(); } else { Modified: trunk/src/client/gui/pawsskillwindow.h =================================================================== --- trunk/src/client/gui/pawsskillwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsskillwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -30,7 +30,6 @@ class pawsListBox; class pawsListBoxRow; class pawsMultiLineTextBox; -class MsgHandler; class pawsProgressBar; class pawsObjectView; class psCharAppearance; @@ -140,7 +139,6 @@ int currentTab, previousTab; ///< Used for storing which is the current tab and the previous one csRef<iDocumentSystem> xml; - csRef<MsgHandler> msgHandler; psSkillCache skillCache; ///< Local copy of skills and stats csHash<psSkillDescription *> skillDescriptions; ///< Local copy of skill and stat descriptions Modified: trunk/src/client/gui/pawsslot.cpp =================================================================== --- trunk/src/client/gui/pawsslot.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsslot.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -90,7 +90,7 @@ if ( !empty && psengine->GetMouseBinds()->CheckBind("ContextMenu",button,modifiers) ) { psViewItemDescription out(containerID, slotID); - psengine->GetMsgHandler()->SendMessage( out.msg ); + out.SendMessage(); return true; } else Modified: trunk/src/client/gui/pawssmallinventory.cpp =================================================================== --- trunk/src/client/gui/pawssmallinventory.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawssmallinventory.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -41,12 +41,10 @@ { pawsWidget::Show(); // Ask the server to send us the inventory - psGUIInventoryMessage outGoingMessage; - msgHandler->SendMessage( outGoingMessage.msg ); + psGUIInventoryMessage request; + request.SendMessage(); } - - bool pawsSmallInventoryWindow::PostSetup() { @@ -95,18 +93,11 @@ } } money = dynamic_cast <pawsMoney*> (FindWidget("Money")); - if ( money ){ - money->SetContainer( CONTAINER_INVENTORY_MONEY );} - - - // We want to know about inventory messages. - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler ) - return false; - - return true; + if (money) + { + money->SetContainer(CONTAINER_INVENTORY_MONEY); + } } - return true; } Modified: trunk/src/client/gui/pawssmallinventory.h =================================================================== --- trunk/src/client/gui/pawssmallinventory.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawssmallinventory.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -26,8 +26,6 @@ #include "rpgrules/psmoney.h" #include "gui/pawscontrolwindow.h" -class MsgHandler; - class pawsSlot; class pawsMoney; @@ -48,7 +46,6 @@ csArray<pawsSlot*> bulkSlots; void UpdateMoney( const char* moneyName, const char* imageName, int value ); - MsgHandler* msgHandler; pawsMoney * money; bool OnMouseDown( int button, int keyModifier, int x, int y ); Modified: trunk/src/client/gui/pawsspellbookwindow.cpp =================================================================== --- trunk/src/client/gui/pawsspellbookwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsspellbookwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -52,8 +52,7 @@ bool pawsSpellBookWindow::PostSetup() { - msgHandler = psengine->GetMsgHandler(); - if ( !msgHandler->Subscribe( this, MSGTYPE_SPELL_BOOK ) ) + if (!psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_SPELL_BOOK)) return false; spellList = (pawsListBox*)FindWidget("SpellList"); @@ -152,8 +151,8 @@ { if ( selectedSpell.Length() > 0 ) { - psSpellCastMessage mesg( selectedSpell, psengine->GetKFactor() ); - msgHandler->SendMessage(mesg.msg); + psSpellCastMessage msg(selectedSpell, psengine->GetKFactor()); + msg.SendMessage(); } } @@ -170,8 +169,8 @@ void pawsSpellBookWindow::Show() { pawsControlledWindow::Show(); - psSpellBookMessage mesg; - msgHandler->SendMessage(mesg.msg); + psSpellBookMessage msg; + msg.SendMessage(); } Modified: trunk/src/client/gui/pawsspellbookwindow.h =================================================================== --- trunk/src/client/gui/pawsspellbookwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsspellbookwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -25,7 +25,6 @@ class pawsTextBox; class pawsListBox; class pawsMessageTextBox; -class MsgHandler; #include "net/cmdbase.h" #include "gui/pawscontrolwindow.h" @@ -61,7 +60,6 @@ pawsWidget* spellImage; csString selectedSpell; - csRef<MsgHandler> msgHandler; csHash<csString, csString> descriptions_Hash; csHash<csString, csString> images_Hash; Modified: trunk/src/client/gui/pawsspellcancelwindow.cpp =================================================================== --- trunk/src/client/gui/pawsspellcancelwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawsspellcancelwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -21,7 +21,6 @@ // COMMON INCLUDES #include "net/messages.h" -#include "net/clientmsghandler.h" #include "util/strutil.h" // CLIENT INCLUDES @@ -92,8 +91,8 @@ void pawsSpellCancelWindow::Cancel() { - psSpellCancelMessage mesg; - psengine->GetMsgHandler()->SendMessage(mesg.msg); + psSpellCancelMessage msg; + msg.SendMessage(); castingTime = 0; Hide(); Modified: trunk/src/client/gui/pawstutorialwindow.cpp =================================================================== --- trunk/src/client/gui/pawstutorialwindow.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawstutorialwindow.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -55,23 +55,14 @@ pawsTutorialNotifyWindow::~pawsTutorialNotifyWindow() { - if (msgHandler) - { - msgHandler->Unsubscribe(this, MSGTYPE_TUTORIAL); - } + psengine->GetMsgHandler()->Unsubscribe(this, MSGTYPE_TUTORIAL); } bool pawsTutorialNotifyWindow::PostSetup() { - // Setup this widget to receive messages and commands - msgHandler = psengine->GetMsgHandler(); - - if (!msgHandler ) - return false; - // Subscribe to the messages we want to handle. // Receiving this message will popup the first window. - msgHandler->Subscribe(this, MSGTYPE_TUTORIAL); + psengine->GetMsgHandler()->Subscribe(this, MSGTYPE_TUTORIAL); instr_container = psengine->GetMainWidget()->FindWidget("Tutorial"); instructions = (pawsMultiLineTextBox*)instr_container->FindWidget("TutorialInstructions"); Modified: trunk/src/client/gui/pawstutorialwindow.h =================================================================== --- trunk/src/client/gui/pawstutorialwindow.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/gui/pawstutorialwindow.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -55,8 +55,6 @@ bool NextTutorial(); protected: - - csRef<MsgHandler> msgHandler; /// Ptr to the widget that popups when you click the alerter pawsWidget *instr_container; /// Ptr to the widget that displays the actual text of the instructions for this message. Modified: trunk/src/client/psinventorycache.cpp =================================================================== --- trunk/src/client/psinventorycache.cpp 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/psinventorycache.cpp 2009-07-17 20:20:45 UTC (rev 4057) @@ -23,7 +23,6 @@ psInventoryCache::psInventoryCache () : version(0) { - msgHandler = psengine->GetMsgHandler(); EmptyInventory(); } @@ -40,24 +39,21 @@ itemhash.Empty(); } -bool psInventoryCache::GetInventory (void) +bool psInventoryCache::GetInventory() { - if (!msgHandler) - return false; - // testing if need to request full inventory or // just to refresh local cache. if (cacheStatus == INVALID) { // full list request - psGUIInventoryMessage outGoingMessage; - msgHandler->SendMessage( outGoingMessage.msg ); + psGUIInventoryMessage request; + request.SendMessage(); } else { // updates request - psGUIInventoryMessage outGoingMessage(psGUIInventoryMessage::UPDATE_REQUEST); - msgHandler->SendMessage( outGoingMessage.msg ); + psGUIInventoryMessage request(psGUIInventoryMessage::UPDATE_REQUEST); + request.SendMessage(); } return true; Modified: trunk/src/client/psinventorycache.h =================================================================== --- trunk/src/client/psinventorycache.h 2009-07-17 16:31:04 UTC (rev 4056) +++ trunk/src/client/psinventorycache.h 2009-07-17 20:20:45 UTC (rev 4057) @@ -20,7 +20,6 @@ #define PS_INVENTORY_CACHE #include "util/pscache.h" -#include "net/clientmsghandler.h" /** * @class psInventoryCache @@ -109,8 +108,6 @@ // CachedItemDescription bulkItems[INVENTORY_BULK_COUNT]; /// cached bulk items // CachedItemDescription equipItems[INVENTORY_EQUIP_COUNT]; /// cached equip items - csRef<MsgHandler> msgHandler; - uint32 version; // Current cache version (PS#2691) }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-07-19 19:26:50
|
Revision: 4079 http://planeshift.svn.sourceforge.net/planeshift/?rev=4079&view=rev Author: kougaro Date: 2009-07-19 19:26:42 +0000 (Sun, 19 Jul 2009) Log Message: ----------- Clean up the code for attaching and detaching the rider to his mount, client-side Modified Paths: -------------- trunk/src/client/charapp.cpp trunk/src/client/charapp.h Modified: trunk/src/client/charapp.cpp =================================================================== --- trunk/src/client/charapp.cpp 2009-07-19 19:15:08 UTC (rev 4078) +++ trunk/src/client/charapp.cpp 2009-07-19 19:26:42 UTC (rev 4079) @@ -275,41 +275,18 @@ return; } - csString keyName = "socket_back"; - - // Variables for transform to be specified - float trans_x = 0, trans_y = 0, trans_z = 0, rot_x = -PI/2, rot_y = 0, rot_z = 0; - - meshWrap->QuerySceneNode()->SetParent( baseMesh->QuerySceneNode ()); - socket->SetMeshWrapper( meshWrap ); - - socket->SetTransform( csTransform(csZRotMatrix3(rot_z)*csYRotMatrix3(rot_y)*csXRotMatrix3(rot_x), csVector3(trans_x,trans_y,trans_z)) ); - - usedSlots.PushSmart("back"); - + ProcessAttach(meshWrap, socket); } void psCharAppearance::RemoveRider(GEMClientActor* rider) { - csRef<iSpriteCal3DSocket> socket = state->FindSocket("back"); - if ( !socket ) - { - Error1("\"back\" socket not found."); - return; - } - - csRef<iMeshWrapper> meshWrap = rider->pcmesh; - csVector3 rpos = rider->GetPosition(); float rrot = rider->GetRotation(); + + Detach("back", false); - meshWrap->QuerySceneNode()->SetParent(0); - meshWrap->GetMovable()->SetSector(baseMesh->GetMovable()->GetSectors()->Get(0)); - + rider->pcmesh->GetMovable()->SetSector(baseMesh->GetMovable()->GetSectors()->Get(0)); rider->SetPosition(rpos, rrot, rider->GetSector()); - - socket->SetMeshWrapper(NULL); - usedSlots.Delete("back"); } void psCharAppearance::ApplyEquipment(csString& equipment) @@ -612,16 +589,24 @@ void psCharAppearance::ProcessAttach(csRef<iMeshFactoryWrapper> factory, const char* meshFactName, csRef<iSpriteCal3DSocket> socket) { csRef<iMeshWrapper> meshWrap = engine->CreateMeshWrapper( factory, meshFactName ); - meshWrap->GetFlags().Set(CS_ENTITY_NODECAL); - const char* socketName = socket->GetName(); + ProcessAttach(meshWrap, socket); + + psengine->GetCelClient()->HandleItemEffect(factory->QueryObject()->GetName(), socket->GetMeshWrapper(), false, socket->GetName(), &effectids, &lightids); +} + +void psCharAppearance::ProcessAttach(csRef<iMeshWrapper> meshWrap, csRef<iSpriteCal3DSocket> socket) +{ + meshWrap->GetFlags().Set(CS_ENTITY_NODECAL); + const char* socketName = socket->GetName(); + // Given a socket name of "righthand", we're looking for a key in the form of "socket_righthand" csString keyName = "socket_"; keyName += socketName; // Variables for transform to be specified float trans_x = 0, trans_y = 0.0, trans_z = 0, rot_x = -PI/2, rot_y = 0, rot_z = 0; - csRef<iObjectIterator> it = factory->QueryObject()->GetIterator(); + csRef<iObjectIterator> it = meshWrap->GetFactory()->QueryObject()->GetIterator(); while ( it->HasNext() ) { @@ -637,8 +622,6 @@ socket->SetTransform( csTransform(csZRotMatrix3(rot_z)*csYRotMatrix3(rot_y)*csXRotMatrix3(rot_x), csVector3(trans_x,trans_y,trans_z)) ); usedSlots.PushSmart(socketName); - - psengine->GetCelClient()->HandleItemEffect(factory->QueryObject()->GetName(), socket->GetMeshWrapper(), false, socketName, &effectids, &lightids); } void psCharAppearance::ProcessAttach(csRef<iMaterialWrapper> material, const char* materialName, const char* partName) @@ -875,7 +858,7 @@ } -bool psCharAppearance::Detach(const char* socketName ) +bool psCharAppearance::Detach(const char* socketName, bool removeItem ) { if (!socketName) { @@ -899,7 +882,8 @@ { meshWrap->QuerySceneNode()->SetParent (0); socket->SetMeshWrapper( NULL ); - engine->RemoveObject( meshWrap ); + if(removeItem) + engine->RemoveObject( meshWrap ); } usedSlots.Delete(socketName); Modified: trunk/src/client/charapp.h =================================================================== --- trunk/src/client/charapp.h 2009-07-19 19:15:08 UTC (rev 4078) +++ trunk/src/client/charapp.h 2009-07-19 19:26:42 UTC (rev 4079) @@ -194,7 +194,7 @@ * * @return True if the item was successfully removed from the socket. */ - bool Detach(const char* socketName); + bool Detach(const char* socketName, bool removeItem = true); /** Set the default material back onto a particular part of the model. * @param part The part we want to set the default material back on. @@ -209,6 +209,7 @@ void DefaultMesh(const char* part); void ProcessAttach(csRef<iMeshFactoryWrapper> factory, const char* meshFactName, csRef<iSpriteCal3DSocket> socket); + void ProcessAttach(csRef<iMeshWrapper> meshWrap, csRef<iSpriteCal3DSocket> socket); void ProcessAttach(csRef<iMaterialWrapper> material, const char* materialName, const char* partName); csRef<iMeshWrapper> baseMesh; // The mesh that is our base model. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-07-23 16:37:32
|
Revision: 4104 http://planeshift.svn.sourceforge.net/planeshift/?rev=4104&view=rev Author: mgist Date: 2009-07-23 16:37:30 +0000 (Thu, 23 Jul 2009) Log Message: ----------- - Fixed copy/paste error in GEMClientActor::Pos() - Fixed entity labels popping up before being hidden by the range check. Modified Paths: -------------- trunk/src/client/entitylabels.cpp trunk/src/client/pscelclient.cpp Modified: trunk/src/client/entitylabels.cpp =================================================================== --- trunk/src/client/entitylabels.cpp 2009-07-23 16:09:55 UTC (rev 4103) +++ trunk/src/client/entitylabels.cpp 2009-07-23 16:37:30 UTC (rev 4104) @@ -321,6 +321,9 @@ // Update text SetObjectText(object); + + // Set to invisible by default. + ShowLabelOfObject(object, false); } Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-07-23 16:09:55 UTC (rev 4103) +++ trunk/src/client/pscelclient.cpp 2009-07-23 16:37:30 UTC (rev 4104) @@ -1549,7 +1549,6 @@ if(linmove) { - csVector3 pos(0.0f); float yrot; iSector* sector; linmove->GetLastPosition (pos, yrot, sector); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ko...@us...> - 2009-08-27 16:00:29
|
Revision: 4269 http://planeshift.svn.sourceforge.net/planeshift/?rev=4269&view=rev Author: kougaro Date: 2009-08-27 16:00:22 +0000 (Thu, 27 Aug 2009) Log Message: ----------- Small fix to pscelclient, plus a change so that the camera is not reinitialized when teleporting and so Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscamera.h trunk/src/client/pscelclient.cpp trunk/src/client/psengine.cpp Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-08-27 03:30:20 UTC (rev 4268) +++ trunk/src/client/pscamera.cpp 2009-08-27 16:00:22 UTC (rev 4269) @@ -370,7 +370,7 @@ bool psCamera::InitializeView(GEMClientActor* entity) { - actor = entity; + SetActor(entity); lastCameraMode = CAMERA_ERR; SetCameraMode(CAMERA_FIRST_PERSON); @@ -436,6 +436,11 @@ return true; } +void psCamera::SetActor(GEMClientActor* entity) +{ + actor = entity; +} + bool psCamera::LoadFromFile(bool useDefault, bool overrideCurrent) { csString fileName = "/planeshift/userdata/options/camera.xml"; Modified: trunk/src/client/pscamera.h =================================================================== --- trunk/src/client/pscamera.h 2009-08-27 03:30:20 UTC (rev 4268) +++ trunk/src/client/pscamera.h 2009-08-27 16:00:22 UTC (rev 4269) @@ -104,6 +104,11 @@ */ bool InitializeView(GEMClientActor* entity); + /** Set the actor the camera is following + * @param entity the actor for the view + */ + void SetActor(GEMClientActor* entity); + /** loads the camera settings from a file * @param useDefault if true, use the default config file even if the normal exists * @param overrideCurrent if true, change current camera settings with loaded data Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-08-27 03:30:20 UTC (rev 4268) +++ trunk/src/client/pscelclient.cpp 2009-08-27 16:00:22 UTC (rev 4269) @@ -269,21 +269,6 @@ mesg.sector = psengine->GetEngine()->FindSector(mesg.sectorName); } - // We already have an entity with this id so we must have missed the remove object message - // so delete and remake it. - GEMClientObject* found = (GEMClientObject*) FindObject(mesg.entityid); - if (found) - { - if (found == local_player) - { - HandleMainActor( mesg ); - return; - } - - Debug3(LOG_CELPERSIST, 0, "Found existing object <%s> with %s, removing.\n", found->GetName(), ShowID(mesg.entityid)); - RemoveObject(found); - } - if (ignore_others) { if (local_player != 0) @@ -294,6 +279,8 @@ if (!mesg.control) return; } + + GEMClientObject* found = FindObject(mesg.entityid); GEMClientActor* actor = new GEMClientActor( this, mesg ); @@ -301,9 +288,8 @@ if ( actor->control || (GetMainPlayer() && mesg.entityid == GetMainPlayer()->GetEID()) ) { // cache the camera current view - int currentMode = psengine->GetPSCamera()->GetCameraMode(); psengine->SetMainActor(actor); - psengine->GetPSCamera()->SetCameraMode(currentMode); + SetPlayerReady(true); // This triggers the server to update our proxlist local_player->SendDRUpdate(PRIORITY_LOW,GetClientDR()->GetMsgStrings()); @@ -312,6 +298,14 @@ psengine->UpdateWindowTitleInformations(); } + // We already have an entity with this id so we must have missed the remove object message, + // or an update has been sent. delete the now outdated object + if( found) + { + Debug3(LOG_CELPERSIST, 0, "Found existing object <%s> with %s, removing.\n", found->GetName(), ShowID(mesg.entityid)); + RemoveObject(found); + } + entities.Push(actor); entities_hash.Put(actor->GetEID(), actor); } Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-08-27 03:30:20 UTC (rev 4268) +++ trunk/src/client/psengine.cpp 2009-08-27 16:00:22 UTC (rev 4269) @@ -1240,7 +1240,7 @@ CS_ASSERT(mainActor); GetCelClient()->SetMainActor(mainActor); GetCharControl()->GetMovementManager()->SetActor(mainActor); - GetPSCamera()->InitializeView(mainActor); + GetPSCamera()->SetActor(mainActor); } // ---------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-08-31 22:10:39
|
Revision: 4298 http://planeshift.svn.sourceforge.net/planeshift/?rev=4298&view=rev Author: weltall2 Date: 2009-08-31 22:10:31 +0000 (Mon, 31 Aug 2009) Log Message: ----------- fixes for unitialized variables patch by lanarel Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscamera.h Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-08-31 21:35:02 UTC (rev 4297) +++ trunk/src/client/pscamera.cpp 2009-08-31 22:10:31 UTC (rev 4298) @@ -73,27 +73,28 @@ view = csPtr<iView> (new csView(psengine->GetEngine(), psengine->GetG3D())); actor = NULL; + race = NULL; + npcModeTarget = NULL; vc = csQueryRegistry<iVirtualClock> (psengine->GetObjectRegistry()); cdsys = csQueryRegistry<iCollideSystem> (psengine->GetObjectRegistry ()); + prevTicks = 0; + // most of these are default values that will be overwritten firstPersonPositionOffset = csVector3(0, 1, 0); thirdPersonPositionOffset = csVector3(0, 1, 3); pitchVelocity = 0.0f; yawVelocity = 0.0f; + //cameradata fields are initialized to 0 in the constructor + //change values here that should be non-zero. camData[CAMERA_FIRST_PERSON].springCoef = 10.0f; camData[CAMERA_FIRST_PERSON].InertialDampeningCoef = 0.1f; camData[CAMERA_FIRST_PERSON].springLength = 0.01f; camData[CAMERA_FIRST_PERSON].maxDistance = 1.0f; camData[CAMERA_FIRST_PERSON].minDistance = 1.0f; camData[CAMERA_FIRST_PERSON].distance = camData[CAMERA_FIRST_PERSON].minDistance; - camData[CAMERA_FIRST_PERSON].turnSpeed = 0.0f; - camData[CAMERA_FIRST_PERSON].swingCoef = 0.0f; - camData[CAMERA_FIRST_PERSON].defaultPitch = camData[CAMERA_FIRST_PERSON].pitch = 0.0f; - camData[CAMERA_FIRST_PERSON].defaultRoll = camData[CAMERA_FIRST_PERSON].roll = 0.0f; - camData[CAMERA_FIRST_PERSON].defaultYaw = camData[CAMERA_FIRST_PERSON].yaw = 0.0f; camData[CAMERA_THIRD_PERSON].springCoef = 3.5f; camData[CAMERA_THIRD_PERSON].InertialDampeningCoef = 0.25f; @@ -101,11 +102,6 @@ camData[CAMERA_THIRD_PERSON].maxDistance = 15.0f; camData[CAMERA_THIRD_PERSON].minDistance = 1.0f; camData[CAMERA_THIRD_PERSON].distance = camData[CAMERA_THIRD_PERSON].minDistance; - camData[CAMERA_THIRD_PERSON].turnSpeed = 0.0f; - camData[CAMERA_THIRD_PERSON].swingCoef = 0.0f; - camData[CAMERA_THIRD_PERSON].defaultPitch = camData[CAMERA_THIRD_PERSON].pitch = 0.0f; - camData[CAMERA_THIRD_PERSON].defaultRoll = camData[CAMERA_THIRD_PERSON].roll = 0.0f; - camData[CAMERA_THIRD_PERSON].defaultYaw = camData[CAMERA_THIRD_PERSON].yaw = 0.0f; camData[CAMERA_M64_THIRD_PERSON].springCoef = 3.5f; camData[CAMERA_M64_THIRD_PERSON].InertialDampeningCoef = 0.25f; @@ -114,10 +110,6 @@ camData[CAMERA_M64_THIRD_PERSON].maxDistance = 6.0f; camData[CAMERA_M64_THIRD_PERSON].distance = camData[CAMERA_M64_THIRD_PERSON].minDistance; camData[CAMERA_M64_THIRD_PERSON].turnSpeed = 1.0f; - camData[CAMERA_M64_THIRD_PERSON].swingCoef = 0.0f; - camData[CAMERA_M64_THIRD_PERSON].defaultPitch = camData[CAMERA_M64_THIRD_PERSON].pitch = 0.0f; - camData[CAMERA_M64_THIRD_PERSON].defaultRoll = camData[CAMERA_M64_THIRD_PERSON].roll = 0.0f; - camData[CAMERA_M64_THIRD_PERSON].defaultYaw = camData[CAMERA_M64_THIRD_PERSON].yaw = 0.0f; camData[CAMERA_LARA_THIRD_PERSON].springCoef = 3.5f; camData[CAMERA_LARA_THIRD_PERSON].InertialDampeningCoef = 0.25f; @@ -127,9 +119,6 @@ camData[CAMERA_LARA_THIRD_PERSON].distance = camData[CAMERA_LARA_THIRD_PERSON].minDistance; camData[CAMERA_LARA_THIRD_PERSON].turnSpeed = 1.0f; camData[CAMERA_LARA_THIRD_PERSON].swingCoef = 0.7f; - camData[CAMERA_LARA_THIRD_PERSON].defaultPitch = camData[CAMERA_LARA_THIRD_PERSON].pitch = 0.0f; - camData[CAMERA_LARA_THIRD_PERSON].defaultRoll = camData[CAMERA_LARA_THIRD_PERSON].roll = 0.0f; - camData[CAMERA_LARA_THIRD_PERSON].defaultYaw = camData[CAMERA_LARA_THIRD_PERSON].yaw = 0.0f; camData[CAMERA_FREE].springCoef = 3.5f; camData[CAMERA_FREE].InertialDampeningCoef = 0.25f; @@ -137,47 +126,15 @@ camData[CAMERA_FREE].minDistance = 2.0f; camData[CAMERA_FREE].maxDistance = 16.0f; camData[CAMERA_FREE].distance = camData[CAMERA_FREE].minDistance; - camData[CAMERA_FREE].turnSpeed = 0.0f; - camData[CAMERA_FREE].swingCoef = 0.0f; - camData[CAMERA_FREE].defaultPitch = camData[CAMERA_FREE].pitch = 0.0f; - camData[CAMERA_FREE].defaultRoll = camData[CAMERA_FREE].roll = 0.0f; - camData[CAMERA_FREE].defaultYaw = camData[CAMERA_FREE].yaw = 0.0f; - camData[CAMERA_ACTUAL_DATA].springCoef = 0.0f; - camData[CAMERA_ACTUAL_DATA].InertialDampeningCoef = 0.0; camData[CAMERA_ACTUAL_DATA].springLength = 0.01f; - camData[CAMERA_ACTUAL_DATA].minDistance = 0.0f; - camData[CAMERA_ACTUAL_DATA].maxDistance = 0.0f; - camData[CAMERA_ACTUAL_DATA].distance = camData[CAMERA_ACTUAL_DATA].minDistance; - camData[CAMERA_ACTUAL_DATA].turnSpeed = 0.0f; - camData[CAMERA_ACTUAL_DATA].swingCoef = 0.0f; - camData[CAMERA_ACTUAL_DATA].defaultPitch = camData[CAMERA_ACTUAL_DATA].pitch = 0.0f; - camData[CAMERA_ACTUAL_DATA].defaultRoll = camData[CAMERA_ACTUAL_DATA].roll = 0.0f; - camData[CAMERA_ACTUAL_DATA].defaultYaw = camData[CAMERA_ACTUAL_DATA].yaw = 0.0f; - camData[CAMERA_LAST_ACTUAL].springCoef = 0.0f; - camData[CAMERA_LAST_ACTUAL].InertialDampeningCoef = 0.0; - camData[CAMERA_LAST_ACTUAL].springLength = 0.01f; - camData[CAMERA_LAST_ACTUAL].minDistance = 0.0f; - camData[CAMERA_LAST_ACTUAL].maxDistance = 0.0f; - camData[CAMERA_LAST_ACTUAL].distance = camData[CAMERA_LAST_ACTUAL].minDistance; - camData[CAMERA_LAST_ACTUAL].turnSpeed = 0.0f; - camData[CAMERA_LAST_ACTUAL].swingCoef = 0.0f; - camData[CAMERA_LAST_ACTUAL].defaultPitch = camData[CAMERA_LAST_ACTUAL].pitch = 0.0f; - camData[CAMERA_LAST_ACTUAL].defaultRoll = camData[CAMERA_LAST_ACTUAL].roll = 0.0f; - camData[CAMERA_LAST_ACTUAL].defaultYaw = camData[CAMERA_LAST_ACTUAL].yaw = 0.0f; - camData[CAMERA_TRANSITION].springCoef = 3.5f; camData[CAMERA_TRANSITION].InertialDampeningCoef = 0.25f; camData[CAMERA_TRANSITION].springLength = 0.01f; camData[CAMERA_TRANSITION].minDistance = 1.0f; camData[CAMERA_TRANSITION].maxDistance = 16.0f; camData[CAMERA_TRANSITION].distance = camData[CAMERA_TRANSITION].minDistance; - camData[CAMERA_TRANSITION].turnSpeed = 0.0f; - camData[CAMERA_TRANSITION].swingCoef = 0.0f; - camData[CAMERA_TRANSITION].defaultPitch = camData[CAMERA_TRANSITION].pitch = 0.0f; - camData[CAMERA_TRANSITION].defaultRoll = camData[CAMERA_TRANSITION].roll = 0.0f; - camData[CAMERA_TRANSITION].defaultYaw = camData[CAMERA_TRANSITION].yaw = 0.0f; camData[CAMERA_NPCTALK].springCoef = 3.5f; camData[CAMERA_NPCTALK].InertialDampeningCoef = 0.25f; @@ -185,11 +142,6 @@ camData[CAMERA_NPCTALK].minDistance = 0.50f; camData[CAMERA_NPCTALK].maxDistance = 15.0f; camData[CAMERA_NPCTALK].distance = camData[CAMERA_NPCTALK].minDistance; - camData[CAMERA_NPCTALK].turnSpeed = 0.0f; - camData[CAMERA_NPCTALK].swingCoef = 0.0f; - camData[CAMERA_NPCTALK].defaultPitch = camData[CAMERA_NPCTALK].pitch = 0.0f; - camData[CAMERA_NPCTALK].defaultRoll = camData[CAMERA_NPCTALK].roll = 0.0f; - camData[CAMERA_NPCTALK].defaultYaw = camData[CAMERA_NPCTALK].yaw = 0.0f; camData[CAMERA_COLLISION].springCoef = 1.0f; camData[CAMERA_COLLISION].InertialDampeningCoef = 0.25f; @@ -197,27 +149,14 @@ camData[CAMERA_COLLISION].minDistance = 2.0f; camData[CAMERA_COLLISION].maxDistance = 16.0f; camData[CAMERA_COLLISION].distance = camData[CAMERA_COLLISION].minDistance; - camData[CAMERA_COLLISION].turnSpeed = 0.0f; - camData[CAMERA_COLLISION].swingCoef = 0.0f; - camData[CAMERA_COLLISION].defaultPitch = camData[CAMERA_COLLISION].pitch = 0.0f; - camData[CAMERA_COLLISION].defaultRoll = camData[CAMERA_COLLISION].roll = 0.0f; - camData[CAMERA_COLLISION].defaultYaw = camData[CAMERA_COLLISION].yaw = 0.0f; - camData[CAMERA_ERR].springCoef = 0.0f; - camData[CAMERA_ERR].InertialDampeningCoef = 0.0; camData[CAMERA_ERR].springLength = 0.01f; - camData[CAMERA_ERR].minDistance = 0.0f; - camData[CAMERA_ERR].maxDistance = 0.0f; - camData[CAMERA_ERR].distance = camData[CAMERA_ERR].minDistance; - camData[CAMERA_ERR].turnSpeed = 0.0f; - camData[CAMERA_ERR].swingCoef = 0.0f; - camData[CAMERA_ERR].defaultPitch = camData[CAMERA_ERR].pitch = 0.0f; - camData[CAMERA_ERR].defaultRoll = camData[CAMERA_ERR].roll = 0.0f; - camData[CAMERA_ERR].defaultYaw = camData[CAMERA_ERR].yaw = 0.0f; currCameraMode = CAMERA_ERR; + lastCameraMode = CAMERA_ERR; transitionThresholdSquared = 1.0f; + inTransitionPhase = false; cameraHasBeenPositioned = false; hasCollision = false; @@ -231,7 +170,11 @@ useCameraCD = false; useNPCCam = false; + npcModePosition = csVector3(0, 0, 0); + npcOldRot = 0.0f; + vel = 0.0f; + lastActorSector = 0; cameraInitialized = false; Modified: trunk/src/client/pscamera.h =================================================================== --- trunk/src/client/pscamera.h 2009-08-31 21:35:02 UTC (rev 4297) +++ trunk/src/client/pscamera.h 2009-08-31 22:10:31 UTC (rev 4298) @@ -489,6 +489,20 @@ float springLength; float swingCoef; + + //initialize all here: + CameraData() + { + worldPos.Set(0.0f,0.0f,0.0f); + worldTar.Set(0.0f,0.0f,0.0f); + worldUp.Set(0.0f,0.0f,0.0f); + pitch = yaw = roll = 0; + defaultPitch = defaultYaw = defaultRoll = 0.0f; + distance = minDistance = maxDistance = 0.0f; + turnSpeed = 0.0f; + springCoef = InertialDampeningCoef = springLength = 0.0f; + swingCoef=0.0f; + } }; float CalcSpringCoef(float springyness, float scale) const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-09-08 23:24:08
|
Revision: 4336 http://planeshift.svn.sourceforge.net/planeshift/?rev=4336&view=rev Author: kennygraunke Date: 2009-09-08 23:24:00 +0000 (Tue, 08 Sep 2009) Log Message: ----------- Remove -ignore_others command line option, added in 2005, which intended to work around client crashes. Nobody wants an RPG with only one entity. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h trunk/src/client/psengine.cpp trunk/src/client/psengine.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-09-08 21:44:04 UTC (rev 4335) +++ trunk/src/client/pscelclient.cpp 2009-09-08 23:24:00 UTC (rev 4336) @@ -94,7 +94,7 @@ psCelClient *GEMClientObject::cel = NULL; -psCelClient::psCelClient() : ignore_others(false) +psCelClient::psCelClient() { requeststatus = 0; @@ -269,17 +269,6 @@ mesg.sector = psengine->GetEngine()->FindSector(mesg.sectorName); } - if (ignore_others) - { - if (local_player != 0) - return; - - // From here on, we have no main character - // Ignore everything that isn't controllable - if (!mesg.control) - return; - } - GEMClientObject* found = FindObject(mesg.entityid); GEMClientActor* actor = new GEMClientActor( this, mesg ); @@ -882,10 +871,7 @@ case MSGTYPE_PERSIST_ITEM: { - if (!ignore_others) - { - newItemQueue.Push(me); - } + newItemQueue.Push(me); break; } Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-09-08 21:44:04 UTC (rev 4335) +++ trunk/src/client/pscelclient.h 2009-09-08 23:24:00 UTC (rev 4336) @@ -135,8 +135,6 @@ /// Load items that have effects attached to them into the effectItems array. void LoadEffectItems(); - bool ignore_others; - csRedBlackTreeMap<csString, csRef<InstanceObject> > instanceObjects; csRef<iMeshFactoryWrapper> nullfact; @@ -201,10 +199,6 @@ int GetRequestStatus() { return requeststatus; } - void IgnoreOthers(bool state) { ignore_others = state; } - - bool IsIgnoringOthers() { return ignore_others; } - /// Add one new actor or item entity from the queue. void CheckEntityQueues(); /// Add all new entities on the queue. Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-09-08 21:44:04 UTC (rev 4335) +++ trunk/src/client/psengine.cpp 2009-09-08 23:24:00 UTC (rev 4336) @@ -76,7 +76,6 @@ #include "iclient/isoundmngr.h" #include <csver.h> -#include <csutil/cmdline.h> #include <cstool/collider.h> #include <cstool/initapp.h> #include <csutil/event.h> @@ -338,7 +337,6 @@ PS_QUERY_PLUGIN (cfgmgr, iConfigManager, "iConfigManager"); PS_QUERY_PLUGIN (g3d, iGraphics3D, "iGraphics3D"); PS_QUERY_PLUGIN (vc, iVirtualClock, "iVirtualClock"); - PS_QUERY_PLUGIN (cmdline, iCommandLineParser, "iCommandLineParser"); g2d = g3d->GetDriver2D(); @@ -664,11 +662,6 @@ zonehandler = csPtr<ZoneHandler> (new ZoneHandler(netmanager->GetMsgHandler(),object_reg,celclient)); questionclient = new psQuestionClient(GetMsgHandler(), object_reg); - if (cmdline) - { - celclient->IgnoreOthers(cmdline->GetBoolOption("ignore_others")); - } - zonehandler->SetLoadAllMaps(GetConfig()->GetBool("PlaneShift.Client.Loading.AllMaps",false)); zonehandler->SetKeepMapsLoaded(GetConfig()->GetBool("PlaneShift.Client.Loading.KeepMaps",false)); Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-09-08 21:44:04 UTC (rev 4335) +++ trunk/src/client/psengine.h 2009-09-08 23:24:00 UTC (rev 4336) @@ -378,7 +378,6 @@ csRef<iEventQueue> queue; ///< Event Queue csRef<iVirtualClock> vc; ///< Clock csRef<iDocumentSystem> xmlparser; ///< XML Parser - csRef<iCommandLineParser> cmdline; ///< Command line parser csRef<iStringSet> stringset; csRandomGen random; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-09 18:56:16
|
Revision: 4340 http://planeshift.svn.sourceforge.net/planeshift/?rev=4340&view=rev Author: mgist Date: 2009-09-09 18:56:09 +0000 (Wed, 09 Sep 2009) Log Message: ----------- - Fixes for shader change. Modified Paths: -------------- trunk/src/client/charapp.cpp trunk/src/client/charapp.h trunk/src/client/psclientchar.cpp trunk/src/client/psclientchar.h Modified: trunk/src/client/charapp.cpp =================================================================== --- trunk/src/client/charapp.cpp 2009-09-09 17:11:23 UTC (rev 4339) +++ trunk/src/client/charapp.cpp 2009-09-09 18:56:09 UTC (rev 4340) @@ -259,7 +259,7 @@ } -void psCharAppearance::HairColor(csVector3& color) +void psCharAppearance::HairColor(csVector4& color) { if ( hairMesh.Length() == 0 ) { @@ -321,7 +321,7 @@ } } -void psCharAppearance::EyeColor(csVector3& color) +void psCharAppearance::EyeColor(csVector4& color) { eyeShader = color; iShaderVariableContext* context_eyes; @@ -625,26 +625,54 @@ void psCharAppearance::DefaultMesh(const char* part) { const char * defaultPart = NULL; - /* First we detach every mesh that match the partPattern */ - for (int idx=0; idx < stateFactory->GetMeshCount(); idx++) + + if(stateFactory && state) { - const char * meshName = stateFactory->GetMeshName( idx ); - if (strstr(meshName, part)) + /* First we detach every mesh that match the partPattern */ + for (int idx=0; idx < stateFactory->GetMeshCount(); idx++) { - state->DetachCoreMesh( meshName ); - if (stateFactory->IsMeshDefault(idx)) + const char * meshName = stateFactory->GetMeshName( idx ); + if (strstr(meshName, part)) { - defaultPart = meshName; + state->DetachCoreMesh( meshName ); + if (stateFactory->IsMeshDefault(idx)) + { + defaultPart = meshName; + } } } + + if (!defaultPart) + { + return; + } + + state->AttachCoreMesh( defaultPart ); } + else if(animeshFactory && animeshObject) + { + if (!defaultPart) + { + return; + } - if (!defaultPart) - { - return; + for ( size_t idx=0; idx < animeshFactory->GetSubMeshCount(); idx++) + { + const char* meshName = animeshFactory->GetSubMesh(idx)->GetName(); + if(meshName) + { + if (strstr(meshName, part)) + { + animeshObject->GetSubMesh(idx)->SetRendering(false); + } + + if (!strcmp(meshName, defaultPart)) + { + animeshObject->GetSubMesh(idx)->SetRendering(true); + } + } + } } - - state->AttachCoreMesh( defaultPart ); } @@ -689,22 +717,51 @@ { csString newPartParsed = ParseStrings(partPattern, newPart); - // If the new mesh cannot be found then do nothing. - int newMeshAvailable = stateFactory->FindMeshName(newPartParsed); - if ( newMeshAvailable == -1 ) - return false; + if(stateFactory && state) + { + // If the new mesh cannot be found then do nothing. + int newMeshAvailable = stateFactory->FindMeshName(newPartParsed); + if ( newMeshAvailable == -1 ) + return false; - /* First we detach every mesh that match the partPattern */ - for (int idx=0; idx < stateFactory->GetMeshCount(); idx++) + /* First we detach every mesh that match the partPattern */ + for (int idx=0; idx < stateFactory->GetMeshCount(); idx++) + { + const char * meshName = stateFactory->GetMeshName( idx ); + if (strstr(meshName,partPattern)) + { + state->DetachCoreMesh( meshName ); + } + } + + state->AttachCoreMesh( newPartParsed.GetData() ); + } + else if(animeshFactory && animeshObject) { - const char * meshName = stateFactory->GetMeshName( idx ); - if (strstr(meshName,partPattern)) + // If the new mesh cannot be found then do nothing. + size_t newMeshAvailable = animeshFactory->FindSubMesh(newPartParsed); + if ( newMeshAvailable == (size_t)-1 ) + return false; + + /* First we detach every mesh that match the partPattern */ + for ( size_t idx=0; idx < animeshFactory->GetSubMeshCount(); idx++) { - state->DetachCoreMesh( meshName ); + const char* meshName = animeshFactory->GetSubMesh(idx)->GetName(); + if(meshName) + { + if (strstr(meshName, partPattern)) + { + animeshObject->GetSubMesh(idx)->SetRendering(false); + } + + if (!strcmp(meshName, newPartParsed)) + { + animeshObject->GetSubMesh(idx)->SetRendering(true); + } + } } } - state->AttachCoreMesh( newPartParsed.GetData() ); return true; } Modified: trunk/src/client/charapp.h =================================================================== --- trunk/src/client/charapp.h 2009-09-09 17:11:23 UTC (rev 4339) +++ trunk/src/client/charapp.h 2009-09-09 18:56:09 UTC (rev 4340) @@ -92,14 +92,14 @@ void BeardMesh(csString& submesh); /** Set the colour of the hair. - * @param shader the R,G,B value of the shader to use on the hair. + * @param shader the R,G,B,A value of the shader to use on the hair. */ - void HairColor(csVector3 &shader); + void HairColor(csVector4 &shader); /** Set the colour of the eyes. - * @param shader the R,G,B value of the shader to use on the eyes. + * @param shader the R,G,B,A value of the shader to use on the eyes. */ - void EyeColor(csVector3 &shader); + void EyeColor(csVector4 &shader); /** Toggle the hair mesh on and off. * @param flag True if we want to show the hair. False if we want to hide it. @@ -256,8 +256,8 @@ csString hairMesh; ///< Default hair mesh. csString beardMesh; ///< Beard mesh. - csVector3 eyeShader; ///< Default eye colour. - csVector3 hairShader; ///< Default hair colour. + csVector4 eyeShader; ///< Default eye colour. + csVector4 hairShader; ///< Default hair colour. bool hairAttached; ///< Flag if hair is on/off bool beardAttached; ///< Flag if beard is on/off. Modified: trunk/src/client/psclientchar.cpp =================================================================== --- trunk/src/client/psclientchar.cpp 2009-09-09 17:11:23 UTC (rev 4339) +++ trunk/src/client/psclientchar.cpp 2009-09-09 18:56:09 UTC (rev 4340) @@ -82,9 +82,14 @@ location = ConvertTraitLocationString(node->GetAttributeValue( "loc" )); csString shaderColours = node->GetAttributeValue("shader"); if ( shaderColours.Length() > 0 ) + { sscanf( shaderColours.GetData(), "%f,%f,%f", &shader.x, &shader.y, &shader.z ); + shader.w = 1.0f; + } else - shader = csVector3(0,0,0); + { + shader = csVector4(0,0,0); + } material = psengine->FindCommonString(cstr_id_material); mesh = psengine->FindCommonString(cstr_id_mesh); Modified: trunk/src/client/psclientchar.h =================================================================== --- trunk/src/client/psclientchar.h 2009-09-09 17:11:23 UTC (rev 4339) +++ trunk/src/client/psclientchar.h 2009-09-09 18:56:09 UTC (rev 4340) @@ -71,7 +71,7 @@ csString mesh; csString material; csString subMesh; - csVector3 shader; ///< The shader colour set for this trait. + csVector4 shader; ///< The shader colour set for this trait. }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-11 18:13:25
|
Revision: 4349 http://planeshift.svn.sourceforge.net/planeshift/?rev=4349&view=rev Author: mgist Date: 2009-09-11 18:13:17 +0000 (Fri, 11 Sep 2009) Log Message: ----------- - Apply item material during load. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-09-11 17:58:58 UTC (rev 4348) +++ trunk/src/client/pscelclient.cpp 2009-09-11 18:13:17 UTC (rev 4349) @@ -2039,6 +2039,7 @@ Debug3(LOG_CELPERSIST, 0, "Item %s(%s) Received", mesg.name.GetData(), ShowID(mesg.eid)); type = mesg.type; factName = mesg.factname; + matName = mesg.matname; solid = 0; post_load->pos = mesg.pos; post_load->xRot = mesg.xRot; @@ -2070,7 +2071,7 @@ csRef<iMeshFactoryWrapper> factory; // Check if an instance of the mesh already exists. - instance = cel->FindInstanceObject(factName); + instance = cel->FindInstanceObject(factName+matName); if(!instance.IsValid()) { bool failed = false; @@ -2086,13 +2087,30 @@ return true; } + if(!matName.IsEmpty()) + { + csRef<iMaterialWrapper> material = psengine->GetLoader()->LoadMaterial(matName, &failed); + if(!material.IsValid()) + { + if(failed) + { + Error2("Unable to load item with material %s!\n", matName.GetData()); + psengine->UnregisterDelayedLoader(this); + } + + return true; + } + + factory->GetMeshObjectFactory()->SetMaterialWrapper(material); + } + // Create the mesh. instance = csPtr<InstanceObject>(new InstanceObject()); instance->pcmesh = factory->CreateMeshWrapper(); instance->pcmesh->GetFlags().Set(CS_ENTITY_NODECAL | CS_ENTITY_NOHITBEAM); psengine->GetEngine()->GetMeshes()->Add(instance->pcmesh); psengine->GetEngine()->PrecacheMesh(instance->pcmesh); - cel->AddInstanceObject(factName, instance); + cel->AddInstanceObject(factName+matName, instance); // Set appropriate shader. csRef<iShaderManager> shman = csQueryRegistry<iShaderManager>(psengine->GetObjectRegistry()); Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-09-11 17:58:58 UTC (rev 4348) +++ trunk/src/client/pscelclient.h 2009-09-11 18:13:17 UTC (rev 4349) @@ -632,6 +632,7 @@ }; PostLoadData* post_load; + csString matName; }; /** An action location on the client. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-09-14 20:20:27
|
Revision: 4356 http://planeshift.svn.sourceforge.net/planeshift/?rev=4356&view=rev Author: kennygraunke Date: 2009-09-14 20:20:17 +0000 (Mon, 14 Sep 2009) Log Message: ----------- Reworked psPersistActor and psPersistItem message handling. * Fixed bugs: - Receiving a psPersistActor message for the main actor prevented DR updates, and reset the actor's position to the server side one. (one way to trigger this was /setlabelcolor me npc) * Cleaning: - Removed HandleMainActor. While most actors were recreated from scratch, this code path reused the same GEMClientActor, reinitializing a number of of fields with data from the psPersistActor message. Tristan and I wondered why this was only done for the client controlled actor (rather than all), and we disliked having two code paths which could easily get out of sync. Now, all entities are recreated. The client controlled actor -does- need a special case: the client's DRcounter and position are newer than those sent by the server. GEMClientActor::CopyNewerData saves these fields. - Since this means the controlled actor is no longer first in the list, entity labels needed some updates. - Removed GEMClientActor's "ready" flag (only used for the main player), and "control" flag (unused until Tristan's recent work). - psCelClient and GEMClientActor are no longer friend classes. Modified Paths: -------------- trunk/src/client/authentclient.cpp trunk/src/client/entitylabels.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h trunk/src/client/psengine.cpp Modified: trunk/src/client/authentclient.cpp =================================================================== --- trunk/src/client/authentclient.cpp 2009-09-14 19:49:06 UTC (rev 4355) +++ trunk/src/client/authentclient.cpp 2009-09-14 20:20:17 UTC (rev 4356) @@ -153,8 +153,6 @@ void psAuthenticationClient::ShowError() { - psengine->GetCelClient()->SetPlayerReady(false); - pawsLoginWindow* loginWdg = (pawsLoginWindow*)PawsManager::GetSingleton().FindWidget("LoginWindow"); //If we have logged in Modified: trunk/src/client/entitylabels.cpp =================================================================== --- trunk/src/client/entitylabels.cpp 2009-09-14 19:49:06 UTC (rev 4355) +++ trunk/src/client/entitylabels.cpp 2009-09-14 20:20:17 UTC (rev 4356) @@ -345,7 +345,11 @@ if(MatchVisibility(object->GetObjectType(), LABEL_NEVER)) return; - + + // The controlled character never shows a label. + if (object == celClient->GetMainPlayer()) + return; + if(object->GetEntityLabel()) { RepaintObjectLabel( object ); @@ -440,7 +444,7 @@ { csVector3 here = celClient->GetMainPlayer()->Pos(); const csPDelArray<GEMClientObject>& entities = celClient->GetEntities(); - for (size_t i=1; i < entities.GetSize(); i++) // Skip first entity, which is the main actor + for (size_t i=0; i < entities.GetSize(); i++) { GEMClientObject* object = entities.Get(i); @@ -486,7 +490,7 @@ return; // Show new - if (underMouse != NULL && underMouse != celClient->GetMainPlayer()) + if (underMouse != NULL) { // Don't show other player names unless introduced. if (underMouse->GetObjectType() == GEM_ACTOR && !(underMouse->Flags() & psPersistActor::NAMEKNOWN)) @@ -547,6 +551,10 @@ inline void psEntityLabels::ShowLabelOfObject(GEMClientObject* object, bool show) { + // The controlled character never shows a label. + if (object == celClient->GetMainPlayer()) + return; + if (object->GetEntityLabel() == NULL) { CreateLabelOfObject(object); @@ -562,21 +570,21 @@ void psEntityLabels::RepaintAllLabels() { const csPDelArray<GEMClientObject>& entities = celClient->GetEntities(); - for (size_t i=1; i < entities.GetSize(); i++) // Skip first entity, which is the main actor + for (size_t i=0; i < entities.GetSize(); i++) RepaintObjectLabel( entities.Get(i) ); } void psEntityLabels::HideAllLabels() { const csPDelArray<GEMClientObject>& entities = celClient->GetEntities(); - for (size_t i=1; i < entities.GetSize(); i++) // Skip first entity, which is the main actor + for (size_t i=0; i < entities.GetSize(); i++) ShowLabelOfObject( entities.Get(i), false ); } void psEntityLabels::RefreshGuildLabels() { const csPDelArray<GEMClientObject>& entities = celClient->GetEntities(); - for (size_t i=1; i < entities.GetSize(); i++) // Skip first entity, which is the main actor + for (size_t i=0; i < entities.GetSize(); i++) { GEMClientActor* actor = dynamic_cast<GEMClientActor*>(entities.Get(i)); if ( actor && csString(actor->GetGuildName()).Length() ) Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-09-14 19:49:06 UTC (rev 4355) +++ trunk/src/client/pscelclient.cpp 2009-09-14 20:20:17 UTC (rev 4356) @@ -198,12 +198,18 @@ void psCelClient::SetMainActor(GEMClientActor* actor) { - if (actor) - { - local_player = actor; - // ModeHandler has no good way to find out the entity - psengine->GetModeHandler()->SetEntity(actor); - } + CS_ASSERT(actor); + + // If updating the player we currently control, some of our data is likely + // newer than the server's (notably DRcounter); we should keep ours. + if (local_player && local_player->GetEID() == actor->GetEID()) + actor->CopyNewestData(*local_player); + + local_player = actor; + psengine->GetCharControl()->GetMovementManager()->SetActor(actor); + psengine->GetPSCamera()->SetActor(actor); + psengine->GetModeHandler()->SetEntity(actor); + } void psCelClient::RequestServerWorld() @@ -257,173 +263,64 @@ psengine->FatalError("Cannot load main actor. Error during loading.\n"); return; } - psPersistActor mesg( me, GetClientDR()->GetMsgStrings(), psengine->GetEngine() ); + psPersistActor msg(me, GetClientDR()->GetMsgStrings(), psengine->GetEngine()); - // If this is the first actor to be sent... - if ( local_player == NULL ) - { - // Trigger a world load, as we now know where we are. - psengine->GetLoader()->UpdatePosition(mesg.pos, mesg.sectorName, true); + GEMClientActor* actor = new GEMClientActor(this, msg); - // Set the sector. - mesg.sector = psengine->GetEngine()->FindSector(mesg.sectorName); - } - - GEMClientObject* found = FindObject(mesg.entityid); - - GEMClientActor* actor = new GEMClientActor( this, mesg ); - - // The first actor that is sent to the client is his own one. - if ( actor->control || (GetMainPlayer() && mesg.entityid == GetMainPlayer()->GetEID()) ) + // Extra steps for a controlled actor/the main player: + if (!local_player || local_player->GetEID() == msg.entityid) { - // cache the camera current view - psengine->SetMainActor(actor); - SetPlayerReady(true); + SetMainActor(actor); + // Trigger a world load, as we now know where we are. + psengine->GetLoader()->UpdatePosition(msg.pos, msg.sectorName, true); + // This triggers the server to update our proxlist - local_player->SendDRUpdate(PRIORITY_LOW,GetClientDR()->GetMsgStrings()); + //local_player->SendDRUpdate(PRIORITY_LOW,GetClientDR()->GetMsgStrings()); //update the window title with the char name psengine->UpdateWindowTitleInformations(); } - // We already have an entity with this id so we must have missed the remove object message, - // or an update has been sent. delete the now outdated object - if( found) - { - Debug3(LOG_CELPERSIST, 0, "Found existing object <%s> with %s, removing.\n", found->GetName(), ShowID(mesg.entityid)); - RemoveObject(found); - } - - entities.Push(actor); - entities_hash.Put(actor->GetEID(), actor); + AddEntity(actor); } -void psCelClient::HandleMainActor( psPersistActor& mesg ) +void psCelClient::HandleItem( MsgEntry* me ) { - - // Saved for when we reset - if ( local_player_defaultFactName.IsEmpty() ) - { - local_player_defaultFactName = local_player->GetFactName(); - local_player_defaultFact = local_player->GetMesh()->GetFactory(); - local_player_defaultMesh = local_player->GetMesh()->GetMeshObject(); - } - - // Update equipment list - local_player->equipment = mesg.equipment; - local_player->type = mesg.type; - - if (mesg.factname != local_player->GetFactName()) - { - local_player->charApp->ClearEquipment(); - - csRef<iMeshFactoryWrapper> factory; - while(!factory.IsValid()) - { - factory = psengine->GetLoader()->LoadFactory(mesg.factname); - } - - // New or resetting? - if (local_player_defaultFactName != mesg.factname) - { - csRef<iMeshWrapper> meshwrap = psengine->GetEngine()->CreateMeshWrapper(factory, mesg.factname); - csRef<iMeshObject> mesh = meshwrap->GetMeshObject(); - - // Update - local_player->GetMesh()->SetMeshObject(mesh); - local_player->GetMesh()->SetFactory(factory); - local_player->charApp->SetMesh(local_player->GetMesh()); - - // Cal3d - csRef<iSpriteCal3DState> calstate = scfQueryInterface<iSpriteCal3DState> (local_player->GetMesh()->GetMeshObject()); - if (calstate) - { - calstate->SetUserData((void*)local_player); - calstate->SetVelocity(0.0,&psengine->GetRandomGen()); - } - } - else - { - // Reset - local_player->GetMesh()->SetMeshObject(local_player_defaultMesh); - local_player->GetMesh()->SetFactory(local_player_defaultFact); - local_player->charApp->SetMesh(local_player->GetMesh()); - } - - // Update factory - local_player->factName = mesg.factname; - - // Update Bracer/Helm Group - if (mesg.helmGroup.Length() == 0) - local_player->helmGroup = local_player->GetMesh()->GetFactory()->QueryObject()->GetName(); - else - local_player->helmGroup = mesg.helmGroup; - - if (mesg.BracerGroup.Length() == 0) - local_player->BracerGroup = local_player->GetMesh()->GetFactory()->QueryObject()->GetName(); - else - local_player->BracerGroup = mesg.BracerGroup; - - if (mesg.BeltGroup.Length() == 0) - local_player->BeltGroup = local_player->GetMesh()->GetFactory()->QueryObject()->GetName(); - else - local_player->BeltGroup = mesg.BeltGroup; - - if (mesg.CloakGroup.Length() == 0) - local_player->CloakGroup = local_player->GetMesh()->GetFactory()->QueryObject()->GetName(); - else - local_player->CloakGroup = mesg.CloakGroup; - - // Update cal3d - local_player->RefreshCal3d(); - - local_player->charApp->ApplyEquipment(local_player->equipment); - } - - if(mesg.mountFactname != local_player->mountFactname) - { - local_player->mountFactname = mesg.mountFactname; - local_player->CheckLoadStatus(); - } + psPersistItem msg(me); + GEMClientItem* item = new GEMClientItem(this, msg); + AddEntity(item); } -void psCelClient::HandleItem( MsgEntry* me ) +void psCelClient::HandleActionLocation( MsgEntry* me ) { - psPersistItem mesg( me ); - - // if we already have an entity with this id, update the item - GEMClientItem *foundItem = dynamic_cast<GEMClientItem*>(FindObject(mesg.eid)); - if(foundItem) - { - Debug3(LOG_CELPERSIST, 0, "Found existing item<%s> object with %s, updating.\n", foundItem->GetName(), ShowID(mesg.eid)); - foundItem->UpdateItem( mesg ); - return; - } - - GEMClientItem* newItem = new GEMClientItem( this, mesg ); - - entities.Push(newItem); - entities_hash.Put(newItem->GetEID(), newItem); + psPersistActionLocation msg(me); + GEMClientActionLocation* action = new GEMClientActionLocation(this, msg); + AddEntity(action); + actions.Push(action); } -void psCelClient::HandleActionLocation( MsgEntry* me ) +void psCelClient::AddEntity(GEMClientObject* obj) { - psPersistActionLocation mesg( me ); + CS_ASSERT(obj); - // We already have an entity with this id so we must have missed the remove object message - // so delete and remake it. - GEMClientObject *found = (GEMClientObject*) FindObject(mesg.eid); - if ( found ) + // If we already have an entity with this ID, remove it. The server might + // have sent an updated version (say, with a different mesh); alternatively + // we may have simply missed the psRemoveObject message. + GEMClientObject* existing = (GEMClientObject*) FindObject(obj->GetEID()); + if (existing) { - Debug3(LOG_CELPERSIST, 0, "Found existing location<%s> object with %s, removing.\n", found->GetName(), ShowID(mesg.eid)); - RemoveObject( found ); - } + // If we're removing the targeted entity, update the target to the new one: + GEMClientObject* target = psengine->GetCharManager()->GetTarget(); + if (target == existing) + psengine->GetCharManager()->SetTarget(obj, "select", false); - GEMClientActionLocation * newAction = new GEMClientActionLocation( this, mesg ); - entities.Push( newAction ); - actions.Push( newAction ); - entities_hash.Put (newAction->GetEID(), newAction); + Debug3(LOG_CELPERSIST, 0, "Found existing entity >%s< with %s - removing.\n", existing->GetName(), ShowID(existing->GetEID())); + RemoveObject(existing); + + } + entities.Push(obj); + entities_hash.Put(obj->GetEID(), obj); } void psCelClient::HandleObjectRemoval( MsgEntry* me ) @@ -913,13 +810,6 @@ } } - -void psCelClient::SetPlayerReady(bool flag) -{ - if (local_player) - local_player->ready = flag; -} - void psCelClient::OnRegionsDeleted(csArray<iCollection*>& regions) { size_t entNum; @@ -1389,7 +1279,6 @@ type = mesg.type; masqueradeType = mesg.masqueradeType; guildName = mesg.guild; - control = mesg.control; flags = mesg.flags; linmove = 0; groupID = mesg.groupID; @@ -1463,7 +1352,7 @@ RefreshCal3d(); SetAnimationVelocity(post_load->vel); SetMode(serverMode, true); - if (!control && (flags & psPersistActor::NAMEKNOWN)) + if (cel->GetMainPlayer() != this && (flags & psPersistActor::NAMEKNOWN)) cel->GetEntityLabels()->OnObjectArrived(this); cel->GetShadowManager()->CreateShadow(this); } @@ -1473,14 +1362,19 @@ lastDRUpdateTime = 0; - ready = false; - linmove->SetDeltaLimit(0.2f); delete post_load; post_load = NULL; } +void GEMClientActor::CopyNewestData(GEMClientActor& oldActor) +{ + DRcounter = oldActor.DRcounter; + DRcounter_set = true; + SetPosition(oldActor.Pos(), oldActor.GetRotation(), oldActor.GetSector()); +} + int GEMClientActor::GetAnimIndex (csStringHashReversible* msgstrings, csStringID animid) { if (!cal3dstate) @@ -1526,7 +1420,7 @@ if(linmove) linmove->GetLastPosition (pos,yrot,sector); else - sector = cel->unresSector; + sector = cel->GetUnresSector(); } const csVector3 GEMClientActor::GetVelocity () const @@ -1566,7 +1460,7 @@ { csVector3 pos; float yrot; - iSector* sector = cel->unresSector; + iSector* sector = cel->GetUnresSector(); if(linmove) linmove->GetLastPosition (pos,yrot, sector); return sector; @@ -1578,7 +1472,7 @@ csVector3 angularVelocity = linmove->GetAngularVelocity(); // Never send DR messages until client is "ready" - if (!ready ) + if (!cel->GetMainPlayer()) return false; if (linmove->IsPath() && !path_sent) @@ -2209,27 +2103,6 @@ post_load = NULL; } -void GEMClientItem::UpdateItem( psPersistItem& mesg ) -{ - name = mesg.name; - Debug3(LOG_CELPERSIST, 0, "Item %s(%s) Updated", mesg.name.GetData(), ShowID(mesg.eid)); - type = mesg.type; - factName = mesg.factname; - - post_load = new PostLoadData(); - post_load->pos = mesg.pos; - post_load->xRot = mesg.xRot; - post_load->yRot = mesg.yRot; - post_load->zRot = mesg.zRot; - post_load->sector = mesg.sector; - post_load->flags = mesg.flags; - - if(pcmesh.IsValid()) - { - PostLoad(false); - } -} - GEMClientActionLocation::GEMClientActionLocation( psCelClient* cel, psPersistActionLocation& mesg ) : GEMClientObject(cel, mesg.eid) { Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-09-14 19:49:06 UTC (rev 4355) +++ trunk/src/client/pscelclient.h 2009-09-14 20:20:17 UTC (rev 4356) @@ -196,6 +196,7 @@ void PruneEntities(); bool IsUnresSector(iSector* sector) { return unresSector == sector;} + iSector* GetUnresSector() { return unresSector; } int GetRequestStatus() { return requeststatus; } @@ -261,8 +262,6 @@ } protected: - friend class GEMClientActor; - /** Finds given entity in list of unresolved entities */ csList<UnresolvedPos*>::Iterator FindUnresolvedPos(GEMClientObject * entity); @@ -286,6 +285,8 @@ void HandleGuildChange( MsgEntry* me ); void HandleGroupChange( MsgEntry* me ); + void AddEntity(GEMClientObject* obj); + /** Handles a stats message from the server. * This basically just publishes the data to PAWS so various widgets can be updated. */ @@ -416,8 +417,6 @@ virtual void PostLoad(bool nullmesh) { } protected: - friend class psCelClient; - static psCelClient *cel; csString name; @@ -453,6 +452,14 @@ virtual GEMOBJECT_TYPE GetObjectType() { return GEM_ACTOR; } + /** When receiving a psPersistActor message for the actor we currently + * control, some of our data (notably DRcounter) is probably newer + * than that sent by the server. This function copies such data from + * our old actor into the replacement we just created. + * + * @param oldActor The actor to copy data from. + */ + void CopyNewestData(GEMClientActor& oldActor); /** Get the last position of this object. * @@ -508,7 +515,6 @@ unsigned GetChatBubbleID() const; csRef<iSpriteCal3DState> cal3dstate; - bool control; /** * This optimal routine tries to get the animation index given an @@ -535,7 +541,6 @@ csVector3 lastSentVelocity,lastSentRotation; bool stationary,path_sent; csTicks lastDRUpdateTime; - bool ready; unsigned short gender; // Access functions for the group var @@ -607,8 +612,6 @@ virtual GEMOBJECT_TYPE GetObjectType() { return GEM_ITEM; } - void UpdateItem( psPersistItem& mesg ); - /** * Delayed mesh loading. */ Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-09-14 19:49:06 UTC (rev 4355) +++ trunk/src/client/psengine.cpp 2009-09-14 20:20:17 UTC (rev 4356) @@ -1228,16 +1228,6 @@ // ---------------------------------------------------------------------------- -void psEngine::SetMainActor(GEMClientActor *mainActor) -{ - CS_ASSERT(mainActor); - GetCelClient()->SetMainActor(mainActor); - GetCharControl()->GetMovementManager()->SetActor(mainActor); - GetPSCamera()->SetActor(mainActor); -} - -// ---------------------------------------------------------------------------- - bool psEngine::UpdateWindowTitleInformations() { return CS_Setup->AddWindowInformations(GetMainPlayerName()); @@ -1488,8 +1478,6 @@ return; } - celclient->SetPlayerReady(true); - psClientStatusMessage statusmsg(true); statusmsg.SendMessage(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-14 21:26:51
|
Revision: 4357 http://planeshift.svn.sourceforge.net/planeshift/?rev=4357&view=rev Author: mgist Date: 2009-09-14 21:26:39 +0000 (Mon, 14 Sep 2009) Log Message: ----------- - Started adding zoning to bgloader. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/iclient/ibgloader.h Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-09-14 20:20:17 UTC (rev 4356) +++ trunk/src/client/bgloader/loader.cpp 2009-09-14 21:26:39 UTC (rev 4357) @@ -145,6 +145,9 @@ // For the plugin and shader loads. csRefArray<iThreadReturn> rets; + // Zone for this file. + csRef<Zone> zone; + // Restores any directory changes. csVfsDirectoryChanger dirchange(vfs); @@ -169,11 +172,19 @@ } // Begin document parsing. - csRef<iDocumentNode> root = doc->GetRoot()->GetNode("library"); + csRef<iDocumentNode> root = doc->GetRoot()->GetNode("world"); if(!root.IsValid()) { - root = doc->GetRoot()->GetNode("world"); + root = doc->GetRoot()->GetNode("library"); } + else + { + csString zonen(path); + zonen = zonen.Slice(0, zonen.FindLast('/')); + zonen = zonen.Slice(zonen.FindLast('/')+1); + zone = csPtr<Zone>(new Zone()); + zones.Put(stringSet.Request(zonen.GetData()), zone); + } if(root.IsValid()) { @@ -235,7 +246,7 @@ csRef<Texture> t = csPtr<Texture>(new Texture(node->GetAttributeValue("name"), vfsPath, node)); { CS::Threading::ScopedWriteLock lock(tLock); - textures.Put(t->name, t); + textures.Put(stringSet.Request(t->name), t); } } } @@ -251,7 +262,7 @@ csRef<Material> m = csPtr<Material>(new Material(node->GetAttributeValue("name"))); { CS::Threading::ScopedWriteLock lock(mLock); - materials.Put(m->name, m); + materials.Put(stringSet.Request(m->name), m); } // Parse the texture for a material. Construct a shader variable for it. @@ -265,7 +276,7 @@ csRef<Texture> texture; { CS::Threading::ScopedReadLock lock(tLock); - texture = textures.Get(node->GetContentsValue(), csRef<Texture>()); + texture = textures.Get(stringSet.Request(node->GetContentsValue()), csRef<Texture>()); // Validation. csString msg; @@ -338,7 +349,7 @@ csRef<Texture> texture; { CS::Threading::ScopedReadLock lock(tLock); - texture = textures.Get(node->GetContentsValue(), csRef<Texture>()); + texture = textures.Get(stringSet.Request(node->GetContentsValue()), csRef<Texture>()); // Validation. csString msg; @@ -400,7 +411,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node->GetNode("params")->GetNode("material")->GetContentsValue(), csRef<Material>()); + material = materials.Get(stringSet.Request(node->GetNode("params")->GetNode("material")->GetContentsValue()), csRef<Material>()); // Validation. csString msg; @@ -421,7 +432,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node2->GetNode("material")->GetContentsValue(), csRef<Material>()); + material = materials.Get(stringSet.Request(node2->GetNode("material")->GetContentsValue()), csRef<Material>()); // Validation. csString msg; @@ -441,7 +452,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node2->GetAttributeValue("material"), csRef<Material>()); + material = materials.Get(stringSet.Request(node2->GetAttributeValue("material")), csRef<Material>()); // Validation. csString msg; @@ -460,7 +471,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node->GetContentsValue(), csRef<Material>()); + material = materials.Get(stringSet.Request(node->GetContentsValue()), csRef<Material>()); // Validation. csString msg; @@ -487,7 +498,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node2->GetAttributeValue("material"), csRef<Material>()); + material = materials.Get(stringSet.Request(node2->GetAttributeValue("material")), csRef<Material>()); // Validation. csString msg; @@ -503,7 +514,7 @@ } CS::Threading::ScopedWriteLock lock(mfLock); - meshfacts.Put(mf->name, mf); + meshfacts.Put(stringSet.Request(mf->name), mf); } // Parse all sectors. @@ -517,7 +528,7 @@ sectorName.Downcase(); { CS::Threading::ScopedReadLock lock(sLock); - s = sectortree.Get(sectorName, csRef<Sector>()); + s = sectorHash.Get(stringSet.Request(sectorName), csRef<Sector>()); } // This sector may have already been created (referenced by a portal somewhere else). @@ -527,9 +538,14 @@ s = csPtr<Sector>(new Sector(sectorName)); CS::Threading::ScopedWriteLock lock(sLock); sectors.Push(s); - sectortree.Put(sectorName, s); + sectorHash.Put(stringSet.Request(sectorName), s); } + if(zone.IsValid()) + { + zone->sectors.Push(s); + } + // Get culler properties. s->init = true; s->culler = node->GetNode("cullerp")->GetContentsValue(); @@ -624,7 +640,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node3->GetNode("material")->GetContentsValue(), csRef<Material>()); + material = materials.Get(stringSet.Request(node3->GetNode("material")->GetContentsValue()), csRef<Material>()); // Validation. csString msg; @@ -645,7 +661,7 @@ csRef<Texture> texture; { CS::Threading::ScopedReadLock lock(tLock); - texture = textures.Get(node3->GetContentsValue(), csRef<Texture>()); + texture = textures.Get(stringSet.Request(node3->GetContentsValue()), csRef<Texture>()); // Validation. csString msg; @@ -664,7 +680,7 @@ csRef<MeshFact> meshfact; { CS::Threading::ScopedReadLock lock(mfLock); - meshfact = meshfacts.Get(node2->GetContentsValue(), csRef<MeshFact>()); + meshfact = meshfacts.Get(stringSet.Request(node2->GetContentsValue()), csRef<MeshFact>()); // Validation. csString msg; @@ -743,7 +759,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node2->GetContentsValue(), csRef<Material>()); + material = materials.Get(stringSet.Request(node2->GetContentsValue()), csRef<Material>()); // Validation. csString msg; @@ -766,7 +782,7 @@ csRef<Material> material; { CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(node3->GetContentsValue(), csRef<Material>()); + material = materials.Get(stringSet.Request(node3->GetContentsValue()), csRef<Material>()); // Validation. csString msg; @@ -796,7 +812,7 @@ csRef<Texture> texture; { CS::Threading::ScopedReadLock lock(tLock); - texture = textures.Get(node3->GetContentsValue(), csRef<Texture>()); + texture = textures.Get(stringSet.Request(node3->GetContentsValue()), csRef<Texture>()); // Validation. csString msg; @@ -814,7 +830,7 @@ s->meshes.Push(m); CS::Threading::ScopedWriteLock lock(meshLock); - meshes.Put(m->name, m); + meshes.Put(stringSet.Request(m->name), m); } // Parse mesh generators (for foliage, rocks etc.) @@ -843,7 +859,8 @@ { CS::Threading::ScopedReadLock lock(meshLock); - mgen->object = meshes.Get(meshgen->GetNode("meshobj")->GetContentsValue(), csRef<MeshObj>()); + csStringID mID = stringSet.Request(meshgen->GetNode("meshobj")->GetContentsValue()); + mgen->object = meshes.Get(mID, csRef<MeshObj>()); } csRef<iDocumentNodeIterator> geometries = meshgen->GetNodes("geometry"); @@ -855,7 +872,7 @@ { csString name(geometry->GetNode("factory")->GetAttributeValue("name")); CS::Threading::ScopedReadLock lock(mfLock); - meshfact = meshfacts.Get(name, csRef<MeshFact>()); + meshfact = meshfacts.Get(stringSet.Request(name), csRef<MeshFact>()); // Validation. csString msg; @@ -873,7 +890,7 @@ { csString name(matfactors->Next()->GetAttributeValue("material")); CS::Threading::ScopedReadLock lock(mLock); - material = materials.Get(name, csRef<Material>()); + material = materials.Get(stringSet.Request(name), csRef<Material>()); // Validation. csString msg; @@ -942,7 +959,7 @@ targetSector.Downcase(); { CS::Threading::ScopedReadLock lock(sLock); - p->targetSector = sectortree.Get(targetSector, csRef<Sector>()); + p->targetSector = sectorHash.Get(stringSet.Request(targetSector), csRef<Sector>()); } if(!p->targetSector.IsValid()) @@ -950,7 +967,7 @@ p->targetSector = csPtr<Sector>(new Sector(targetSector)); CS::Threading::ScopedWriteLock lock(sLock); sectors.Push(p->targetSector); - sectortree.Put(targetSector, p->targetSector); + sectorHash.Put(stringSet.Request(targetSector), p->targetSector); } if(!p->ww_given) @@ -1115,7 +1132,7 @@ if(!sector.IsValid()) { - sector = sectortree.Get(csString(sectorName).Downcase(), csRef<Sector>()); + sector = sectorHash.Get(stringSet.Request(csString(sectorName).Downcase()), csRef<Sector>()); } if(sector.IsValid()) @@ -1130,7 +1147,7 @@ unloadBox.AddBoundingVertexSmart(pos.x-loadRange*1.5, pos.y-loadRange*1.5, pos.z-loadRange*1.5); // Check. - LoadSector(pos, loadBox, unloadBox, sector, 0); + LoadSector(pos, loadBox, unloadBox, sector, 0, false); if(force) { @@ -1374,7 +1391,7 @@ } void BgLoader::LoadSector(const csVector3& pos, const csBox3& loadBox, const csBox3& unloadBox, - Sector* sector, uint depth) + Sector* sector, uint depth, bool force) { sector->isLoading = true; @@ -1417,7 +1434,7 @@ wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); } - LoadSector(wwPos, wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1); + LoadSector(wwPos, wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1, false); } } @@ -1426,7 +1443,7 @@ { if(!sector->meshes[i]->loading) { - if(sector->meshes[i]->InRange(pos, loadBox, loadRange)) + if(force || sector->meshes[i]->InRange(pos, loadBox, loadRange)) { sector->meshes[i]->loading = true; loadingMeshes.Push(sector->meshes[i]); @@ -1449,7 +1466,7 @@ { if(!sector->meshgen[i]->loading) { - if(sector->meshgen[i]->InRange(loadBox)) + if(force || sector->meshgen[i]->InRange(loadBox)) { sector->meshgen[i]->loading = true; loadingMeshGen.Push(sector->meshgen[i]); @@ -1466,10 +1483,10 @@ // Check all portals in this sector... and recurse into the sectors they lead to. for(size_t i=0; i<sector->portals.GetSize(); i++) { - if(sector->portals[i]->InRange(loadBox)) + if(force || sector->portals[i]->InRange(loadBox)) { bool recurse = true; - if(depth >= maxPortalDepth) + if(!force && depth >= maxPortalDepth) { // If we've reached the recursion limit then check if the // target sector is valid. If so then create a portal to it. @@ -1483,8 +1500,23 @@ } } - if(!sector->portals[i]->targetSector->isLoading && !sector->portals[i]->targetSector->checked && recurse) + if(force) { + if(!sector->portals[i]->targetSector->object.IsValid()) + { + { + csString msg; + msg.AppendFmt("Attempting to load uninit sector %s!\n", sector->name.GetData()); + CS_ASSERT_MSG(msg.GetData(), sector->init); + if(!sector->init) return; + } + sector->portals[i]->targetSector->object = engine->CreateSector(sector->portals[i]->targetSector->name); + sector->portals[i]->targetSector->object->SetDynamicAmbientLight(sector->portals[i]->targetSector->ambient); + sector->portals[i]->targetSector->object->SetVisibilityCullerPlugin(sector->portals[i]->targetSector->culler); + } + } + else if(!sector->portals[i]->targetSector->isLoading && !sector->portals[i]->targetSector->checked && recurse) + { csVector3 wwPos = pos; csBox3 wwLoadBox = loadBox; csBox3 wwUnloadBox = unloadBox; @@ -1505,7 +1537,7 @@ wwUnloadBox.SetMax(1, wwUnloadBox.MaxY()-transform.y); wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); } - LoadSector(wwPos, wwLoadBox, wwUnloadBox, sector->portals[i]->targetSector, depth+1); + LoadSector(wwPos, wwLoadBox, wwUnloadBox, sector->portals[i]->targetSector, depth+1, false); } sector->portals[i]->mObject = engine->CreatePortal(sector->portals[i]->name, sector->object, @@ -1517,6 +1549,11 @@ sector->portals[i]->pObject->SetWarp(sector->portals[i]->matrix, sector->portals[i]->wv, sector->portals[i]->ww); } + if(sector->portals[i]->pfloat) + { + sector->portals[i]->pObject->GetFlags().SetBool(CS_PORTAL_FLOAT, true); + } + if(sector->portals[i]->clip) { sector->portals[i]->pObject->GetFlags().SetBool(CS_PORTAL_CLIPDEST, true); @@ -1554,7 +1591,7 @@ wwUnloadBox.SetMax(1, wwUnloadBox.MaxY()-transform.y); wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); } - LoadSector(wwPos, wwLoadBox, wwUnloadBox, sector->portals[i]->targetSector, depth+1); + LoadSector(wwPos, wwLoadBox, wwUnloadBox, sector->portals[i]->targetSector, depth+1, false); } engine->GetMeshes()->Remove(sector->portals[i]->mObject); @@ -1568,7 +1605,7 @@ // Check all sector lights. for(size_t i=0; i<sector->lights.GetSize(); i++) { - if(sector->lights[i]->InRange(loadBox)) + if(force || sector->lights[i]->InRange(loadBox)) { sector->lights[i]->object = engine->CreateLight(sector->lights[i]->name, sector->lights[i]->pos, sector->lights[i]->radius, sector->lights[i]->colour, sector->lights[i]->dynamic); @@ -1849,7 +1886,7 @@ csPtr<iMeshFactoryWrapper> BgLoader::LoadFactory(const char* name, bool* failed) { - csRef<MeshFact> meshfact = meshfacts.Get(name, csRef<MeshFact>()); + csRef<MeshFact> meshfact = meshfacts.Get(stringSet.Request(name), csRef<MeshFact>()); { if(!failed) { @@ -1888,7 +1925,7 @@ csPtr<iMaterialWrapper> BgLoader::LoadMaterial(const char* name, bool* failed) { - csRef<Material> material = materials.Get(name, csRef<Material>()); + csRef<Material> material = materials.Get(stringSet.Request(name), csRef<Material>()); { if(!failed) { @@ -1912,13 +1949,13 @@ return csPtr<iMaterialWrapper>(0); } -bool BgLoader::InWaterArea(const char* sector, csVector3* pos, csColor4** colour) const +bool BgLoader::InWaterArea(const char* sector, csVector3* pos, csColor4** colour) { // Hack to work around the weird sector stuff we do. if(!strcmp("SectorWhereWeKeepEntitiesResidingInUnloadedMaps", sector)) return false; - csRef<Sector> s = sectortree.Get(csString(sector).Downcase(), csRef<Sector>()); + csRef<Sector> s = sectorHash.Get(stringSet.Request(csString(sector).Downcase()), csRef<Sector>()); CS_ASSERT_MSG("Invalid sector passed to InWaterArea().", s.IsValid()); for(size_t i=0; i<s->waterareas.GetSize(); ++i) @@ -1933,10 +1970,50 @@ return false; } +bool BgLoader::LoadZone(const char* name) +{ + csRef<Zone> zone = zones.Get(stringSet.Request(name), csRef<Zone>()); + if(zone.IsValid()) + { + if(zone->loading) + { + if(GetLoadingCount() == 0) + { + if(loadedZone) + { + for(size_t i=0; i<loadedZone->sectors.GetSize(); ++i) + { + CleanSector(loadedZone->sectors[i]); + } + + loadedZone = zone; + + return true; + } + } + else + { + ContinueLoading(true); + } + } + else + { + for(size_t i=0; i<zone->sectors.GetSize(); ++i) + { + LoadSector(csVector3(0.0f), csBox3(), csBox3(), zone->sectors[i], (uint)-1, true); + } + + zone->loading = true; + } + } + + return false; +} + iMeshWrapper* BgLoader::CreateAndSelectMesh(const char* factName, iCamera* camera, const csVector2& pos) { // Check that requested mesh is valid. - csRef<MeshFact> meshfact = meshfacts.Get(factName, csRef<MeshFact>()); + csRef<MeshFact> meshfact = meshfacts.Get(stringSet.Request(factName), csRef<MeshFact>()); if(!meshfact.IsValid()) return 0; Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-09-14 20:20:17 UTC (rev 4356) +++ trunk/src/client/bgloader/loader.h 2009-09-14 21:26:39 UTC (rev 4357) @@ -22,7 +22,6 @@ #include <csgeom/poly3d.h> #include <csgfx/shadervar.h> -#include <csutil/redblacktree.h> #include <csutil/scf_implementation.h> #include <csutil/hash.h> #include <csutil/threading/rwmutex.h> @@ -143,9 +142,14 @@ * @param pos The world space position that you are checking. * @param colour Will contain the colour of the water that you are positioned in. */ - bool InWaterArea(const char* sector, csVector3* pos, csColor4** colour) const; + bool InWaterArea(const char* sector, csVector3* pos, csColor4** colour); /** + * Load a zone given by name. + */ + bool LoadZone(const char* name); + + /** * Returns an array of the available shaders for a given type. * @param usageType The type of shader you wish to have. * E.g. 'default_alpha' to get an array of all default world alpha shaders. @@ -419,7 +423,8 @@ class Portal : public CS::Utility::FastRefCount<Portal> { public: - Portal(const char* name) : name(name), wv(0), ww_given(false), ww(0), transform(0), clip(false), zfill(false), warp(false) + Portal(const char* name) : name(name), wv(0), ww_given(false), ww(0), + transform(0), pfloat(false), clip(false), zfill(false), warp(false) { } @@ -439,6 +444,7 @@ bool ww_given; csVector3 ww; csVector3 transform; + bool pfloat; bool clip; bool zfill; bool warp; @@ -492,7 +498,7 @@ /* Internal loading methods. */ void LoadSector(const csVector3& pos, const csBox3& loadBox, const csBox3& unloadBox, - Sector* sector, uint depth); + Sector* sector, uint depth, bool force); void FinishMeshLoad(MeshObj* mesh); bool LoadMeshGen(MeshGen* meshgen); bool LoadMesh(MeshObj* mesh); @@ -531,13 +537,28 @@ // The last valid position. csVector3 lastPos; + // Shader store. + csHash<csString, csStringID> shadersByUsageType; + // Stores world representation. - csHash<csString, csStringID> shadersByUsageType; - csRedBlackTreeMap<csString, csRef<Texture> > textures; - csRedBlackTreeMap<csString, csRef<Material> > materials; - csRedBlackTreeMap<csString, csRef<MeshFact> > meshfacts; - csRedBlackTreeMap<csString, csRef<MeshObj> > meshes; - csRedBlackTreeMap<csString, csRef<Sector> > sectortree; + struct Zone : CS::Utility::FastRefCount<Zone> + { + bool loading; + csRefArray<Sector> sectors; + + Zone() : loading(false) {} + }; + + csRef<Zone> loadedZone; + + csStringSet stringSet; + csHash<csRef<Zone>, csStringID> zones; + + csHash<csRef<Texture>, csStringID> textures; + csHash<csRef<Material>, csStringID> materials; + csHash<csRef<MeshFact>, csStringID> meshfacts; + csHash<csRef<MeshObj>, csStringID> meshes; + csHash<csRef<Sector>, csStringID> sectorHash; csRefArray<Sector> sectors; csRefArray<StartPosition> startPositions; Modified: trunk/src/client/iclient/ibgloader.h =================================================================== --- trunk/src/client/iclient/ibgloader.h 2009-09-14 20:20:17 UTC (rev 4356) +++ trunk/src/client/iclient/ibgloader.h 2009-09-14 21:26:39 UTC (rev 4357) @@ -41,7 +41,7 @@ */ struct iBgLoader : public virtual iBase { - SCF_INTERFACE(iBgLoader, 1, 3, 0); + SCF_INTERFACE(iBgLoader, 1, 4, 0); /** * Sets key settings and performs a shader parse. @@ -126,7 +126,7 @@ * @param pos The world space position that you are checking. * @param colour Will contain the colour of the water that you are positioned in. */ - virtual bool InWaterArea(const char* sector, csVector3* pos, csColor4** colour) const = 0; + virtual bool InWaterArea(const char* sector, csVector3* pos, csColor4** colour) = 0; /** * Returns an array of the available shaders for a given type. @@ -139,6 +139,11 @@ * Returns an array of start positions in the world. */ virtual csRefArray<StartPosition>* GetStartPositions() = 0; + + /** + * Load a zone given by name. + */ + virtual bool LoadZone(const char* name) = 0; }; #endif // __IBGLOADER_H__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-18 10:26:23
|
Revision: 4425 http://planeshift.svn.sourceforge.net/planeshift/?rev=4425&view=rev Author: mgist Date: 2009-09-18 10:26:15 +0000 (Fri, 18 Sep 2009) Log Message: ----------- - Some extra error checking to LoadZones. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/iclient/ibgloader.h trunk/src/client/zonehandler.cpp Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-09-18 09:29:21 UTC (rev 4424) +++ trunk/src/client/bgloader/loader.cpp 2009-09-18 10:26:15 UTC (rev 4425) @@ -2008,7 +2008,7 @@ return false; } -void BgLoader::LoadZones(iStringArray* regions) +bool BgLoader::LoadZones(iStringArray* regions, bool loadMeshes) { csRefArray<Zone> newLoadedZones; for(size_t i=0; i<regions->GetSize(); ++i) @@ -2018,6 +2018,10 @@ { newLoadedZones.Push(zone); } + else + { + return false; + } } for(size_t i=0; i<loadedZones.GetSize(); ++i) @@ -2066,7 +2070,7 @@ } } - return; + return true; } iMeshWrapper* BgLoader::CreateAndSelectMesh(const char* factName, iCamera* camera, const csVector2& pos) Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-09-18 09:29:21 UTC (rev 4424) +++ trunk/src/client/bgloader/loader.h 2009-09-18 10:26:15 UTC (rev 4425) @@ -147,7 +147,7 @@ /** * Load zones given by name. */ - void LoadZones(iStringArray* regions); + bool LoadZones(iStringArray* regions, bool loadMeshes = true); /** * Returns an array of the available shaders for a given type. Modified: trunk/src/client/iclient/ibgloader.h =================================================================== --- trunk/src/client/iclient/ibgloader.h 2009-09-18 09:29:21 UTC (rev 4424) +++ trunk/src/client/iclient/ibgloader.h 2009-09-18 10:26:15 UTC (rev 4425) @@ -41,7 +41,7 @@ */ struct iBgLoader : public virtual iBase { - SCF_INTERFACE(iBgLoader, 1, 4, 0); + SCF_INTERFACE(iBgLoader, 1, 4, 1); /** * Sets key settings and performs a shader parse. @@ -143,7 +143,7 @@ /** * Load zones given by name. */ - virtual void LoadZones(iStringArray* regions) = 0; + virtual bool LoadZones(iStringArray* regions, bool loadMeshes = true) = 0; }; #endif // __IBGLOADER_H__ Modified: trunk/src/client/zonehandler.cpp =================================================================== --- trunk/src/client/zonehandler.cpp 2009-09-18 09:29:21 UTC (rev 4424) +++ trunk/src/client/zonehandler.cpp 2009-09-18 10:26:15 UTC (rev 4425) @@ -189,7 +189,11 @@ } else { - psengine->GetLoader()->LoadZones(zone->regions); + if(!psengine->GetLoader()->LoadZones(zone->regions)) + { + Error2("Unable to load zone '%s'\n", zone->inSector.GetData()); + return; + } } if(FindLoadWindow() && psengine->GetLoader()->GetLoadingCount() != 0 && This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-20 01:22:26
|
Revision: 4451 http://planeshift.svn.sourceforge.net/planeshift/?rev=4451&view=rev Author: mgist Date: 2009-09-20 00:12:34 +0000 (Sun, 20 Sep 2009) Log Message: ----------- - Attempt to fix falling through floor on login. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h trunk/src/client/psengine.cpp Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-09-19 23:47:41 UTC (rev 4450) +++ trunk/src/client/pscelclient.cpp 2009-09-20 00:12:34 UTC (rev 4451) @@ -238,7 +238,6 @@ gameWorld->Initialize(object_reg); requeststatus = 0; - RequestActor(); } void psCelClient::RequestActor() @@ -1999,7 +1998,7 @@ } factory->GetMeshObjectFactory()->SetMaterialWrapper(material); - } + } // Create the mesh. instance = csPtr<InstanceObject>(new InstanceObject()); Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-09-19 23:47:41 UTC (rev 4450) +++ trunk/src/client/pscelclient.h 2009-09-20 00:12:34 UTC (rev 4451) @@ -152,6 +152,7 @@ GEMClientObject* FindObject(EID eid); + void RequestActor(); void SetMainActor(GEMClientActor* object); void SetPlayerReady(bool flag); @@ -292,8 +293,6 @@ */ void HandleStats( MsgEntry* me ); - void RequestActor(); - GEMClientActor* local_player; /// Handle a change in the main actor Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-09-19 23:47:41 UTC (rev 4450) +++ trunk/src/client/psengine.cpp 2009-09-20 00:12:34 UTC (rev 4451) @@ -1332,6 +1332,13 @@ case LS_SETTING_CHARACTERS: { + // Wait for the map to be loaded + if (!HasLoadedMap()) + return; + + // Request the actor. + celclient->RequestActor(); + if ( !celclient->IsReady() ) { if (celclient->GetRequestStatus() != 0 && csGetTicks() > loadtimeout) @@ -1346,10 +1353,6 @@ return; } - // Wait for the map to be loaded - if (!HasLoadedMap()) - return; - // Set controlled actor and map controls charController->GetMovementManager()->SetActor(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-20 02:40:12
|
Revision: 4457 http://planeshift.svn.sourceforge.net/planeshift/?rev=4457&view=rev Author: mgist Date: 2009-09-20 02:40:05 +0000 (Sun, 20 Sep 2009) Log Message: ----------- - Fixed multiple actor requests. Modified Paths: -------------- trunk/src/client/psengine.cpp trunk/src/client/psengine.h Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-09-20 01:41:14 UTC (rev 4456) +++ trunk/src/client/psengine.cpp 2009-09-20 02:40:05 UTC (rev 4457) @@ -249,6 +249,7 @@ muteSoundsOnFocusLoss = false; + actorRequested = false xmlparser = csQueryRegistry<iDocumentSystem> (object_reg); stringset = csQueryRegistryTagInterface<iStringSet> (object_reg, "crystalspace.shared.stringset"); @@ -1337,7 +1338,11 @@ return; // Request the actor. - celclient->RequestActor(); + if(!actorRequested) + { + celclient->RequestActor(); + actorRequested = true; + } if ( !celclient->IsReady() ) { Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-09-20 01:41:14 UTC (rev 4456) +++ trunk/src/client/psengine.h 2009-09-20 02:40:05 UTC (rev 4457) @@ -420,6 +420,9 @@ csRef<iStringArray> maps; uint lastLoadingCount; + // True if we've requested the main actor. + bool actorRequested; + private: csString targetPetitioner; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-09-24 14:19:48
|
Revision: 4518 http://planeshift.svn.sourceforge.net/planeshift/?rev=4518&view=rev Author: Khakilord Date: 2009-09-24 14:19:38 +0000 (Thu, 24 Sep 2009) Log Message: ----------- Fix to infinite loop fix. Modified Paths: -------------- trunk/src/client/gui/pawssplashwindow.cpp trunk/src/client/psengine.cpp Modified: trunk/src/client/gui/pawssplashwindow.cpp =================================================================== --- trunk/src/client/gui/pawssplashwindow.cpp 2009-09-24 14:07:21 UTC (rev 4517) +++ trunk/src/client/gui/pawssplashwindow.cpp 2009-09-24 14:19:38 UTC (rev 4518) @@ -56,7 +56,7 @@ if(psengine->Initialize(level)) ++level; else - PS_PAUSEEXIT(1); + return; if(level > 5) { Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-09-24 14:07:21 UTC (rev 4517) +++ trunk/src/client/psengine.cpp 2009-09-24 14:19:38 UTC (rev 4518) @@ -600,7 +600,7 @@ { lasterror = "Couldn't init Cel Manager."; Error2("FATAL ERROR: %s",lasterror.GetData()); - return false; + PS_PAUSEEXIT(1); } @@ -608,7 +608,7 @@ { lasterror = "ModeHandler failed init."; Error2("FATAL ERROR: %s",lasterror.GetData()); - return false; + PS_PAUSEEXIT(1); } // Init the main widget This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-25 10:17:45
|
Revision: 4540 http://planeshift.svn.sourceforge.net/planeshift/?rev=4540&view=rev Author: mgist Date: 2009-09-25 10:17:39 +0000 (Fri, 25 Sep 2009) Log Message: ----------- - Removed flags from post load struct where they were incorrectly placed. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-09-25 08:24:41 UTC (rev 4539) +++ trunk/src/client/pscelclient.cpp 2009-09-25 10:17:39 UTC (rev 4540) @@ -1942,7 +1942,7 @@ post_load->yRot = mesg.yRot; post_load->zRot = mesg.zRot; post_load->sector = mesg.sector; - post_load->flags = mesg.flags; + flags = mesg.flags; if (!InitMesh()) { Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-09-25 08:24:41 UTC (rev 4539) +++ trunk/src/client/pscelclient.h 2009-09-25 10:17:39 UTC (rev 4540) @@ -631,7 +631,6 @@ float yRot; float zRot; csString sector; - uint32_t flags; }; PostLoadData* post_load; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-10-01 21:17:42
|
Revision: 4598 http://planeshift.svn.sourceforge.net/planeshift/?rev=4598&view=rev Author: Khakilord Date: 2009-10-01 21:17:13 +0000 (Thu, 01 Oct 2009) Log Message: ----------- Removed unneeded #includes from client/psengine.h which itself can only be some kind of omniscient and magical file as it's referenced from libeffects, pslaunch, psserver and npcclient in our giant web of interdependencies. Side effect: Should reduce compile times and recompiling. Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/client/gui/pawsactivemagicwindow.h trunk/src/client/gui/pawscharcreatemain.h trunk/src/client/gui/pawscharpick.cpp trunk/src/client/gui/pawscharpick.h trunk/src/client/gui/pawsconfigchatbubbles.cpp trunk/src/client/gui/pawscontainerdescwindow.cpp trunk/src/client/gui/pawscraft.h trunk/src/client/gui/pawsdetailwindow.cpp trunk/src/client/gui/pawsdetailwindow.h trunk/src/client/gui/pawsgmgui.h trunk/src/client/gui/pawsilluminationwindow.h trunk/src/client/gui/pawsinteractwindow.cpp trunk/src/client/gui/pawsmerchantwindow.h trunk/src/client/gui/pawswritingwindow.h trunk/src/client/gui/psmainwidget.cpp trunk/src/client/gui/shortcutwindow.cpp trunk/src/client/guihandler.cpp trunk/src/client/pscamera.cpp trunk/src/client/psclientchar.cpp trunk/src/client/psclientchar.h trunk/src/client/psclientdr.cpp trunk/src/client/psengine.cpp trunk/src/client/psengine.h trunk/src/client/psinventorycache.cpp trunk/src/client/psmovement.h Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/cmdusers.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -57,6 +57,7 @@ #include "modehandler.h" #include "pscharcontrol.h" #include "globals.h" +#include "psclientchar.h" psUserCommands::psUserCommands(ClientMsgHandler* mh,CmdHandler *ch,iObjectRegistry* obj) Modified: trunk/src/client/gui/pawsactivemagicwindow.h =================================================================== --- trunk/src/client/gui/pawsactivemagicwindow.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsactivemagicwindow.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -26,6 +26,7 @@ class pawsMessageTextBox; class pawsProgressBar; +#include "net/cmdbase.h" #include "net/subscriber.h" #include "gui/pawscontrolwindow.h" /** This handles all the details about how the spell cancel works. Modified: trunk/src/client/gui/pawscharcreatemain.h =================================================================== --- trunk/src/client/gui/pawscharcreatemain.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawscharcreatemain.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -31,6 +31,7 @@ class pawsRadioButtonGroup; class pawsObjectView; class psCharAppearance; +class RaceDefinition; ////////////////////////////////////////////////////////////////////////////// // general name validity funcs Modified: trunk/src/client/gui/pawscharpick.cpp =================================================================== --- trunk/src/client/gui/pawscharpick.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawscharpick.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -40,6 +40,7 @@ #include "psnetmanager.h" #include "pscelclient.h" #include "psclientdr.h" +#include "psclientchar.h" #define CHARACTER_BUTTON_0 0 #define CHARACTER_BUTTON_1 1 Modified: trunk/src/client/gui/pawscharpick.h =================================================================== --- trunk/src/client/gui/pawscharpick.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawscharpick.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -4,6 +4,7 @@ #include "paws/pawsstringpromptwindow.h" #include "paws/pawswidget.h" #include "net/message.h" +#include "net/cmdbase.h" #include "psengine.h" Modified: trunk/src/client/gui/pawsconfigchatbubbles.cpp =================================================================== --- trunk/src/client/gui/pawsconfigchatbubbles.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsconfigchatbubbles.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -31,6 +31,7 @@ //CLIENT INCLUDES #include "../globals.h" #include "chatbubbles.h" +#include "net/messages.h" // Used to set default config files if the userdata ones are not found. #define SAVE_USER true Modified: trunk/src/client/gui/pawscontainerdescwindow.cpp =================================================================== --- trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -26,6 +26,7 @@ // CLIENT INCLUDES #include "pscelclient.h" +#include "psclientchar.h" // PAWS INCLUDES #include "pawscontainerdescwindow.h" Modified: trunk/src/client/gui/pawscraft.h =================================================================== --- trunk/src/client/gui/pawscraft.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawscraft.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -20,6 +20,7 @@ #define PAWS_CRAFT_WINDOW_HEADER #include "paws/pawswidget.h" +#include "net/cmdbase.h" class pawsSimpleTree; class pawsMultiLineTextBox; Modified: trunk/src/client/gui/pawsdetailwindow.cpp =================================================================== --- trunk/src/client/gui/pawsdetailwindow.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsdetailwindow.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -29,6 +29,7 @@ // COMMON INCLUDES #include "net/clientmsghandler.h" #include "net/messages.h" +#include "net/charmessages.h" // CLIENT INCLUDES #include "pscelclient.h" Modified: trunk/src/client/gui/pawsdetailwindow.h =================================================================== --- trunk/src/client/gui/pawsdetailwindow.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsdetailwindow.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -27,6 +27,8 @@ class pawsTextBox; class pawsMultiLineTextBox; +class GEMClientObject; + /** A simple info window that displays the position and sector of player. */ class pawsDetailWindow : public pawsWidget, public psClientNetSubscriber Modified: trunk/src/client/gui/pawsgmgui.h =================================================================== --- trunk/src/client/gui/pawsgmgui.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsgmgui.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -28,6 +28,7 @@ #include "paws/pawsstringpromptwindow.h" #include "net/cmdbase.h" #include "chatwindow.h" +#include "psclientchar.h" class pawsGmGUIWindow : public pawsWidget, public psCmdBase, public iOnStringEnteredAction { Modified: trunk/src/client/gui/pawsilluminationwindow.h =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsilluminationwindow.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -20,6 +20,7 @@ #ifndef PAWS_SKETCH_WINDOW_HEADER #define PAWS_SKETCH_WINDOW_HEADER +#include "net/cmdbase.h" #include "paws/pawswidget.h" #include "paws/pawscolorpromptwindow.h" #include "paws/pawsstringpromptwindow.h" Modified: trunk/src/client/gui/pawsinteractwindow.cpp =================================================================== --- trunk/src/client/gui/pawsinteractwindow.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsinteractwindow.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -32,6 +32,7 @@ // CLIENT INCLUDES #include "pscelclient.h" +#include "psclientchar.h" // PAWS INCLUDES #include "pawsinteractwindow.h" Modified: trunk/src/client/gui/pawsmerchantwindow.h =================================================================== --- trunk/src/client/gui/pawsmerchantwindow.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawsmerchantwindow.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -22,6 +22,7 @@ #include <csutil/csstring.h> +#include "net/cmdbase.h" #include "paws/pawswidget.h" #include "paws/pawslistbox.h" #include "paws/pawsnumberpromptwindow.h" Modified: trunk/src/client/gui/pawswritingwindow.h =================================================================== --- trunk/src/client/gui/pawswritingwindow.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/pawswritingwindow.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -15,27 +15,28 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - */ - - #ifndef PAWSWRITINGWINDOW_H - #define PAWSWRITINGWINDOW_H - - #include "paws/pawswidget.h" - #include "paws/pawstextbox.h" - #include "paws/pawsstringpromptwindow.h" +*/ - #define MAX_TITLE_LEN 50 - #define MAX_CONTENT_LEN 65450 +#ifndef PAWSWRITINGWINDOW_H +#define PAWSWRITINGWINDOW_H - class pawsEditTextBox; - /** - lalalala - */ - - class pawsWritingWindow: public pawsWidget, public psClientNetSubscriber, public iOnStringEnteredAction - /* la? */ - { - /* la. */ +#include "net/cmdbase.h" +#include "paws/pawswidget.h" +#include "paws/pawstextbox.h" +#include "paws/pawsstringpromptwindow.h" + +#define MAX_TITLE_LEN 50 +#define MAX_CONTENT_LEN 65450 + +class pawsEditTextBox; +/** +lalalala +*/ + +class pawsWritingWindow: public pawsWidget, public psClientNetSubscriber, public iOnStringEnteredAction +/* la? */ +{ +/* la. */ public: //not only load from XML but also dynamically activate widgety things based on //the inks & pens that the server sends us Modified: trunk/src/client/gui/psmainwidget.cpp =================================================================== --- trunk/src/client/gui/psmainwidget.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/psmainwidget.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -57,6 +57,7 @@ #include "pscharcontrol.h" #include "actionhandler.h" #include "pawsgameboard.h" +#include "psclientchar.h" #define DEFAULT_CONFIG_FILE_NAME "/planeshift/data/options/entityinter_def.xml" Modified: trunk/src/client/gui/shortcutwindow.cpp =================================================================== --- trunk/src/client/gui/shortcutwindow.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/gui/shortcutwindow.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -47,6 +47,7 @@ //============================================================================= #include "shortcutwindow.h" #include "pscelclient.h" +#include "psclientchar.h" #define COMMAND_FILE "/planeshift/userdata/options/shortcutcommands.xml" #define DEFAULT_COMMAND_FILE "/planeshift/data/options/shortcutcommands_def.xml" Modified: trunk/src/client/guihandler.cpp =================================================================== --- trunk/src/client/guihandler.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/guihandler.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -37,8 +37,10 @@ //============================================================================= // Local Includes //============================================================================= +#include "paws/pawsmanager.h" #include "guihandler.h" #include "globals.h" +#include "psinventorycache.h" GUIHandler::GUIHandler() Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/pscamera.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -65,6 +65,7 @@ #include "pscharcontrol.h" #include "globals.h" #include "shadowmanager.h" +#include "psclientchar.h" psCamera::psCamera() Modified: trunk/src/client/psclientchar.cpp =================================================================== --- trunk/src/client/psclientchar.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psclientchar.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -22,6 +22,7 @@ * the details involved about a player. */ #include <psconfig.h> +#include "psclientchar.h" //============================================================================= // Crystal Space Includes //============================================================================= @@ -62,7 +63,6 @@ //============================================================================= // Local Includes //============================================================================= -#include "psclientchar.h" #include "pscharcontrol.h" #include "pscelclient.h" #include "charapp.h" Modified: trunk/src/client/psclientchar.h =================================================================== --- trunk/src/client/psclientchar.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psclientchar.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -26,6 +26,7 @@ #include <iutil/document.h> #include <csutil/refarr.h> #include <imesh/spritecal3d.h> +#include <csgeom/vector4.h> //============================================================================= // Project Includes Modified: trunk/src/client/psclientdr.cpp =================================================================== --- trunk/src/client/psclientdr.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psclientdr.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -46,11 +46,8 @@ #include "clientvitals.h" #include "psnetmanager.h" #include "globals.h" +#include "psclientchar.h" - - -#define LINMOVE_IGNORECHEATS false - //////////////////////////////////////////////////////////////////////////// // PAWS INCLUDES //////////////////////////////////////////////////////////////////////////// Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psengine.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -61,6 +61,8 @@ ////////////////////////////////////////////////////////////////////////////// +#include "psengine.h" + // CS files #include <imap/services.h> #include <iutil/cfgmgr.h> @@ -81,7 +83,6 @@ #include <csutil/event.h> #include "globals.h" -#include "psengine.h" #include "pscharcontrol.h" #include "pscamera.h" #include "psslotmgr.h" Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psengine.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -19,18 +19,18 @@ #ifndef __ENGINE_H__ #define __ENGINE_H__ +#include <csutil/csstring.h> +#include <csutil/randomgen.h> +#include <csutil/refarr.h> #include <csutil/sysfunc.h> -#include <csutil/csstring.h> #include <csutil/leakguard.h> #include <csutil/eventhandlers.h> #include <csutil/weakrefarr.h> +#include <csutil/weakreferenced.h> #include <ivaria/profile.h> +#include <ivideo/graph3d.h> #include <iutil/eventh.h> -#include "paws/pawsmanager.h" -#include "paws/psmousebinds.h" -#include "psclientchar.h" -#include "psinventorycache.h" #include "psnetmanager.h" #include "util/slots.h" @@ -39,19 +39,20 @@ class ClientMsgHandler; class psClientCharManager; struct iBgLoader; -struct iCommandLineParser; struct iConfigManager; struct iDialogManager; +struct iDocumentSystem; struct iEngine; struct iEvent; struct iEventQueue; -struct iMeshFactoryWrapper; -struct iThreadedLoader; +struct iGraphics2D; +struct iGraphics3D; struct iSceneManipulate; struct iSoundManager; +struct iTextureManager; +struct iThreadReturn; struct iVFS; struct iVirtualClock; -struct iWorld; class ModeHandler; class ActionHandler; class ZoneHandler; @@ -64,16 +65,15 @@ class psQuestionClient; class psOptions; class psCSSetup; +class psMouseBinds; +class psInventoryCache; +class PawsManager; // Networking classes -class psNetConnection; class ClientMsgHandler; -class psAuthenticationClient; class psNetManager; class psSlotManager; -class GEMClientObject; -class GEMClientActor; class GUIHandler; struct DelayedLoader : public CS::Utility::WeakReferenced @@ -141,7 +141,7 @@ void UpdatePerFrame(); /// Wait to finish drawing the current frame. - inline void FinishFrame() + void FinishFrame() { g3d->FinishDraw(); g3d->Print(NULL); Modified: trunk/src/client/psinventorycache.cpp =================================================================== --- trunk/src/client/psinventorycache.cpp 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psinventorycache.cpp 2009-10-01 21:17:13 UTC (rev 4598) @@ -17,6 +17,7 @@ */ #include <psconfig.h> +#include "paws/pawsmanager.h" #include "net/messages.h" #include "psinventorycache.h" #include "globals.h" Modified: trunk/src/client/psmovement.h =================================================================== --- trunk/src/client/psmovement.h 2009-10-01 20:43:28 UTC (rev 4597) +++ trunk/src/client/psmovement.h 2009-10-01 21:17:13 UTC (rev 4598) @@ -26,8 +26,8 @@ #include "net/cmdbase.h" class psControlManager; +struct psPoint; - /** An entity's translational and angular velocity. * * Contains vectors for 3-dimensional movement and rotation. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-10-03 18:53:18
|
Revision: 4611 http://planeshift.svn.sourceforge.net/planeshift/?rev=4611&view=rev Author: Khakilord Date: 2009-10-03 18:53:05 +0000 (Sat, 03 Oct 2009) Log Message: ----------- Removed more unneeded #include client dependencies. Modified Paths: -------------- trunk/src/client/chatbubbles.h trunk/src/client/cmdadmin.h trunk/src/client/cmdguilds.h trunk/src/client/cmdutil.h trunk/src/client/guihandler.h trunk/src/client/modehandler.h trunk/src/client/zonehandler.h Modified: trunk/src/client/chatbubbles.h =================================================================== --- trunk/src/client/chatbubbles.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/chatbubbles.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -36,7 +36,6 @@ //============================================================================= // Local Includes //============================================================================= -#include "psengine.h" //these are special cases used to manage /me /my configurations in chat bubbles #define CHATBUBBLE_ME -2 Modified: trunk/src/client/cmdadmin.h =================================================================== --- trunk/src/client/cmdadmin.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/cmdadmin.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -29,8 +29,6 @@ //============================================================================= #include "net/cmdbase.h" -#include "paws/pawswidget.h" - //============================================================================= // Local Includes //============================================================================= Modified: trunk/src/client/cmdguilds.h =================================================================== --- trunk/src/client/cmdguilds.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/cmdguilds.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -26,8 +26,6 @@ //============================================================================= // Project Includes //============================================================================= -#include "paws/pawsmanager.h" - #include "net/cmdbase.h" //============================================================================= Modified: trunk/src/client/cmdutil.h =================================================================== --- trunk/src/client/cmdutil.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/cmdutil.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -28,12 +28,11 @@ //============================================================================= #include "net/cmdbase.h" -#include "util/strutil.h" - //============================================================================= // Local Includes //============================================================================= +class WordArray; /** Class to handle general player commands. */ class psUtilityCommands : public psCmdBase Modified: trunk/src/client/guihandler.h =================================================================== --- trunk/src/client/guihandler.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/guihandler.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -32,7 +32,6 @@ // Project Includes //============================================================================= #include "net/cmdbase.h" -#include "net/messages.h" //============================================================================= // Local Includes Modified: trunk/src/client/modehandler.h =================================================================== --- trunk/src/client/modehandler.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/modehandler.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -31,17 +31,14 @@ // Project Includes //============================================================================= #include "net/cmdbase.h" -#include "net/messages.h" //============================================================================= // Local Includes //============================================================================= -struct iEngineSequenceManager; struct iEngine; struct iBase; struct iSoundManager; -struct iSoundSource; struct iLoaderContext; struct LightingList; struct LightingSetting; Modified: trunk/src/client/zonehandler.h =================================================================== --- trunk/src/client/zonehandler.h 2009-10-03 13:31:04 UTC (rev 4610) +++ trunk/src/client/zonehandler.h 2009-10-03 18:53:05 UTC (rev 4611) @@ -28,8 +28,6 @@ //============================================================================= #include "net/cmdbase.h" -#include "engine/psworld.h" - //============================================================================= // Local Includes //============================================================================= @@ -38,8 +36,6 @@ // Forward Declarations //----------------------------------------------------------------------------- class MsgHandler; -class psWorld; -class PawsManager; class psCelClient; class pawsLoadWindow; class pawsProgressBar; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-10-16 14:27:41
|
Revision: 4652 http://planeshift.svn.sourceforge.net/planeshift/?rev=4652&view=rev Author: weltall2 Date: 2009-10-16 14:27:25 +0000 (Fri, 16 Oct 2009) Log Message: ----------- committed a fix for PS#2473 - Mouse look prevents from turning patch by Entur Modified Paths: -------------- trunk/src/client/psmovement.cpp trunk/src/client/psmovement.h Modified: trunk/src/client/psmovement.cpp =================================================================== --- trunk/src/client/psmovement.cpp 2009-10-15 04:18:46 UTC (rev 4651) +++ trunk/src/client/psmovement.cpp 2009-10-16 14:27:25 UTC (rev 4652) @@ -108,6 +108,8 @@ run = NULL; walk = NULL; + kbdRotate = 0; + linearMove = NULL; } @@ -361,6 +363,11 @@ run = FindCharMode("run"); walk = FindCharMode("normal"); + const psMovement* kbdrotL = FindMovement("rotate left"); + const psMovement* kbdrotR = FindMovement("rotate right"); + if (kbdrotL && kbdrotR) + kbdRotate = (1 << kbdrotL->id) | (1 << kbdrotR->id); + actormode = defaultmode = walk; ready = true; @@ -656,22 +663,19 @@ } } - if ( fabs(lastDeltaX) > 150 || fabs(lastDeltaY) > 150 ) - { // Higher values shouldn't slow down too fast - lastDeltaX *= 0.9f; - lastDeltaY *= 0.9f; - } - else if ( fabs(lastDeltaX) > 5 || fabs(lastDeltaY) > 5 ) - { - lastDeltaX *= 0.6f; - lastDeltaY *= 0.6f; - } - else - { // very slow turning. Set to 0 for more precise control. The actual mouse events will cause the turning. - lastDeltaX = 0; - lastDeltaY = 0; - } + iGraphics2D* g2d = psengine->GetG2D(); + if(activeMoves & kbdRotate) + { + lastDeltaX = 0; + lastDeltaY = 0; + g2d->SetMousePosition(g2d->GetWidth() / 2 , g2d->GetHeight() / 2); + return; + } + + lastDeltaX *= lastDeltaX / g2d->GetWidth() + 0.5f; + lastDeltaY *= lastDeltaY / g2d->GetHeight() + 0.5f; + float deltaPitch = lastDeltaY * (sensY/25000.0f) * (invertedMouse ? 1.0f : -1.0f); float deltaYaw; @@ -712,6 +716,14 @@ float deltaX = float(mouseX - centerX); float deltaY = float(mouseY - centerY); + if (activeMoves & kbdRotate) + { + lastDeltaX = 0; + lastDeltaY = 0; + g2d->SetMousePosition(centerX, centerY); + return; + } + if ( deltaX == 0 && deltaY == 0) {// No actual event but caused by reseting the mouse position return; Modified: trunk/src/client/psmovement.h =================================================================== --- trunk/src/client/psmovement.h 2009-10-15 04:18:46 UTC (rev 4651) +++ trunk/src/client/psmovement.h 2009-10-16 14:27:25 UTC (rev 4652) @@ -132,6 +132,7 @@ const psCharMode* run; const psCharMode* walk; + uint kbdRotate; psLinearMovement* linearMove; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-10-23 06:54:19
|
Revision: 4670 http://planeshift.svn.sourceforge.net/planeshift/?rev=4670&view=rev Author: kennygraunke Date: 2009-10-23 06:54:09 +0000 (Fri, 23 Oct 2009) Log Message: ----------- Moved psCharAppearance from GEMClientObject to GEMClientActor, where it belongs; also now protected. Modified Paths: -------------- trunk/src/client/gui/inventorywindow.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h trunk/src/client/psclientchar.cpp Modified: trunk/src/client/gui/inventorywindow.cpp =================================================================== --- trunk/src/client/gui/inventorywindow.cpp 2009-10-23 05:55:57 UTC (rev 4669) +++ trunk/src/client/gui/inventorywindow.cpp 2009-10-23 06:54:09 UTC (rev 4670) @@ -234,7 +234,7 @@ spstate->SetVelocity(0.0,&psengine->GetRandomGen()); } - charApp->Clone(actor->charApp); + charApp->Clone(actor->CharAppearance()); charApp->SetMesh(widget->GetObject()); charApp->ApplyTraits(actor->traits); Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-10-23 05:55:57 UTC (rev 4669) +++ trunk/src/client/pscelclient.cpp 2009-10-23 06:54:09 UTC (rev 4670) @@ -1035,7 +1035,6 @@ shadow = 0; hasShadow = true; flags = 0; - charApp = new psCharAppearance(psengine->GetObjectRegistry()); } GEMClientObject::GEMClientObject(psCelClient* cel, EID id) : eid(id) @@ -1048,7 +1047,6 @@ entitylabel = NULL; shadow = 0; hasShadow = true; - charApp = new psCharAppearance(psengine->GetObjectRegistry()); } GEMClientObject::~GEMClientObject() @@ -1059,8 +1057,6 @@ cel->UnattachObject(pcmesh->QueryObject(), this); psengine->GetEngine()->RemoveObject (pcmesh); } - - delete charApp; } int GEMClientObject::GetMasqueradeType(void) @@ -1299,6 +1295,8 @@ post_load->ang_vel = mesg.ang_vel; post_load->texParts = mesg.texParts; + charApp = new psCharAppearance(psengine->GetObjectRegistry()); + if (helmGroup.Length() == 0) helmGroup = factName; @@ -1328,6 +1326,7 @@ { delete vitalManager; delete linmove; + delete charApp; } void GEMClientActor::PostLoad(bool nullmesh) Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-10-23 05:55:57 UTC (rev 4669) +++ trunk/src/client/pscelclient.h 2009-10-23 06:54:09 UTC (rev 4670) @@ -386,8 +386,6 @@ */ int Flags() { return flags; } - psCharAppearance* charApp; - /** Get the mesh that this object has. * @return The iMeshWrapper or 0 if no mesh. */ @@ -493,6 +491,8 @@ void SetDRData(psDRMessage& drmsg); void StopMoving(bool worldVel = false); + psCharAppearance* CharAppearance() { return charApp; } + psLinearMovement * linmove; /// The Vital of the player with regards to his health/mana/fatigue/etc. @@ -554,6 +554,7 @@ virtual void Update(); protected: + psCharAppearance* charApp; unsigned int chatBubbleID; unsigned int groupID; Modified: trunk/src/client/psclientchar.cpp =================================================================== --- trunk/src/client/psclientchar.cpp 2009-10-23 05:55:57 UTC (rev 4669) +++ trunk/src/client/psclientchar.cpp 2009-10-23 06:54:09 UTC (rev 4670) @@ -294,8 +294,8 @@ psTraitChangeMessage mesg(me); EID objectID = mesg.target; - GEMClientObject* object = (GEMClientObject *)psengine->GetCelClient()->FindObject(objectID); - if (!object) + GEMClientActor *actor = dynamic_cast<GEMClientActor*>(psengine->GetCelClient()->FindObject(objectID)); + if (!actor) { Error2("Got trait change for %s, but couldn't find it!", ShowID(objectID)); return; @@ -303,7 +303,7 @@ // Update main object //psengine->BuildAppearance( object->pcmesh->GetMesh(), mesg.string ); - object->charApp->ApplyTraits(mesg.string); + actor->CharAppearance()->ApplyTraits(mesg.string); // Update any doll views registered for changes csArray<iPAWSSubscriber*> dolls = PawsManager::GetSingleton().ListSubscribers("sigActorUpdate"); @@ -321,7 +321,7 @@ { iMeshWrapper* dollObject = doll->GetObject(); psCharAppearance p(psengine->GetObjectRegistry()); - p.Clone(object->charApp); + p.Clone(actor->CharAppearance()); p.SetMesh(dollObject); p.ApplyTraits(mesg.string); @@ -443,7 +443,7 @@ if (equip.type == psEquipmentMessage::EQUIP) { // Update the actor - object->charApp->Equip(slotname,equip.mesh,equip.part,equip.partMesh,equip.texture); + object->CharAppearance()->Equip(slotname,equip.mesh,equip.part,equip.partMesh,equip.texture); // Update any doll views registered for changes csArray<iPAWSSubscriber*> dolls = PawsManager::GetSingleton().ListSubscribers("sigActorUpdate"); @@ -464,7 +464,7 @@ continue; } psCharAppearance* p = doll->GetCharApp(); - p->Clone(object->charApp); + p->Clone(object->CharAppearance()); p->SetMesh(dollObject); p->Equip(slotname,equip.mesh,equip.part,equip.partMesh,equip.texture); } @@ -494,12 +494,12 @@ psCharAppearance* p = doll->GetCharApp(); p->SetMesh(dollObject); - p->Clone(object->charApp); + p->Clone(object->CharAppearance()); p->Dequip(slotname,equip.mesh,equip.part,equip.partMesh,equip.texture); } } - object->charApp->Dequip(slotname,equip.mesh,equip.part,equip.partMesh,equip.texture); + object->CharAppearance()->Dequip(slotname,equip.mesh,equip.part,equip.partMesh,equip.texture); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-10-23 11:25:36
|
Revision: 4676 http://planeshift.svn.sourceforge.net/planeshift/?rev=4676&view=rev Author: kennygraunke Date: 2009-10-23 11:25:25 +0000 (Fri, 23 Oct 2009) Log Message: ----------- Minor cleaning: change some bool returns to void, avoid pointless csString temporaries Modified Paths: -------------- trunk/src/client/charapp.cpp trunk/src/client/charapp.h trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/charapp.cpp =================================================================== --- trunk/src/client/charapp.cpp 2009-10-23 11:15:25 UTC (rev 4675) +++ trunk/src/client/charapp.cpp 2009-10-23 11:25:25 UTC (rev 4676) @@ -452,7 +452,7 @@ socket->SetTransform( csTransform(csZRotMatrix3(rot_z)*csYRotMatrix3(rot_y)*csXRotMatrix3(rot_x), csVector3(trans_x,trans_y,trans_z)) ); } -void psCharAppearance::ApplyEquipment(csString& equipment) +void psCharAppearance::ApplyEquipment(const csString& equipment) { if ( equipment.Length() == 0 ) { @@ -896,7 +896,7 @@ } } -void psCharAppearance::ApplyTraits(csString& traitString) +void psCharAppearance::ApplyTraits(const csString& traitString) { if ( traitString.Length() == 0 ) { Modified: trunk/src/client/charapp.h =================================================================== --- trunk/src/client/charapp.h 2009-10-23 11:15:25 UTC (rev 4675) +++ trunk/src/client/charapp.h 2009-10-23 11:25:25 UTC (rev 4676) @@ -116,13 +116,13 @@ * @param traits The XML formated string that has a list of the traits * to apply. */ - void ApplyTraits(csString& traits); + void ApplyTraits(const csString& traits); /** Apply a set of equipment based on a XML string. * @param traits The XML formated string that has a list of the equipment * to apply. */ - void ApplyEquipment(csString& equipment); + void ApplyEquipment(const csString& equipment); /** Handle the visual aspect of mounting, by attaching the rider's mesh * on the back of the mount Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-10-23 11:15:25 UTC (rev 4675) +++ trunk/src/client/pscelclient.cpp 2009-10-23 11:25:25 UTC (rev 4676) @@ -1064,7 +1064,7 @@ return type; } -bool GEMClientObject::SetPosition(const csVector3 & pos, float rot, iSector * sector) +void GEMClientObject::SetPosition(const csVector3 & pos, float rot, iSector * sector) { if(pcmesh.IsValid()) { @@ -1093,9 +1093,6 @@ position->SetValue(pcmesh->GetMovable()->GetTransform()); } } - - return true; - } void GEMClientObject::Rotate(float xRot, float yRot, float zRot) @@ -1628,25 +1625,19 @@ } -bool GEMClientActor::SetPosition(const csVector3 & pos, float rot, iSector * sector) +void GEMClientActor::SetPosition(const csVector3 & pos, float rot, iSector * sector) { if (linmove) linmove->SetPosition(pos, rot, sector); - return true; } -bool GEMClientActor::InitCharData( const char* traits, const char* equipment ) +void GEMClientActor::InitCharData(const char* traits, const char* equipment) { - this->traits = traits; this->equipment = equipment; - csString trt(traits); - csString equip(equipment); - - charApp->ApplyTraits(trt); - charApp->ApplyEquipment(equip); - return true; + charApp->ApplyTraits(this->traits); + charApp->ApplyEquipment(this->equipment); } psLinearMovement * GEMClientActor::GetMovement() Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-10-23 11:15:25 UTC (rev 4675) +++ trunk/src/client/pscelclient.h 2009-10-23 11:25:25 UTC (rev 4676) @@ -341,7 +341,7 @@ void Rotate(float xRot, float yRot, float zRot); /** Set position of entity */ - virtual bool SetPosition(const csVector3 & pos, float rot, iSector * sector); + virtual void SetPosition(const csVector3& pos, float rot, iSector* sector); /** Get position of entity */ virtual csVector3 GetPosition(); @@ -467,7 +467,7 @@ */ const csVector3 GetVelocity () const; - virtual bool SetPosition(const csVector3 & pos, float rot, iSector * sector); + virtual void SetPosition(const csVector3& pos, float rot, iSector* sector); void SetAlive( bool aliveFlag, bool newactor ); virtual bool IsAlive() { return alive; } @@ -568,7 +568,7 @@ bool InitLinMove(const csVector3& pos,float angle, const char* sector, csVector3 top, csVector3 bottom, csVector3 offset); - bool InitCharData(const char* textures, const char* equipment); + void InitCharData(const char* textures, const char* equipment); bool alive; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-10-25 16:18:05
|
Revision: 4695 http://planeshift.svn.sourceforge.net/planeshift/?rev=4695&view=rev Author: mgist Date: 2009-10-25 16:17:54 +0000 (Sun, 25 Oct 2009) Log Message: ----------- - Fixed sequence and trigger loading. Requires CS revision 33094. Revision Links: -------------- http://planeshift.svn.sourceforge.net/planeshift/?rev=33094&view=rev Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/modehandler.cpp trunk/src/client/modehandler.h Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-10-25 11:46:08 UTC (rev 4694) +++ trunk/src/client/bgloader/loader.cpp 2009-10-25 16:17:54 UTC (rev 4695) @@ -191,6 +191,10 @@ // Zone for this file. csRef<Zone> zone; + // Lights and sequences in this file (for sequences and triggers). + csHash<Light*, csStringID> lights; + csHash<Sequence*, csStringID> sequences; + // Restores any directory changes. csVfsDirectoryChanger dirchange(vfs); @@ -1073,6 +1077,7 @@ { node = nodeItr2->Next(); csRef<Light> l = csPtr<Light>(new Light(node->GetAttributeValue("name"))); + lights.Put(sStringSet.Request(l->name), l); if(node->GetNode("attenuation")) { @@ -1140,6 +1145,64 @@ syntaxService->ParseVector(node->GetNode("position"), startPos->position); startPositions.Push(startPos); } + + node = root->GetNode("sequences"); + if(node.IsValid()) + { + nodeItr = node->GetNodes("sequence"); + while(nodeItr->HasNext()) + { + node = nodeItr->Next(); + csRef<Sequence> seq = csPtr<Sequence>(new Sequence(node->GetAttributeValue("name"), node)); + sequences.Put(sStringSet.Request(seq->name), seq); + + bool loaded = false; + csRef<iDocumentNodeIterator> nodes = node->GetNodes("setambient"); + if(nodes->HasNext()) + { + csRef<iDocumentNode> type = nodes->Next(); + csRef<Sector> sec = sectorHash.Get(sStringSet.Request(type->GetAttributeValue("sector")), csRef<Sector>()); + sec->sequences.Push(seq); + loaded = true; + } + + nodes = node->GetNodes("fadelight"); + if(nodes->HasNext()) + { + csRef<iDocumentNode> type = nodes->Next(); + csRef<Light> l = lights.Get(sStringSet.Request(type->GetAttributeValue("light")), csRef<Light>()); + l->sequences.Push(seq); + loaded = true; + } + + nodes = node->GetNodes("rotate"); + if(nodes->HasNext()) + { + csRef<iDocumentNode> type = nodes->Next(); + csRef<MeshObj> l = meshes.Get(meshStringSet.Request(type->GetAttributeValue("mesh")), csRef<MeshObj>()); + l->sequences.Push(seq); + loaded = true; + } + + CS_ASSERT_MSG("Unknown sequence type!", loaded); + } + } + + node = root->GetNode("triggers"); + if(node.IsValid()) + { + nodeItr = node->GetNodes("trigger"); + while(nodeItr->HasNext()) + { + node = nodeItr->Next(); + const char* seqname = node->GetNode("fire")->GetAttributeValue("sequence"); + csRef<Sequence> sequence = sequences.Get(sStringSet.Request(seqname), csRef<Sequence>()); + CS_ASSERT_MSG("Unknown sequence in trigger!", sequence.IsValid()); + + csRef<Trigger> trigger = csPtr<Trigger>(new Trigger(node->GetAttributeValue("name"), node)); + sequence->triggers.Push(trigger); + } + } } // Wait for plugin and shader loads to finish. @@ -1716,8 +1779,18 @@ sector->lights[i]->radius, sector->lights[i]->colour, sector->lights[i]->dynamic); sector->lights[i]->object->SetAttenuationMode(sector->lights[i]->attenuation); sector->lights[i]->object->SetType(sector->lights[i]->type); - sector->object->AddLight(sector->lights[i]->object); + sector->object->GetLights()->Add(sector->lights[i]->object); ++sector->objectCount; + + // Load all light sequences. + for(size_t j=0; j<sector->lights[i]->sequences.GetSize(); ++j) + { + tloader->LoadNodeWait(vfs->GetCwd(), sector->lights[i]->sequences[j]->data); + for(size_t k=0; j<sector->lights[i]->sequences[j]->triggers.GetSize(); ++k) + { + tloader->LoadNode(vfs->GetCwd(), sector->lights[i]->sequences[j]->triggers[k]->data); + } + } } else if(sector->lights[i]->OutOfRange(unloadBox)) { @@ -1727,7 +1800,13 @@ } } - // Check whether this sector is empty and should be unloaed. + // Load all sector sequences. + for(size_t i=0; i<sector->sequences.GetSize(); i++) + { + tloader->LoadNode(vfs->GetCwd(), sector->sequences[i]->data); + } + + // Check whether this sector is empty and should be unloaded. if(sector->objectCount == sector->alwaysLoadedCount && sector->object.IsValid()) { // Unload all 'always loaded' meshes before destroying sector. @@ -1867,12 +1946,85 @@ } } - if(ready && !mesh->status) + if(ready) { - mesh->status = tloader->LoadNode(mesh->path, mesh->data); + if(!mesh->status) + mesh->status = tloader->LoadNode(mesh->path, mesh->data); + + ready = mesh->status->IsFinished(); } - return (mesh->status && mesh->status->IsFinished()); + // Load sequences. + if(ready) + { + for(size_t i=0; i<mesh->sequences.GetSize(); ++i) + { + if(mesh->sequences[i]->loaded) + continue; + + if(!mesh->sequences[i]->status) + { + mesh->sequences[i]->status = tloader->LoadNode(mesh->path, mesh->sequences[i]->data); + ready = false; + } + else + { + if(ready && mesh->sequences[i]->status->IsFinished()) + { + if(!mesh->sequences[i]->status->WasSuccessful()) + { + csString msg; + msg.Format("Sequence '%s' in mesh '%s' failed to load.\n", mesh->sequences[i]->name.GetData(), mesh->name.GetData()); + CS_ASSERT_MSG(msg.GetData(), false); + } + + mesh->sequences[i]->loaded = true; + mesh->sequences[i]->status.Invalidate(); + } + else + ready = false; + } + } + } + + // Load triggers + if(ready) + { + for(size_t i=0; i<mesh->sequences.GetSize(); ++i) + { + for(size_t j=0; j<mesh->sequences[i]->triggers.GetSize(); ++j) + { + if(mesh->sequences[i]->triggers[j]->loaded) + continue; + + if(!mesh->sequences[i]->triggers[j]->status) + { + mesh->sequences[i]->triggers[j]->status = tloader->LoadNode(mesh->path, mesh->sequences[i]->triggers[j]->data); + ready = false; + } + else + { + if(ready && mesh->sequences[i]->triggers[j]->status->IsFinished()) + { + if(!mesh->sequences[i]->triggers[j]->status->WasSuccessful()) + { + csString msg; + msg.Format("Trigger '%s' in mesh '%s' failed to load.\n", + mesh->sequences[i]->triggers[j]->name.GetData(), mesh->name.GetData()); + CS_ASSERT_MSG(msg.GetData(), false); + } + + mesh->sequences[i]->triggers[j]->loaded = true; + mesh->sequences[i]->triggers[j]->status.Invalidate(); + } + else + ready = false; + } + } + } + } + + return ready; } bool BgLoader::LoadMeshFact(MeshFact* meshfact, bool wait) Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-10-25 11:46:08 UTC (rev 4694) +++ trunk/src/client/bgloader/loader.h 2009-10-25 16:17:54 UTC (rev 4695) @@ -211,6 +211,7 @@ class MeshObj; class Portal; class Light; + class Sequence; class Zone; // The various gfx feature options we have. @@ -344,6 +345,7 @@ csRefArray<Portal> portals; csRefArray<Portal> activePortals; csRefArray<Light> lights; + csRefArray<Sequence> sequences; csArray<WaterArea*> waterareas; }; @@ -412,6 +414,7 @@ csRefArray<MeshFact> meshfacts; csArray<bool> mftchecked; Sector* sector; + csRefArray<Sequence> sequences; }; class Portal : public CS::Utility::FastRefCount<Portal> @@ -476,8 +479,38 @@ csLightAttenuationMode attenuation; csLightType type; csBox3 bbox; + csRefArray<Sequence> sequences; }; + class Trigger : public CS::Utility::FastRefCount<Trigger> + { + public: + Trigger(const char* name, iDocumentNode* data) : name(name), loaded(false), + data(data) + { + } + + csString name; + bool loaded; + csRef<iDocumentNode> data; + csRef<iThreadReturn> status; + }; + + class Sequence : public CS::Utility::FastRefCount<Sequence> + { + public: + Sequence(const char* name, iDocumentNode* data) : name(name), loaded(false), + data(data) + { + } + + csString name; + bool loaded; + csRef<iDocumentNode> data; + csRefArray<Trigger> triggers; + csRef<iThreadReturn> status; + }; + /***********************************************************************/ /* Internal unloading methods. */ Modified: trunk/src/client/modehandler.cpp =================================================================== --- trunk/src/client/modehandler.cpp 2009-10-25 11:46:08 UTC (rev 4694) +++ trunk/src/client/modehandler.cpp 2009-10-25 16:17:54 UTC (rev 4695) @@ -130,6 +130,10 @@ last_weather_update = csGetTicks(); weather_update_time = 100; + + lightningreset = engine->GetVariableList()->New(); + lightningreset->SetName("lightning reset"); + lightningreset->SetColor(csColor(0.0f)); } ModeHandler::~ModeHandler() @@ -928,12 +932,7 @@ iSector *sector = engine->FindSector(info.sector); if (sector) { - csColor bg = sector->GetDynamicAmbientLight(); - iSharedVariable *var = engine->GetVariableList()->FindByName("lightning reset"); - if (var) - { - var->SetColor(bg); - } + lightningreset->SetColor(sector->GetDynamicAmbientLight()); } // Run the lightning sequence. Modified: trunk/src/client/modehandler.h =================================================================== --- trunk/src/client/modehandler.h 2009-10-25 11:46:08 UTC (rev 4694) +++ trunk/src/client/modehandler.h 2009-10-25 16:17:54 UTC (rev 4695) @@ -171,6 +171,9 @@ csString sound_name; csTicks sound_when; + // Lighting variable. + csRef<iSharedVariable> lightningreset; + // Weather intepolation stuff csTicks last_weather_update; csTicks weather_update_time; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-10-30 06:31:08
|
Revision: 4699 http://planeshift.svn.sourceforge.net/planeshift/?rev=4699&view=rev Author: kennygraunke Date: 2009-10-30 06:30:57 +0000 (Fri, 30 Oct 2009) Log Message: ----------- Sets up a temporary nullmesh for new actors while the real art is being loaded. With this change, linmove can be initialized right away, allowing position to be set and accessed immediately. This means that systems like psMovement or psCamera can simply use actors, without needing special checks to detect partially initialized actors. Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h trunk/src/client/pscharcontrol.cpp trunk/src/client/psengine.cpp trunk/src/client/psmovement.cpp trunk/src/client/psmovement.h Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/pscamera.cpp 2009-10-30 06:30:57 UTC (rev 4699) @@ -253,7 +253,7 @@ npcOldRot = npcrot; // decide to turn clockwise or counterclockwise (angle < 180 degrees) vel = ((angle-npcrot) < PI) ? 3.0f : -3.0f; - target->GetMovement()->SetAngularVelocity(-vel, csVector3(0.0f, angle, 0.0f)); + target->Movement().SetAngularVelocity(-vel, csVector3(0.0f, angle, 0.0f)); } npcModeTarget = target; @@ -1434,7 +1434,7 @@ // Check that we still have the same npc targeted, and that we did not move if (npcModeTarget != clientChar->GetTarget() || npcModePosition != actor->GetMesh()->GetMovable()->GetFullPosition()) { - npcModeTarget->GetMovement()->SetAngularVelocity(vel, csVector3(0.0f, npcOldRot, 0.0f)); + npcModeTarget->Movement().SetAngularVelocity(vel, csVector3(0.0f, npcOldRot, 0.0f)); SetCameraMode(lastCameraMode); break; } Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/pscelclient.cpp 2009-10-30 06:30:57 UTC (rev 4699) @@ -57,7 +57,6 @@ #include "engine/psworld.h" #include "engine/solid.h" -#include "engine/linmove.h" #include "engine/colldet.h" #include "net/messages.h" @@ -223,10 +222,7 @@ bool psCelClient::IsReady() { - if (local_player == NULL || local_player->linmove == NULL) - return false; - else - return true; + return local_player != NULL; } void psCelClient::HandleWorld( MsgEntry* me ) @@ -865,7 +861,7 @@ if(actor) { // This will disable CD algorithms temporarily - actor->GetMovement()->SetOnGround(true); + actor->Movement().SetOnGround(true); if (actor == local_player && psengine->GetCharControl()) psengine->GetCharControl()->GetMovementManager()->StopAllMovement(); @@ -904,7 +900,7 @@ GEMClientActor* actor = dynamic_cast<GEMClientActor*> (pos->entity); if(actor) // we are now in a physical sector - actor->GetMovement()->SetOnGround(false); + actor->Movement().SetOnGround(false); delete *posIter; unresPos.Delete(posIter); @@ -915,7 +911,7 @@ } GEMClientActor* actor = GetMainPlayer(); if (actor) - actor->GetMovement()->SetOnGround(false); + actor->Movement().SetOnGround(false); } void psCelClient::PruneEntities() @@ -941,11 +937,11 @@ if (actor) { csVector3 vel; - vel = actor->GetMovement()->GetVelocity(); + vel = actor->Movement().GetVelocity(); if (vel.y < -50) // Large speed puts too much stress on CPU { Debug3(LOG_ANY, 0, "Disabling CD on actor %s(%s)", actor->GetName(), ShowID(actor->GetEID())); - actor->GetMovement()->SetOnGround(false); + actor->Movement().SetOnGround(false); // Reset velocity actor->StopMoving(true); } @@ -1172,39 +1168,17 @@ cel->HandleUnresolvedPos(this, pos, rotangle, room); } -bool GEMClientObject::InitMesh() +void GEMClientObject::SubstituteRacialMeshFact() { - // Check for nullmesh. - if(factName == "nullmesh") - { - csRef<iMeshFactoryWrapper> nullmesh = psengine->GetEngine()->FindMeshFactory("nullmesh"); - if(!nullmesh) - { - nullmesh = psengine->GetEngine()->CreateMeshFactory("crystalspace.mesh.object.null", "nullmesh"); - csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullmesh->GetMeshObjectFactory()); - csBox3 bbox; - bbox.AddBoundingVertex(csVector3(0.0f)); - nullstate->SetBoundingBox(bbox); - } - - pcmesh = psengine->GetEngine()->CreateMeshWrapper(nullmesh, name); - pcmesh->GetFlags().Set(CS_ENTITY_NODECAL); - cel->AttachObject(pcmesh->QueryObject(), this); - hasShadow = false; - - PostLoad(true); - - return true; - } - - // Helm/bracer Mesh Check - // If there is helm/bracer specific item and we don't have any race yet, fall back to - // the stonebreaker model + // Items like helmets, bracers, etc. have racial specific meshes. + // We substitute for the main player's race here, both so it'll be + // the right one when equipped, but also so if the player drops it, + // it continues to look the same as it did before csString HelmReplacement("stonebm"); csString BracerReplacement("stonebm"); csString BeltReplacement("stonebm"); csString CloakReplacement("stonebm"); - if ( cel->GetMainPlayer() ) + if (cel->GetMainPlayer()) { HelmReplacement = cel->GetMainPlayer()->helmGroup; BracerReplacement = cel->GetMainPlayer()->BracerGroup; @@ -1218,14 +1192,22 @@ if(matName.Length() && matName.Find("$F") != (size_t) -1) matName.Empty(); +} - // Set up callback. - psengine->RegisterDelayedLoader(this); +void GEMClientObject::LoadMesh() +{ + SubstituteRacialMeshFact(); - // Check if the mesh is already loaded. - CheckLoadStatus(); + // Start loading the real artwork in the background (if necessary). + // When done, the nullmesh will be swapped out for the real one. + if (factName != "nullmesh") + { + // Set up callback. + psengine->RegisterDelayedLoader(this); - return true; + // Check if the mesh is already loaded. + CheckLoadStatus(); + } } void GEMClientObject::ChangeName(const char* name) @@ -1249,7 +1231,7 @@ } GEMClientActor::GEMClientActor( psCelClient* cel, psPersistActor& mesg ) - : GEMClientObject( cel, mesg.entityid ), post_load(new PostLoadData) + : GEMClientObject( cel, mesg.entityid ), linmove(psengine->GetObjectRegistry()), post_load(new PostLoadData) { chatBubbleID = 0; name = mesg.name; @@ -1264,7 +1246,6 @@ masqueradeType = mesg.masqueradeType; guildName = mesg.guild; flags = mesg.flags; - linmove = 0; groupID = mesg.groupID; gender = mesg.gender; factName = mesg.factname; @@ -1277,17 +1258,10 @@ alive = true; vitalManager = new psClientVitals; equipment = mesg.equipment; - post_load->pos = mesg.pos; - post_load->yrot = mesg.yrot; - post_load->sectorName = mesg.sectorName; post_load->top = mesg.top; post_load->bottom = mesg.bottom; post_load->offset = mesg.offset; - post_load->on_ground = mesg.on_ground; - post_load->sector = mesg.sector; post_load->vel = mesg.vel; - post_load->worldVel = mesg.worldVel; - post_load->ang_vel = mesg.ang_vel; post_load->texParts = mesg.texParts; charApp = new psCharAppearance(psengine->GetObjectRegistry()); @@ -1306,52 +1280,70 @@ Debug3(LOG_CELPERSIST, 0, "Actor %s(%s) Received", mesg.name.GetData(), ShowID(mesg.entityid)); - if (!InitMesh()) + // Set up a temporary nullmesh. The real mesh may need to be background + // loaded, but since the mesh stores position, etc., it's important to + // have something in the meantime so we can work with the object without crashing. + csRef<iMeshFactoryWrapper> nullmesh = psengine->GetEngine()->FindMeshFactory("nullmesh"); + if (!nullmesh) { - Error3("Fatal Error: Could not create actor %s(%s)", mesg.name.GetData(), ShowID(mesg.entityid)); - return; + nullmesh = psengine->GetEngine()->CreateMeshFactory("crystalspace.mesh.object.null", "nullmesh"); + csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullmesh->GetMeshObjectFactory()); + + // Give the nullmesh a 1/2m cube for a bounding box, just so it + // has something sensible while the real art's being loaded. + csBox3 bbox; + bbox.AddBoundingVertex(csVector3(0.5f)); + nullstate->SetBoundingBox(bbox); } + pcmesh = psengine->GetEngine()->CreateMeshWrapper(nullmesh, name); + //cel->AttachObject(pcmesh->QueryObject(), this); + + InitLinMove(mesg.pos, mesg.yrot, mesg.sectorName, mesg.top, mesg.bottom, mesg.offset); + if (mesg.sector != NULL) + linmove.SetDRData(mesg.on_ground, 1.0f, mesg.pos, mesg.yrot, mesg.sector, mesg.vel, mesg.worldVel, mesg.ang_vel); + else + cel->HandleUnresolvedPos(this, mesg.pos, mesg.yrot, mesg.sectorName); + + LoadMesh(); + DRcounter = 0; // mesg.counter cannot be trusted as it may have changed while the object was gone DRcounter_set = false; + lastDRUpdateTime = 0; } GEMClientActor::~GEMClientActor() { delete vitalManager; - delete linmove; delete charApp; } -void GEMClientActor::PostLoad(bool nullmesh) +void GEMClientActor::SwitchToRealMesh(iMeshWrapper* mesh) { - InitLinMove(post_load->pos, post_load->yrot, post_load->sectorName, - post_load->top, post_load->bottom, post_load->offset); - if (post_load->sector != NULL) - linmove->SetDRData(post_load->on_ground, 1.0f, post_load->pos, - post_load->yrot, post_load->sector, post_load->vel, post_load->worldVel, post_load->ang_vel); - else - cel->HandleUnresolvedPos(this, post_load->pos, post_load->yrot, post_load->sectorName); + // Switch over to the new mesh. Since collision detection info and position are + // stored in the mesh, we need to reinitialize these. + csVector3 pos; + float yrot; + iSector* sector; + linmove.GetLastPosition(pos, yrot, sector); - if(!nullmesh) - { - InitCharData(post_load->texParts, equipment); - RefreshCal3d(); - SetAnimationVelocity(post_load->vel); - SetMode(serverMode, true); - if (cel->GetMainPlayer() != this && (flags & psPersistActor::NAMEKNOWN)) - cel->GetEntityLabels()->OnObjectArrived(this); - cel->GetShadowManager()->CreateShadow(this); - } + csRef<iMeshWrapper> oldMesh = pcmesh; + pcmesh = mesh; + charApp->SetMesh(mesh); + psengine->GetEngine()->GetMeshes()->Add(pcmesh); - // Move into position - Move(post_load->pos, post_load->yrot, post_load->sectorName); + linmove.InitCD(post_load->top, post_load->bottom, post_load->offset, pcmesh); + SetPosition(pos, yrot, sector); - lastDRUpdateTime = 0; + InitCharData(post_load->texParts, equipment); + RefreshCal3d(); + SetAnimationVelocity(post_load->vel); + SetMode(serverMode, true); + if (cel->GetMainPlayer() != this && (flags & psPersistActor::NAMEKNOWN)) + cel->GetEntityLabels()->OnObjectArrived(this); + cel->GetShadowManager()->CreateShadow(this); - linmove->SetDeltaLimit(0.2f); - delete post_load; post_load = NULL; } @@ -1399,48 +1391,34 @@ void GEMClientActor::Update() { - if(linmove) - linmove->TickEveryFrame(); + linmove.TickEveryFrame(); } void GEMClientActor::GetLastPosition (csVector3& pos, float& yrot, iSector*& sector) { - if(linmove) - linmove->GetLastPosition (pos,yrot,sector); - else - sector = cel->GetUnresSector(); + linmove.GetLastPosition(pos,yrot,sector); } const csVector3 GEMClientActor::GetVelocity () const { - return linmove->GetVelocity(); + return linmove.GetVelocity(); } csVector3 GEMClientActor::Pos() const { - csVector3 pos(0.0f); - - if(linmove) - { - float yrot; - iSector* sector; - linmove->GetLastPosition (pos, yrot, sector); - } - + csVector3 pos; + float yrot; + iSector* sector; + linmove.GetLastPosition(pos, yrot, sector); return pos; } csVector3 GEMClientActor::Rot() const { - float yrot = 0.0f; - - if(linmove) - { - csVector3 pos(0.0f); - iSector* sector; - linmove->GetLastPosition (pos, yrot, sector); - } - + csVector3 pos; + float yrot; + iSector* sector; + linmove.GetLastPosition(pos, yrot, sector); return yrot; } @@ -1448,22 +1426,21 @@ { csVector3 pos; float yrot; - iSector* sector = cel->GetUnresSector(); - if(linmove) - linmove->GetLastPosition (pos,yrot, sector); + iSector* sector; + linmove.GetLastPosition(pos,yrot, sector); return sector; } bool GEMClientActor::NeedDRUpdate(unsigned char& priority) { - csVector3 vel = linmove->GetVelocity(); - csVector3 angularVelocity = linmove->GetAngularVelocity(); + csVector3 vel = linmove.GetVelocity(); + csVector3 angularVelocity = linmove.GetAngularVelocity(); // Never send DR messages until client is "ready" if (!cel->GetMainPlayer()) return false; - if (linmove->IsPath() && !path_sent) + if (linmove.IsPath() && !path_sent) { priority = PRIORITY_HIGH; return true; @@ -1524,9 +1501,6 @@ void GEMClientActor::SendDRUpdate(unsigned char priority, csStringHashReversible* msgstrings) { - if(!linmove) - return; - // send update out EID mappedid = eid; // no mapping anymore, IDs are identical float speed, yrot, ang_vel; @@ -1534,7 +1508,7 @@ csVector3 pos, vel, worldVel; iSector* sector; - linmove->GetDRData(on_ground, speed, pos, yrot, sector, vel, worldVel, ang_vel); + linmove.GetDRData(on_ground, speed, pos, yrot, sector, vel, worldVel, ang_vel); ZoneHandler* zonehandler = cel->GetZoneHandler(); if (zonehandler && zonehandler->IsLoading()) @@ -1567,9 +1541,6 @@ void GEMClientActor::SetDRData(psDRMessage& drmsg) { - if(!linmove) - return; - if (drmsg.sector != NULL) { if (!DRcounter_set || drmsg.IsNewerThan(DRcounter)) @@ -1577,18 +1548,18 @@ float cur_yrot; csVector3 cur_pos; iSector *cur_sector; - linmove->GetLastPosition(cur_pos,cur_yrot,cur_sector); + linmove.GetLastPosition(cur_pos,cur_yrot,cur_sector); // Force hard DR update on sector change, low speed, or large delta pos if (drmsg.sector != cur_sector || (drmsg.vel < 0.1f) || (csSquaredDist::PointPoint(cur_pos,drmsg.pos) > 25.0f)) { // Do hard DR when it would make you slide - linmove->SetDRData(drmsg.on_ground,1.0f,drmsg.pos,drmsg.yrot,drmsg.sector,drmsg.vel,drmsg.worldVel,drmsg.ang_vel); + linmove.SetDRData(drmsg.on_ground,1.0f,drmsg.pos,drmsg.yrot,drmsg.sector,drmsg.vel,drmsg.worldVel,drmsg.ang_vel); } else { // Do soft DR when moving - linmove->SetSoftDRData(drmsg.on_ground,1.0f,drmsg.pos,drmsg.yrot,drmsg.sector,drmsg.vel,drmsg.worldVel,drmsg.ang_vel); + linmove.SetSoftDRData(drmsg.on_ground,1.0f,drmsg.pos,drmsg.yrot,drmsg.sector,drmsg.vel,drmsg.worldVel,drmsg.ang_vel); } DRcounter = drmsg.counter; @@ -1616,17 +1587,16 @@ { // stop this actor from moving csVector3 zeros(0.0f, 0.0f, 0.0f); - linmove->SetVelocity(zeros); - linmove->SetAngularVelocity(zeros); - if(worldVel) - linmove->ClearWorldVelocity(); + linmove.SetVelocity(zeros); + linmove.SetAngularVelocity(zeros); + if (worldVel) + linmove.ClearWorldVelocity(); } void GEMClientActor::SetPosition(const csVector3 & pos, float rot, iSector * sector) { - if (linmove) - linmove->SetPosition(pos, rot, sector); + linmove.SetPosition(pos, rot, sector); } void GEMClientActor::InitCharData(const char* traits, const char* equipment) @@ -1638,28 +1608,25 @@ charApp->ApplyEquipment(this->equipment); } -psLinearMovement * GEMClientActor::GetMovement() +psLinearMovement& GEMClientActor::Movement() { return linmove; } -bool GEMClientActor::InitLinMove(const csVector3& pos, float angle, const char* sector, +void GEMClientActor::InitLinMove(const csVector3& pos, float angle, const char* sector, csVector3 top, csVector3 bottom, csVector3 offset ) { - linmove = new psLinearMovement(psengine->GetObjectRegistry()); - top.x *= .7f; top.z *= .7f; bottom.x *= .7f; bottom.z *= .7f; - linmove->InitCD(top, bottom,offset, pcmesh); + linmove.InitCD(top, bottom,offset, pcmesh); + linmove.SetDeltaLimit(0.2); iSector * sectorObj = psengine->GetEngine()->FindSector(sector); if (sectorObj != NULL) - linmove->SetPosition(pos,angle,sectorObj); + linmove.SetPosition(pos,angle,sectorObj); else psengine->GetCelClient()->HandleUnresolvedPos(this, pos, angle, sector); - - return true; // right now this func never fail, but might later. } bool GEMClientActor::IsGroupedWith(GEMClientActor* actor) @@ -1780,8 +1747,8 @@ case psModeMessage::DEAD: cal3dstate->ClearAllAnims(); cal3dstate->SetAnimAction("death",0.0f,1.0f); - GetMovement()->SetVelocity(0); - GetMovement()->SetAngularVelocity(0); + linmove.SetVelocity(0); + linmove.SetAngularVelocity(0); if (newactor) // If we're creating a new actor that's already dead, we shouldn't show the animation... cal3dstate->SetAnimationTime(9999); // the very end of the death animation ;) break; @@ -1797,8 +1764,8 @@ case psModeMessage::STATUE: //used to make statue like character which don't move cal3dstate->ClearAllAnims(); cal3dstate->SetAnimAction("statue",0.0f,1.0f); - GetMovement()->SetVelocity(0); - GetMovement()->SetAngularVelocity(0); + linmove.SetVelocity(0); + linmove.SetAngularVelocity(0); cal3dstate->SetAnimationTime(9999); // the very end of the animation break; @@ -1881,17 +1848,9 @@ } csRef<iMeshWrapper> mesh = factory->CreateMeshWrapper(); - pcmesh = mesh; - charApp->SetMesh(mesh); - psengine->GetEngine()->GetMeshes()->Add(pcmesh); - if(!matName.IsEmpty()) + if (!mountFactname.IsEmpty() && !mountFactname.Compare("null")) { - charApp->ChangeMaterial(factName, matName); - } - - if(!mountFactname.IsEmpty() && !mountFactname.Compare("null")) - { csRef<iMeshFactoryWrapper> mountFactory = psengine->GetLoader()->LoadFactory(mountFactname, &failed); if(!mountFactory.IsValid()) { @@ -1904,13 +1863,23 @@ return true; } - pcmesh = mountFactory->CreateMeshWrapper(); - psengine->GetEngine()->GetMeshes()->Add(pcmesh); + csRef<iMeshWrapper> mountMesh = mountFactory->CreateMeshWrapper(); + SwitchToRealMesh(mountMesh); charApp->ApplyRider(pcmesh); csRef<iSpriteCal3DState> riderstate = scfQueryInterface<iSpriteCal3DState> (mesh->GetMeshObject()); riderstate->SetAnimCycle(MounterAnim,100); } + else + { + SwitchToRealMesh(mesh); + } + + if(!matName.IsEmpty()) + { + charApp->ChangeMaterial(factName, matName); + } + pcmesh->GetFlags().Set(CS_ENTITY_NODECAL); csRef<iSpriteCal3DState> calstate = scfQueryInterface<iSpriteCal3DState> (pcmesh->GetMeshObject()); @@ -1921,8 +1890,6 @@ psengine->UnregisterDelayedLoader(this); - PostLoad(false); - return true; } @@ -1942,11 +1909,7 @@ post_load->sector = mesg.sector; flags = mesg.flags; - if (!InitMesh()) - { - Error3("Fatal Error: Could not create item %s(%s)", mesg.name.GetData(), ShowID(mesg.eid)); - return; - } + LoadMesh(); } GEMClientItem::~GEMClientItem() @@ -2092,7 +2055,7 @@ psengine->UnregisterDelayedLoader(this); - PostLoad(false); + PostLoad(); // Handle item effect if there is one. cel->HandleItemEffect(factName, pcmesh); @@ -2100,7 +2063,7 @@ return true; } -void GEMClientItem::PostLoad(bool nullmesh) +void GEMClientItem::PostLoad() { Move(post_load->pos, post_load->yRot, post_load->sector); Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/pscelclient.h 2009-10-30 06:30:57 UTC (rev 4699) @@ -36,6 +36,7 @@ //============================================================================= #include "net/cmdbase.h" +#include "engine/linmove.h" //============================================================================= // Local Includes @@ -65,8 +66,6 @@ class psEffect; class psSolid; -class psLinearMovement; - /** This is information about an entity with unresolved position (=sector not found) * This happens when some entity is located in map that is not currently loaded. * We are trying to resolve the position every time new maps are loaded */ @@ -320,12 +319,12 @@ virtual GEMOBJECT_TYPE GetObjectType() { return GEM_OBJECT; } - /** Setup the mesh for this object. - * - * @return true if the mesh was set correctly, false if mesh failed to be set or created. - */ - bool InitMesh(); + /** Performs helm group substitutions. */ + void SubstituteRacialMeshFact(); + /** Start loading the mesh. */ + void LoadMesh(); + /** Set the position of mesh * @param pos the coordinates of the mesh * @param rotangle the y axis rotation of the mesh @@ -493,7 +492,7 @@ psCharAppearance* CharAppearance() { return charApp; } - psLinearMovement * linmove; + psLinearMovement linmove; /// The Vital of the player with regards to his health/mana/fatigue/etc. psClientVitals *vitalManager; @@ -549,7 +548,7 @@ /** Get the movment system this object is using. */ - psLinearMovement * GetMovement(); + psLinearMovement& Movement(); virtual void Update(); @@ -563,9 +562,9 @@ uint8_t DRcounter; ///< increments in loop to prevent out of order packet overwrites of better data bool DRcounter_set; - virtual void PostLoad(bool nullmesh); + virtual void SwitchToRealMesh(iMeshWrapper* mesh); - bool InitLinMove(const csVector3& pos,float angle, const char* sector, + void InitLinMove(const csVector3& pos,float angle, const char* sector, csVector3 top, csVector3 bottom, csVector3 offset); void InitCharData(const char* textures, const char* equipment); @@ -581,18 +580,10 @@ /// Post load data. struct PostLoadData { - csVector3 pos; - float yrot; - csString sectorName; - iSector* sector; csVector3 top; csVector3 bottom; csVector3 offset; - bool on_ground; csVector3 vel; - csVector3 angularVelocity; - csVector3 worldVel; - float ang_vel; csString texParts; }; @@ -614,7 +605,7 @@ virtual bool CheckLoadStatus(); protected: - virtual void PostLoad(bool nullmesh); + virtual void PostLoad(); psSolid* solid; Modified: trunk/src/client/pscharcontrol.cpp =================================================================== --- trunk/src/client/pscharcontrol.cpp 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/pscharcontrol.cpp 2009-10-30 06:30:57 UTC (rev 4699) @@ -644,7 +644,7 @@ iSector* sector; psCamera* cam = psengine->GetPSCamera(); - movement->GetLinearMovement()->GetLastPosition(pos, rotY, sector); + movement->ControlledActor()->Movement().GetLastPosition(pos, rotY, sector); cam->SetPosition(pos + csVector3(sinf(rotY)*cam->GetMaxDistance(),0,cosf(rotY)*cam->GetMaxDistance())); cam->SetYaw(rotY); Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/psengine.cpp 2009-10-30 06:30:57 UTC (rev 4699) @@ -1347,7 +1347,7 @@ } // Set controlled actor and map controls - charController->GetMovementManager()->SetActor(); + charController->GetMovementManager()->SetActor(NULL); // Init camera with controlled actor camera->InitializeView( celclient->GetMainPlayer() ); Modified: trunk/src/client/psmovement.cpp =================================================================== --- trunk/src/client/psmovement.cpp 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/psmovement.cpp 2009-10-30 06:30:57 UTC (rev 4699) @@ -109,8 +109,6 @@ walk = NULL; kbdRotate = 0; - - linearMove = NULL; } psMovementManager::~psMovementManager() @@ -125,8 +123,6 @@ { actor = a ? a : psengine->GetCelClient()->GetMainPlayer() ; CS_ASSERT(actor); - linearMove = actor->GetMovement(); - CS_ASSERT(linearMove); SetupControls(); } @@ -150,16 +146,15 @@ { locked = v; - if (!linearMove) - { + if (!actor) return; - } + if (v) { StopAllMovement(); } else - linearMove->ResetGravity(); + actor->Movement().ResetGravity(); } void psMovementManager::HandleMessage(MsgEntry* me) @@ -198,13 +193,13 @@ bool psMovementManager::HandleEvent( iEvent &event ) { - if ( !ready || !actor || !linearMove ) // Not fully loaded yet + if (!ready || !actor) // Not fully loaded yet return false; if (event.Name == event_frame) { // If we we've returned to the ground, update allowed velocity - if (!onGround && linearMove->IsOnGround()) + if (!onGround && actor->Movement().IsOnGround()) UpdateVelocity(); // UpdateMouseLook will take care of "recent mouse-look turning" based on "bool mouseLook" @@ -494,8 +489,8 @@ SetActorMode(run); // Halt actor - linearMove->SetVelocity(0); - linearMove->SetAngularVelocity(0); + actor->Movement().SetVelocity(0); + actor->Movement().SetAngularVelocity(0); actor->SetAnimationVelocity(0); // Remove run-to effect @@ -533,7 +528,7 @@ void psMovementManager::UpdateVelocity() { /// While the client is locked out the server will also reject any attempts to move. - if (locked || !linearMove || !actor) + if (locked || !actor) return; // Start with the total of all applied movements @@ -546,7 +541,7 @@ * Some control is required to prevent collision detection issues, * and to give the limited ability to turn or glide mid-flight. */ - onGround = linearMove->IsOnGround(); + onGround = actor->Movement().IsOnGround(); if (onGround) // Normal { // Apply mode's modifier @@ -559,14 +554,14 @@ #endif // Set vertical - linearMove->ClearWorldVelocity(); - linearMove->AddVelocity( csVector3(0,vel.move.y,0) ); + actor->Movement().ClearWorldVelocity(); + actor->Movement().AddVelocity( csVector3(0,vel.move.y,0) ); // Set horizontal - linearMove->SetVelocity( csVector3(vel.move.x,0,vel.move.z) ); + actor->Movement().SetVelocity( csVector3(vel.move.x,0,vel.move.z) ); // Set rotation - linearMove->SetAngularVelocity( vel.rotate ); + actor->Movement().SetAngularVelocity( vel.rotate ); // Update animating speed actor->SetAnimationVelocity( vel.move ); @@ -584,10 +579,10 @@ // Add to existing velocity if (vel.move.y <= 0 && (vel.move.x != 0 || vel.move.z != 0)) - linearMove->SetVelocity( csVector3(vel.move.x,0,vel.move.z) ); + actor->Movement().SetVelocity(csVector3(vel.move.x,0,vel.move.z)); // Set rotation - linearMove->SetAngularVelocity( vel.rotate ); + actor->Movement().SetAngularVelocity( vel.rotate ); } } @@ -611,10 +606,8 @@ void psMovementManager::MouseLook(bool v) { - if (!ready || !actor || !linearMove ) - { + if (!ready || !actor) return; - } if(mouseLookCanAct || !v) { @@ -627,7 +620,7 @@ if ( !mouseLook ) { csVector3 vec(0,0,0); - linearMove->SetAngularVelocity(vec); + actor->Movement().SetAngularVelocity(vec); } } } @@ -637,10 +630,8 @@ void psMovementManager::UpdateMouseLook() { - if (!ready || !actor || !linearMove ) - { + if (!ready || !actor) return; - } psCamera* camera = psengine->GetPSCamera(); @@ -657,7 +648,7 @@ if ( camera->RotateCameraWithPlayer() ) { csVector3 vec(0,0,0); - linearMove->SetAngularVelocity(vec); + actor->Movement().SetAngularVelocity(vec); } return; } @@ -688,7 +679,7 @@ if (spin > 5) spin = 5.0f; if (spin < -5) spin = -5.0f; - linearMove->SetAngularVelocity( csVector3(0,spin,0) ); + actor->Movement().SetAngularVelocity(csVector3(0, spin, 0)); } } else @@ -702,10 +693,9 @@ void psMovementManager::MouseLook(iEvent& ev) { - if (!ready || !actor || !linearMove ) - { + if (!ready || !actor) return; - } + psCamera* camera = psengine->GetPSCamera(); iGraphics2D* g2d = psengine->GetG2D(); @@ -749,7 +739,7 @@ if (spin < -5) spin = -5.0f; //if (spin > 20) spin = 20.0f; // removing that hack which enables "turning with lightspeed" //if (spin < -20) spin = -20.0f; - linearMove->SetAngularVelocity( csVector3(0,spin,0) ); + actor->Movement().SetAngularVelocity(csVector3(0, spin, 0)); } } else @@ -776,10 +766,9 @@ void psMovementManager::SetRunToPos(psPoint& mouse) { - if (!ready || !actor || !linearMove ) - { + if (!ready || !actor) return; - } + csVector3 tmp, tmpDiff; iMeshWrapper *mesh = psengine->GetPSCamera()->Get3DPointFrom2D(mouse.x, mouse.y, &tmp, &tmpDiff); if (mesh) @@ -788,7 +777,7 @@ psengine->GetEffectManager()->DeleteEffect(runToMarkerID); runToMarkerID = 0; - iSector* sector = linearMove->GetSector(); + iSector* sector = actor->Movement().GetSector(); csRef<iMeshWrapper> actormesh = actor->GetMesh(); runToMarkerID = psengine->GetEffectManager()->RenderEffect("marker", sector, tmp, actormesh); runToDiff = tmpDiff; @@ -810,16 +799,15 @@ void psMovementManager::UpdateRunTo() { - if (!ready || !actor || !linearMove ) - { + if (!ready || !actor) return; - } + if (runToMarkerID != 0 && !locked) { csVector3 currPos; float yRot; iSector* sector; - linearMove->GetLastPosition(currPos, yRot, sector); + actor->Movement().GetLastPosition(currPos, yRot, sector); csVector3 diff = runToDiff - currPos; // only move the char if we are not stuck @@ -840,7 +828,7 @@ // Calculate the start and end poses start= currPos; - linearMove->GetCDDimensions(box,legs,dummy); + actor->Movement().GetCDDimensions(box, legs, dummy); // We can walk over some stuff start += csVector3(0,0.6f,0); @@ -955,7 +943,7 @@ } // Turn towards target - linearMove->SetAngularVelocity( csVector3(0,targetYRot,0) ); + actor->Movement().SetAngularVelocity(csVector3(0, targetYRot, 0)); } else { Modified: trunk/src/client/psmovement.h =================================================================== --- trunk/src/client/psmovement.h 2009-10-27 21:28:09 UTC (rev 4698) +++ trunk/src/client/psmovement.h 2009-10-30 06:30:57 UTC (rev 4699) @@ -134,9 +134,6 @@ uint kbdRotate; - psLinearMovement* linearMove; - - public: psMovementManager(iEventNameRegistry* eventname_reg, psControlManager* controls); ~psMovementManager(); @@ -144,7 +141,8 @@ void HandleMessage(MsgEntry* me); bool HandleEvent(iEvent& event); - void SetActor(GEMClientActor* actor=NULL); + void SetActor(GEMClientActor* actor); + GEMClientActor* ControlledActor() { return actor; } // Functions to find movement and mode info const char* GetModeIdleAnim(size_t id) const { return modes[id]->idle_anim; } @@ -199,9 +197,6 @@ void SetSneaking(bool v) { sneaking = v; } bool Sneaking() { return sneaking; } - - psLinearMovement* GetLinearMovement() { return linearMove; } - }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-01 03:12:19
|
Revision: 4710 http://planeshift.svn.sourceforge.net/planeshift/?rev=4710&view=rev Author: mgist Date: 2009-11-01 03:12:12 +0000 (Sun, 01 Nov 2009) Log Message: ----------- - Some optimisations and small fixes. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/charapp.cpp Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-11-01 02:21:39 UTC (rev 4709) +++ trunk/src/client/bgloader/loader.cpp 2009-11-01 03:12:12 UTC (rev 4710) @@ -714,13 +714,6 @@ csRef<MeshObj> m = csPtr<MeshObj>(new MeshObj(node2->GetAttributeValue("name"), vfsPath, node2)); m->sector = s; - // alwaysloaded ignores range checks. If the sector is loaded then so is this mesh. - if(node2->GetAttributeValueAsBool("alwaysloaded")) - { - ++s->alwaysLoadedCount; - m->alwaysLoaded = true; - } - // Get the position data for later. csRef<iDocumentNode> position = node2->GetNode("move"); @@ -917,7 +910,15 @@ } } - s->meshes.Push(m); + // alwaysloaded ignores range checks. If the sector is loaded then so is this mesh. + if(node2->GetAttributeValueAsBool("alwaysloaded")) + { + s->alwaysLoaded.Push(m); + } + else + { + s->meshes.Push(m); + } CS::Threading::ScopedWriteLock lock(meshLock); meshes.Put(meshStringSet.Request(m->name), m); } @@ -931,11 +932,8 @@ m->sector = s; // Always load trimesh... for now. TODO: Calculate bbox. - ++s->alwaysLoadedCount; - m->alwaysLoaded = true; - // Push to sector. - s->meshes.Push(m); + s->alwaysLoaded.Push(m); CS::Threading::ScopedWriteLock lock(meshLock); meshes.Put(meshStringSet.Request(m->name), m); } @@ -1453,6 +1451,17 @@ } } + // Unload all 'always loaded' meshes before destroying sector. + for(size_t i=0; i<sector->alwaysLoaded.GetSize(); i++) + { + sector->alwaysLoaded[i]->object->GetMovable()->ClearSectors(); + sector->alwaysLoaded[i]->object->GetMovable()->UpdateMove(); + engine->GetMeshes()->Remove(sector->alwaysLoaded[i]->object); + sector->alwaysLoaded[i]->object.Invalidate(); + CleanMesh(sector->alwaysLoaded[i]); + --sector->objectCount; + } + // Remove sequences. for(size_t i=0; i<sector->sequences.GetSize(); ++i) { @@ -1635,6 +1644,17 @@ sector->object->SetDynamicAmbientLight(sector->ambient); sector->object->SetVisibilityCullerPlugin(sector->culler); sector->object->QueryObject()->SetObjectParent(sector->parent); + + // Load all meshes which should always be loaded in this sector. + for(size_t i=0; i<sector->alwaysLoaded.GetSize(); i++) + { + if(!sector->alwaysLoaded[i]->object.IsValid()) + { + sector->alwaysLoaded[i]->loading = true; + loadingMeshes.Push(sector->alwaysLoaded[i]); + ++sector->objectCount; + } + } } if(!force) @@ -1663,7 +1683,10 @@ wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); } - LoadSector(wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1, false, loadMeshes); + if(depth > maxPortalDepth) + CleanSector(sector->activePortals[i]->targetSector); + else + LoadSector(wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1, false, loadMeshes); } } } @@ -1755,6 +1778,17 @@ sector->portals[i]->targetSector->object->SetDynamicAmbientLight(sector->portals[i]->targetSector->ambient); sector->portals[i]->targetSector->object->SetVisibilityCullerPlugin(sector->portals[i]->targetSector->culler); sector->portals[i]->targetSector->object->QueryObject()->SetObjectParent(sector->portals[i]->targetSector->parent); + + // Load all meshes which should always be loaded in this sector. + for(size_t i=0; i<sector->portals[i]->targetSector->alwaysLoaded.GetSize(); i++) + { + if(!sector->portals[i]->targetSector->alwaysLoaded[i]->object.IsValid()) + { + sector->portals[i]->targetSector->alwaysLoaded[i]->loading = true; + loadingMeshes.Push(sector->portals[i]->targetSector->alwaysLoaded[i]); + ++sector->portals[i]->targetSector->objectCount; + } + } } } else if(!sector->portals[i]->targetSector->isLoading && !sector->portals[i]->targetSector->checked && recurse) @@ -1905,19 +1939,16 @@ } // Check whether this sector is empty and should be unloaded. - if(sector->objectCount == sector->alwaysLoadedCount && sector->object.IsValid()) + if(sector->objectCount == sector->alwaysLoaded.GetSize() && sector->object.IsValid()) { // Unload all 'always loaded' meshes before destroying sector. - for(size_t i=0; i<sector->meshes.GetSize(); i++) + for(size_t i=0; i<sector->alwaysLoaded.GetSize(); i++) { - if(sector->meshes[i]->alwaysLoaded) - { - sector->meshes[i]->object->GetMovable()->ClearSectors(); - sector->meshes[i]->object->GetMovable()->UpdateMove(); - engine->GetMeshes()->Remove(sector->meshes[i]->object); - sector->meshes[i]->object.Invalidate(); - --sector->objectCount; - } + sector->alwaysLoaded[i]->object->GetMovable()->ClearSectors(); + sector->alwaysLoaded[i]->object->GetMovable()->UpdateMove(); + engine->GetMeshes()->Remove(sector->alwaysLoaded[i]->object); + sector->alwaysLoaded[i]->object.Invalidate(); + --sector->objectCount; } // Remove sequences. Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-11-01 02:21:39 UTC (rev 4709) +++ trunk/src/client/bgloader/loader.h 2009-11-01 03:12:12 UTC (rev 4710) @@ -319,7 +319,7 @@ { public: Sector(const char* name) : name(name), init(false), isLoading(false), checked(false), - objectCount(0), alwaysLoadedCount(0) + objectCount(0) { ambient = csColor(0.0f); } @@ -339,10 +339,10 @@ csString culler; csColor ambient; size_t objectCount; - size_t alwaysLoadedCount; csRef<iSector> object; csWeakRef<Zone> parent; csRefArray<MeshGen> meshgen; + csRefArray<MeshObj> alwaysLoaded; csRefArray<MeshObj> meshes; csRefArray<Portal> portals; csRefArray<Portal> activePortals; @@ -386,18 +386,18 @@ { public: MeshObj(const char* name, const char* path, iDocumentNode* data) : name(name), path(path), data(data), - loading(false), alwaysLoaded(false) + loading(false) { } inline bool InRange(const csBox3& curBBox, bool force) { - return !object.IsValid() && (force || alwaysLoaded || curBBox.Overlap(bbox)); + return !object.IsValid() && (force || curBBox.Overlap(bbox)); } inline bool OutOfRange(const csBox3& curBBox) { - return !alwaysLoaded && object.IsValid() && !curBBox.Overlap(bbox); + return object.IsValid() && !curBBox.Overlap(bbox); } csString name; @@ -405,7 +405,6 @@ csRef<iDocumentNode> data; bool loading; - bool alwaysLoaded; csBox3 bbox; csRef<iThreadReturn> status; csRef<iMeshWrapper> object; Modified: trunk/src/client/charapp.cpp =================================================================== --- trunk/src/client/charapp.cpp 2009-11-01 02:21:39 UTC (rev 4709) +++ trunk/src/client/charapp.cpp 2009-11-01 03:12:12 UTC (rev 4710) @@ -776,7 +776,7 @@ csRef<iSpriteCal3DSocket> socket = state->FindSocket( socketName ); if ( !socket ) { - Error2("Socket %s not found.", socketName); + Notify2(LOG_CHARACTER, "Socket %s not found.", socketName); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-01 14:18:29
|
Revision: 4713 http://planeshift.svn.sourceforge.net/planeshift/?rev=4713&view=rev Author: mgist Date: 2009-11-01 14:18:22 +0000 (Sun, 01 Nov 2009) Log Message: ----------- - Various loader improvements. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/zonehandler.cpp Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-11-01 10:19:35 UTC (rev 4712) +++ trunk/src/client/bgloader/loader.cpp 2009-11-01 14:18:22 UTC (rev 4713) @@ -1230,12 +1230,10 @@ } void BgLoader::ContinueLoading(bool waiting) -{ - bool finishLoading = true; - +{ // Limit even while waiting - we want some frames. size_t count = 0; - while(finishLoading && count < 20) + while(count < 20) { // Delete from delete queue (fairly expensive, so limited per update). if(!deleteQueue.IsEmpty()) @@ -1273,7 +1271,7 @@ ++count; if(!waiting || GetLoadingCount() == 0) - finishLoading = false; + break; } } @@ -1399,14 +1397,14 @@ engine->GetMeshes()->Remove(sector->meshes[i]->object); sector->meshes[i]->object.Invalidate(); CleanMesh(sector->meshes[i]); - --sector->objectCount; + --(sector->objectCount); } } for(size_t i=0; i<sector->meshgen.GetSize(); i++) { CleanMeshGen(sector->meshgen[i]); - --sector->objectCount; + --(sector->objectCount); } for(size_t i=0; i<sector->portals.GetSize(); i++) @@ -1417,7 +1415,7 @@ sector->portals[i]->pObject = NULL; sector->portals[i]->mObject.Invalidate(); sector->activePortals.Delete(sector->portals[i]); - --sector->objectCount; + --(sector->objectCount); } } @@ -1427,7 +1425,7 @@ { engine->RemoveLight(sector->lights[i]->object); sector->lights[i]->object.Invalidate(); - --sector->objectCount; + --(sector->objectCount); } for(size_t j=0; j<sector->lights[i]->sequences.GetSize(); ++j) @@ -1459,7 +1457,7 @@ engine->GetMeshes()->Remove(sector->alwaysLoaded[i]->object); sector->alwaysLoaded[i]->object.Invalidate(); CleanMesh(sector->alwaysLoaded[i]); - --sector->objectCount; + --(sector->objectCount); } // Remove sequences. @@ -1648,16 +1646,13 @@ // Load all meshes which should always be loaded in this sector. for(size_t i=0; i<sector->alwaysLoaded.GetSize(); i++) { - if(!sector->alwaysLoaded[i]->object.IsValid()) - { - sector->alwaysLoaded[i]->loading = true; - loadingMeshes.Push(sector->alwaysLoaded[i]); - ++sector->objectCount; - } + sector->alwaysLoaded[i]->loading = true; + loadingMeshes.Push(sector->alwaysLoaded[i]); + ++(sector->objectCount); } } - if(!force) + if(!force && depth < maxPortalDepth) { // Check other sectors linked to by active portals. for(size_t i=0; i<sector->activePortals.GetSize(); i++) @@ -1683,10 +1678,7 @@ wwUnloadBox.SetMax(2, wwUnloadBox.MaxZ()-transform.z); } - if(depth > maxPortalDepth) - CleanSector(sector->activePortals[i]->targetSector); - else - LoadSector(wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1, false, loadMeshes); + LoadSector(wwLoadBox, wwUnloadBox, sector->activePortals[i]->targetSector, depth+1, false, loadMeshes); } } } @@ -1702,7 +1694,7 @@ { sector->meshes[i]->loading = true; loadingMeshes.Push(sector->meshes[i]); - ++sector->objectCount; + ++(sector->objectCount); } else if(!force && sector->meshes[i]->OutOfRange(unloadBox)) { @@ -1711,7 +1703,7 @@ engine->GetMeshes()->Remove(sector->meshes[i]->object); sector->meshes[i]->object.Invalidate(); deleteQueue.Push(sector->meshes[i]); - --sector->objectCount; + --(sector->objectCount); } } } @@ -1725,12 +1717,12 @@ { sector->meshgen[i]->loading = true; loadingMeshGen.Push(sector->meshgen[i]); - ++sector->objectCount; + ++(sector->objectCount); } else if(!force && sector->meshgen[i]->OutOfRange(unloadBox)) { CleanMeshGen(sector->meshgen[i]); - --sector->objectCount; + --(sector->objectCount); } } } @@ -1782,12 +1774,9 @@ // Load all meshes which should always be loaded in this sector. for(size_t i=0; i<sector->portals[i]->targetSector->alwaysLoaded.GetSize(); i++) { - if(!sector->portals[i]->targetSector->alwaysLoaded[i]->object.IsValid()) - { - sector->portals[i]->targetSector->alwaysLoaded[i]->loading = true; - loadingMeshes.Push(sector->portals[i]->targetSector->alwaysLoaded[i]); - ++sector->portals[i]->targetSector->objectCount; - } + sector->portals[i]->targetSector->alwaysLoaded[i]->loading = true; + loadingMeshes.Push(sector->portals[i]->targetSector->alwaysLoaded[i]); + ++(sector->portals[i]->targetSector->objectCount); } } } @@ -1839,7 +1828,7 @@ } sector->activePortals.Push(sector->portals[i]); - ++sector->objectCount; + ++(sector->objectCount); } else if(!force && sector->portals[i]->OutOfRange(unloadBox)) { @@ -1870,7 +1859,7 @@ sector->portals[i]->pObject = NULL; sector->portals[i]->mObject.Invalidate(); sector->activePortals.Delete(sector->portals[i]); - --sector->objectCount; + --(sector->objectCount); } } @@ -1948,7 +1937,8 @@ sector->alwaysLoaded[i]->object->GetMovable()->UpdateMove(); engine->GetMeshes()->Remove(sector->alwaysLoaded[i]->object); sector->alwaysLoaded[i]->object.Invalidate(); - --sector->objectCount; + deleteQueue.Push(sector->meshes[i]); + --(sector->objectCount); } // Remove sequences. Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-11-01 10:19:35 UTC (rev 4712) +++ trunk/src/client/bgloader/loader.h 2009-11-01 14:18:22 UTC (rev 4713) @@ -112,7 +112,7 @@ /** * Returns the number of objects currently loading. */ - size_t GetLoadingCount() { return loadingMeshes.GetSize() + finalisableMeshes.GetSize(); } + size_t GetLoadingCount() { return loadingMeshes.GetSize() + finalisableMeshes.GetSize() + deleteQueue.GetSize(); } /** * Returns a pointer to the object registry. Modified: trunk/src/client/zonehandler.cpp =================================================================== --- trunk/src/client/zonehandler.cpp 2009-11-01 10:19:35 UTC (rev 4712) +++ trunk/src/client/zonehandler.cpp 2009-11-01 14:18:22 UTC (rev 4713) @@ -172,7 +172,7 @@ void ZoneHandler::LoadZone(csVector3 pos, const char* sector) { - if(loading || !strcmp(sector, LOADING_SECTOR)) + if(loading || !strcmp(sector, LOADING_SECTOR) || sectorToLoad == sector) return; newPos = pos; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |