From: <mg...@us...> - 2009-11-18 21:01:08
|
Revision: 4754 http://planeshift.svn.sourceforge.net/planeshift/?rev=4754&view=rev Author: mgist Date: 2009-11-18 21:00:52 +0000 (Wed, 18 Nov 2009) Log Message: ----------- - Fixed premature labelling of objects. Modified Paths: -------------- trunk/src/client/entitylabels.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/entitylabels.cpp =================================================================== --- trunk/src/client/entitylabels.cpp 2009-11-18 01:03:24 UTC (rev 4753) +++ trunk/src/client/entitylabels.cpp 2009-11-18 21:00:52 UTC (rev 4754) @@ -542,6 +542,8 @@ for (size_t i=0; i < entities.GetSize(); i++) { GEMClientObject* object = entities.Get(i); + if (!object->HasLabel()) + continue; csRef<iMeshWrapper> mesh = object->GetMesh(); if (!mesh) Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-11-18 01:03:24 UTC (rev 4753) +++ trunk/src/client/pscelclient.cpp 2009-11-18 21:00:52 UTC (rev 4754) @@ -1029,7 +1029,8 @@ { entitylabel = NULL; shadow = 0; - hasShadow = true; + hasLabel = false; + hasShadow = false; flags = 0; } @@ -1039,10 +1040,10 @@ this->cel = cel; eid = id; - //entity = cel->GetPlLayer()->CreateEntity(id); entitylabel = NULL; shadow = 0; - hasShadow = true; + hasLabel = false; + hasShadow = false; } GEMClientObject::~GEMClientObject() @@ -1357,8 +1358,12 @@ SetAnimationVelocity(post_load->vel); SetMode(serverMode, true); if (cel->GetMainPlayer() != this && (flags & psPersistActor::NAMEKNOWN)) + { cel->GetEntityLabels()->OnObjectArrived(this); + hasLabel = true; + } cel->GetShadowManager()->CreateShadow(this); + hasShadow = true; delete post_load; post_load = NULL; @@ -2093,7 +2098,9 @@ } cel->GetEntityLabels()->OnObjectArrived(this); + hasLabel = true; cel->GetShadowManager()->CreateShadow(this); + hasShadow = true; delete post_load; post_load = NULL; Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-11-18 01:03:24 UTC (rev 4753) +++ trunk/src/client/pscelclient.h 2009-11-18 21:00:52 UTC (rev 4754) @@ -394,8 +394,10 @@ float RangeTo(GEMClientObject * obj, bool ignoreY); - bool HasShadow() { return hasShadow; } + bool HasShadow() const { return hasShadow; } + bool HasLabel() const { return hasLabel; } + /** * Delayed mesh loading. */ @@ -418,6 +420,7 @@ int flags; ///< Various flags on the entity. psEffect* entitylabel; psEffect * shadow; + bool hasLabel; bool hasShadow; csRef<InstanceObject> instance; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-18 23:57:46
|
Revision: 4756 http://planeshift.svn.sourceforge.net/planeshift/?rev=4756&view=rev Author: mgist Date: 2009-11-18 23:57:38 +0000 (Wed, 18 Nov 2009) Log Message: ----------- - Fixed a memory leak. - Further fixes for invisible npcs. - Fixed invisible items. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/psengine.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-11-18 22:05:15 UTC (rev 4755) +++ trunk/src/client/pscelclient.cpp 2009-11-18 23:57:38 UTC (rev 4756) @@ -1065,6 +1065,30 @@ { if(pcmesh.IsValid()) { + if(instance.IsValid()) + { + // Update the sector and position of real mesh. + if(pcmesh->GetMovable()->GetSectors()->GetCount() > 0) + { + iSector* old = pcmesh->GetMovable()->GetSectors()->Get(0); + if(old != sector) + { + // Remove the old sector. + instance->pcmesh->GetMovable()->GetSectors()->Remove(old); + + // Add the new sector. + instance->pcmesh->GetMovable()->GetSectors()->Add(sector); + } + } + else + { + instance->pcmesh->GetMovable()->GetSectors()->Add(sector); + } + + instance->pcmesh->GetMovable()->SetPosition(0.0f); + instance->pcmesh->GetMovable()->UpdateMove(); + } + if (sector) pcmesh->GetMovable ()->SetSector (sector); @@ -1078,14 +1102,6 @@ if(instance.IsValid()) { - // Update the sector and position of real mesh. - if (sector) - { - instance->pcmesh->GetMovable()->SetSector (sector); - instance->pcmesh->GetMovable()->SetPosition(0.0f); - instance->pcmesh->GetMovable()->UpdateMove(); - } - // Set instancing transform. position->SetValue(pcmesh->GetMovable()->GetTransform()); } @@ -1856,6 +1872,9 @@ return true; } + if (psengine->GetZoneHandler()->IsLoading()) + return true; + csRef<iMeshWrapper> mesh = factory->CreateMeshWrapper(); charApp->SetMesh(mesh); @@ -1974,7 +1993,6 @@ 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+matName, instance); @@ -2058,7 +2076,6 @@ pcmesh->GetFlags().Set(CS_ENTITY_NODECAL); csRef<iNullMeshState> nullmeshstate = scfQueryInterface<iNullMeshState> (pcmesh->GetMeshObject()); nullmeshstate->SetHitBeamMeshObject(instance->pcmesh->GetMeshObject()); - psengine->GetEngine()->GetMeshes()->Add(pcmesh); cel->AttachObject(pcmesh->QueryObject(), this); Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-11-18 22:05:15 UTC (rev 4755) +++ trunk/src/client/psengine.h 2009-11-18 23:57:38 UTC (rev 4756) @@ -197,6 +197,7 @@ psCamera* GetPSCamera() { return camera; } psNetManager* GetNetManager() { return netmanager; } psCSSetup* GetCSSetup() { return CS_Setup; } + ZoneHandler* GetZoneHandler() { return zonehandler; } /// Access the player's petitioner target void SetTargetPetitioner(const char * pet) { targetPetitioner = pet; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-19 01:31:02
|
Revision: 4757 http://planeshift.svn.sourceforge.net/planeshift/?rev=4757&view=rev Author: mgist Date: 2009-11-19 01:30:51 +0000 (Thu, 19 Nov 2009) Log Message: ----------- - Hopefully the last fix (for now) for invisible npcs. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-11-18 23:57:38 UTC (rev 4756) +++ trunk/src/client/pscelclient.cpp 2009-11-19 01:30:51 UTC (rev 4757) @@ -1278,6 +1278,7 @@ post_load->pos = mesg.pos; post_load->yrot = mesg.yrot; post_load->sector_name = mesg.sectorName; + post_load->sector = mesg.sector; post_load->top = mesg.top; post_load->bottom = mesg.bottom; post_load->offset = mesg.offset; @@ -1319,7 +1320,9 @@ pcmesh = nullmesh->CreateMeshWrapper(); pcmesh->QueryObject()->SetName(name); - InitLinMove(mesg.pos, mesg.yrot, mesg.sectorName, mesg.top, mesg.bottom, mesg.offset); + linmove.InitCD(mesg.top, mesg.bottom, mesg.offset, pcmesh); + linmove.SetDeltaLimit(0.2f); + 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 @@ -1350,13 +1353,8 @@ // Init CD. linmove.InitCD(post_load->top, post_load->bottom, post_load->offset, pcmesh); - // Find a valid sector to move to. - iSector* sector = psengine->GetEngine()->FindSector(post_load->sector_name); - if(!sector) - cel->HandleUnresolvedPos(this, post_load->pos, post_load->yrot, post_load->sector_name); - else - SetPosition(post_load->pos, post_load->yrot, sector); - + // Set position and other data. + SetPosition(post_load->pos, post_load->yrot, post_load->sector); InitCharData(post_load->texParts, equipment); RefreshCal3d(); SetAnimationVelocity(post_load->vel); @@ -1638,22 +1636,6 @@ return linmove; } -void GEMClientActor::InitLinMove(const csVector3& pos, float angle, const char* sector, - csVector3 top, csVector3 bottom, csVector3 offset ) -{ - top.x *= .7f; - top.z *= .7f; - bottom.x *= .7f; - bottom.z *= .7f; - linmove.InitCD(top, bottom,offset, pcmesh); - linmove.SetDeltaLimit(0.2f); - iSector * sectorObj = psengine->GetEngine()->FindSector(sector); - if (sectorObj != NULL) - linmove.SetPosition(pos,angle,sectorObj); - else - psengine->GetCelClient()->HandleUnresolvedPos(this, pos, angle, sector); -} - bool GEMClientActor::IsGroupedWith(GEMClientActor* actor) { if(actor && actor->GetGroupID() == groupID && groupID != 0) @@ -1872,9 +1854,6 @@ return true; } - if (psengine->GetZoneHandler()->IsLoading()) - return true; - csRef<iMeshWrapper> mesh = factory->CreateMeshWrapper(); charApp->SetMesh(mesh); @@ -1883,6 +1862,12 @@ charApp->ChangeMaterial(factName, matName); } + if (psengine->GetZoneHandler()->IsLoading() || !post_load->sector) + { + post_load->sector = psengine->GetEngine()->GetSectors()->FindByName(post_load->sector_name); + return true; + } + if (!mountFactname.IsEmpty() && !mountFactname.Compare("null")) { csRef<iMeshFactoryWrapper> mountFactory = psengine->GetLoader()->LoadFactory(mountFactname, &failed); Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-11-18 23:57:38 UTC (rev 4756) +++ trunk/src/client/pscelclient.h 2009-11-19 01:30:51 UTC (rev 4757) @@ -567,9 +567,6 @@ virtual void SwitchToRealMesh(iMeshWrapper* mesh); - void InitLinMove(const csVector3& pos,float angle, const char* sector, - csVector3 top, csVector3 bottom, csVector3 offset); - void InitCharData(const char* textures, const char* equipment); bool alive; @@ -586,6 +583,7 @@ csVector3 pos; float yrot; csString sector_name; + iSector* sector; csVector3 top; csVector3 bottom; csVector3 offset; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-21 04:01:14
|
Revision: 4762 http://planeshift.svn.sourceforge.net/planeshift/?rev=4762&view=rev Author: mgist Date: 2009-11-21 04:01:08 +0000 (Sat, 21 Nov 2009) Log Message: ----------- - Xordan and Khaki fixed #1307. - Made some sector crossings a little less jumpy. Still needs improvement. Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscamera.h Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-11-20 23:50:19 UTC (rev 4761) +++ trunk/src/client/pscamera.cpp 2009-11-21 04:01:08 UTC (rev 4762) @@ -178,7 +178,7 @@ vel = 0.0f; - lastActorSector = 0; + lastCameraSector = 0; cameraInitialized = false; @@ -712,6 +712,15 @@ cosf(actorYRot)*firstPersonPositionOffset.z); } + // Do a hitbeam between Position and Target to find the correct sector and coordinates. + csVector3 oldEye = actorEye; + csVector3 diff = actorEye - actorPos; + bool mirrored = view->GetCamera()->IsMirrored(); + view->GetCamera()->OnlyPortals(true); + view->GetCamera()->GetTransform().SetOrigin(actorPos); + iSector* hitSector = actorSector->FollowSegment(view->GetCamera()->GetTransform(), + actorEye, mirrored, view->GetCamera()->GetOnlyPortals()); + actorPos = actorEye - diff; // calculate ideal camera data (won't affect the actual camera data yet) DoCameraIdealCalcs(elapsedTicks, actorPos, actorEye, actorYRot); @@ -726,6 +735,12 @@ // transition phase calculations DoCameraTransition(); + // Hack around elastic issues on sector change. + if (hitSector != lastCameraSector) + { + isElastic = false; + } + // this makes the deltaIdeal data true to it's delta wording by subtracting the current ideal data if (isElastic) { @@ -735,7 +750,7 @@ } // interpolate between ideal and actual camera data - DoElasticPhysics(isElastic, elapsedTicks, deltaIdeal, actorSector); + DoElasticPhysics(isElastic, elapsedTicks, deltaIdeal, hitSector); EnsureActorVisibility(); @@ -743,19 +758,9 @@ if (!psengine->GetG3D()->BeginDraw( psengine->GetEngine()->GetBeginDrawFlags() | CSDRAW_3DGRAPHICS)) return false; - // if the actor changed sectors, then ensure that the position is correct (in case it's a warping portal) - if (actorSector != lastActorSector && lastActorSector != 0) - { - // calculate the new actual data using relative error from last frame - SetPosition(GetPosition() + GetPosition(CAMERA_ERR), CAMERA_ACTUAL_DATA); - SetTarget(GetTarget() + GetTarget(CAMERA_ERR), CAMERA_ACTUAL_DATA); - SetUp(GetUp() + GetUp(CAMERA_ERR), CAMERA_ACTUAL_DATA); - } - // assume the normal camera movement is good, and move the camera - view->GetCamera()->SetSector(actorSector); - view->GetCamera()->GetTransform().SetOrigin(actorPos); - view->GetCamera()->OnlyPortals(true); + view->GetCamera()->SetSector(hitSector); + view->GetCamera()->GetTransform().SetOrigin(GetTarget()); view->GetCamera()->GetTransform().LookAt(GetTarget(CAMERA_ACTUAL_DATA) - GetPosition(CAMERA_ACTUAL_DATA), GetUp(CAMERA_ACTUAL_DATA)); view->GetCamera()->MoveWorld(GetPosition(CAMERA_ACTUAL_DATA) - view->GetCamera()->GetTransform().GetOrigin()); @@ -766,7 +771,7 @@ SetTarget(GetTarget(CAMERA_ACTUAL_DATA) - GetTarget(), CAMERA_ERR); SetUp(GetUp(CAMERA_ACTUAL_DATA) - GetUp(), CAMERA_ERR); - lastActorSector = actorSector; + lastCameraSector = hitSector; // not needed at this point //CloneCameraModeData(CAMERA_ACTUAL_DATA, CAMERA_LAST_ACTUAL); Modified: trunk/src/client/pscamera.h =================================================================== --- trunk/src/client/pscamera.h 2009-11-20 23:50:19 UTC (rev 4761) +++ trunk/src/client/pscamera.h 2009-11-21 04:01:08 UTC (rev 4762) @@ -665,7 +665,7 @@ /// Have the settings been loaded from file and the camera mode been initialized? bool cameraInitialized; - iSector * lastActorSector; + iSector * lastCameraSector; GEMClientActor* actor; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-21 22:05:12
|
Revision: 4767 http://planeshift.svn.sourceforge.net/planeshift/?rev=4767&view=rev Author: mgist Date: 2009-11-21 22:04:42 +0000 (Sat, 21 Nov 2009) Log Message: ----------- - Fixed camera jumping around when moving through a portal. Requires CS r33225. Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscamera.h Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-11-21 16:16:17 UTC (rev 4766) +++ trunk/src/client/pscamera.cpp 2009-11-21 22:04:42 UTC (rev 4767) @@ -33,6 +33,7 @@ #include <ivideo/graph3d.h> #include <csutil/flags.h> #include <iengine/mesh.h> +#include <iengine/portal.h> #include <csutil/xmltiny.h> #include <imesh/object.h> #include <imesh/spritecal3d.h> @@ -177,9 +178,6 @@ npcOldRot = 0.0f; vel = 0.0f; - - lastCameraSector = 0; - cameraInitialized = false; cmdsource->Subscribe("/tellnpc", this); @@ -712,16 +710,55 @@ cosf(actorYRot)*firstPersonPositionOffset.z); } + // Save and set camera data. + iSector* targetSector; + csVector3 oldTarget = actorEye; + view->GetCamera()->OnlyPortals(true); + bool mirrored = view->GetCamera()->IsMirrored(); + csVector3 oldOrigin = view->GetCamera()->GetTransform().GetOrigin(); + // Do a hitbeam between Position and Target to find the correct sector and coordinates. - csVector3 oldEye = actorEye; - csVector3 diff = actorEye - actorPos; - bool mirrored = view->GetCamera()->IsMirrored(); - view->GetCamera()->OnlyPortals(true); view->GetCamera()->GetTransform().SetOrigin(actorPos); - iSector* hitSector = actorSector->FollowSegment(view->GetCamera()->GetTransform(), - actorEye, mirrored, view->GetCamera()->GetOnlyPortals()); - actorPos = actorEye - diff; + { + csVector3 diff = actorEye - actorPos; + targetSector = actorSector->FollowSegment(view->GetCamera()->GetTransform(), + actorEye, mirrored, view->GetCamera()->GetOnlyPortals()); + actorPos = actorEye - diff; + } + // Correct previous frame camera data for warping portals. + if (lastTargetSector.IsValid() && targetSector != lastTargetSector) + { + // Do a hitbeam between the old and new sectors to get the conversion. + iPortal* transversed_portals[2]; + iMeshWrapper* portal_meshes[2]; + int firstIndex = 0, lastIndex = 1; + view->GetCamera()->GetTransform().SetOrigin(GetTarget(CAMERA_ACTUAL_DATA)); + { + lastTargetSector->FollowSegment(view->GetCamera()->GetTransform(), + oldTarget, mirrored, view->GetCamera()->GetOnlyPortals(), transversed_portals, + portal_meshes, firstIndex, &lastIndex); + } + view->GetCamera()->GetTransform().SetOrigin(oldOrigin); + + if (lastIndex != -1) + { + for (int p = firstIndex; p <= lastIndex; ++p) + { + iPortal *po = transversed_portals[p]; + iMeshWrapper *pmw = portal_meshes[p]; + if (po->GetFlags ().Check (CS_PORTAL_WARP)) + { + csReversibleTransform warp_wor; + po->ObjectToWorld (pmw->GetMovable ()->GetTransform (), warp_wor); + po->WarpSpace (warp_wor, view->GetCamera()->GetTransform(), mirrored); + SetPosition(po->Warp (warp_wor, GetPosition(CAMERA_ACTUAL_DATA)), CAMERA_ACTUAL_DATA); + SetTarget(po->Warp (warp_wor, GetTarget(CAMERA_ACTUAL_DATA)), CAMERA_ACTUAL_DATA); + } + } + } + } + // calculate ideal camera data (won't affect the actual camera data yet) DoCameraIdealCalcs(elapsedTicks, actorPos, actorEye, actorYRot); @@ -735,12 +772,6 @@ // transition phase calculations DoCameraTransition(); - // Hack around elastic issues on sector change. - if (hitSector != lastCameraSector) - { - isElastic = false; - } - // this makes the deltaIdeal data true to it's delta wording by subtracting the current ideal data if (isElastic) { @@ -750,7 +781,7 @@ } // interpolate between ideal and actual camera data - DoElasticPhysics(isElastic, elapsedTicks, deltaIdeal, hitSector); + DoElasticPhysics(isElastic, elapsedTicks, deltaIdeal, targetSector); EnsureActorVisibility(); @@ -759,11 +790,12 @@ return false; // assume the normal camera movement is good, and move the camera - view->GetCamera()->SetSector(hitSector); + view->GetCamera()->SetSector(targetSector); view->GetCamera()->GetTransform().SetOrigin(GetTarget()); view->GetCamera()->GetTransform().LookAt(GetTarget(CAMERA_ACTUAL_DATA) - GetPosition(CAMERA_ACTUAL_DATA), GetUp(CAMERA_ACTUAL_DATA)); view->GetCamera()->MoveWorld(GetPosition(CAMERA_ACTUAL_DATA) - view->GetCamera()->GetTransform().GetOrigin()); + // Draw the world. view->Draw(); // calculate the error of the camera @@ -771,10 +803,7 @@ SetTarget(GetTarget(CAMERA_ACTUAL_DATA) - GetTarget(), CAMERA_ERR); SetUp(GetUp(CAMERA_ACTUAL_DATA) - GetUp(), CAMERA_ERR); - lastCameraSector = hitSector; - - // not needed at this point - //CloneCameraModeData(CAMERA_ACTUAL_DATA, CAMERA_LAST_ACTUAL); + lastTargetSector = targetSector; return true; } @@ -1527,12 +1556,12 @@ csVector3 newPseudoPos = CalcCollisionPos(GetTarget(), GetPosition(), sector); float cameraSpringCoef, cameraInertialDampeningCoef, cameraSpringLength; - if (hasCollision) - { + if (hasCollision) + { cameraSpringCoef = GetSpringCoef(CAMERA_COLLISION); cameraInertialDampeningCoef = GetDampeningCoef(CAMERA_COLLISION); cameraSpringLength = GetSpringLength(CAMERA_COLLISION); - } + } else if (!inTransitionPhase) { cameraSpringCoef = GetSpringCoef(); @@ -1549,18 +1578,18 @@ csVector3 velIdealPos, velIdealTar, velIdealUp, newPos, newTar, newUp; newPos = CalcElasticPos(GetPosition(CAMERA_ACTUAL_DATA), newPseudoPos, deltaIdeal.worldPos, - (float)elapsedTicks/1000.0f, cameraSpringCoef, - cameraInertialDampeningCoef, cameraSpringLength); + (float)elapsedTicks/1000.0f, cameraSpringCoef, + cameraInertialDampeningCoef, cameraSpringLength); SetPosition(newPos, CAMERA_ACTUAL_DATA); newTar = CalcElasticPos(GetTarget(CAMERA_ACTUAL_DATA), GetTarget(), deltaIdeal.worldTar, - (float)elapsedTicks/1000.0f, cameraSpringCoef, - cameraInertialDampeningCoef, cameraSpringLength); + (float)elapsedTicks/1000.0f, cameraSpringCoef, + cameraInertialDampeningCoef, cameraSpringLength); SetTarget(newTar, CAMERA_ACTUAL_DATA); newUp = CalcElasticPos(GetUp(CAMERA_ACTUAL_DATA), GetUp(), deltaIdeal.worldUp, - (float)elapsedTicks/1000.0f, cameraSpringCoef, - cameraInertialDampeningCoef, cameraSpringLength); + (float)elapsedTicks/1000.0f, cameraSpringCoef, + cameraInertialDampeningCoef, cameraSpringLength); SetUp(newUp, CAMERA_ACTUAL_DATA); } else Modified: trunk/src/client/pscamera.h =================================================================== --- trunk/src/client/pscamera.h 2009-11-21 16:16:17 UTC (rev 4766) +++ trunk/src/client/pscamera.h 2009-11-21 22:04:42 UTC (rev 4767) @@ -665,7 +665,7 @@ /// Have the settings been loaded from file and the camera mode been initialized? bool cameraInitialized; - iSector * lastCameraSector; + csWeakRef<iSector> lastTargetSector; GEMClientActor* actor; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-11-24 01:27:36
|
Revision: 4780 http://planeshift.svn.sourceforge.net/planeshift/?rev=4780&view=rev Author: kennygraunke Date: 2009-11-24 01:27:27 +0000 (Tue, 24 Nov 2009) Log Message: ----------- Remove some seemingly unused nullmesh code. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-11-23 21:34:19 UTC (rev 4779) +++ trunk/src/client/bgloader/loader.cpp 2009-11-24 01:27:27 UTC (rev 4780) @@ -824,7 +824,7 @@ csString msg; msg.Format("Invalid submesh reference '%s' in meshobj '%s' in sector '%s'", submesh->GetAttributeValue("name"), m->name.GetData(), s->name.GetData()); - CS_ASSERT_MSG(msg.GetData(), false); + //CS_ASSERT_MSG(msg.GetData(), false); } } } Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-11-23 21:34:19 UTC (rev 4779) +++ trunk/src/client/pscelclient.cpp 2009-11-24 01:27:27 UTC (rev 4780) @@ -179,13 +179,6 @@ unresSector = psengine->GetEngine()->CreateSector("SectorWhereWeKeepEntitiesResidingInUnloadedMaps"); - // Init nullmesh factory. - nullfact = psengine->GetEngine()->CreateMeshFactory("crystalspace.mesh.object.null", "nullmesh"); - csRef<iNullFactoryState> nullstate = scfQueryInterface<iNullFactoryState> (nullfact->GetMeshObjectFactory()); - csBox3 bbox; - bbox.AddBoundingVertex(csVector3(0.0f)); - nullstate->SetBoundingBox(bbox); - LoadEffectItems(); return true; Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-11-23 21:34:19 UTC (rev 4779) +++ trunk/src/client/pscelclient.h 2009-11-24 01:27:27 UTC (rev 4780) @@ -253,14 +253,6 @@ */ void AddInstanceObject(const char* name, csRef<InstanceObject> object); - /** - * Returns the nullmesh factory. - */ - iMeshFactoryWrapper* GetNullFact() const - { - return nullfact; - } - protected: /** Finds given entity in list of unresolved entities */ csList<UnresolvedPos*>::Iterator FindUnresolvedPos(GEMClientObject * entity); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-28 21:38:12
|
Revision: 4813 http://planeshift.svn.sourceforge.net/planeshift/?rev=4813&view=rev Author: mgist Date: 2009-11-28 21:38:04 +0000 (Sat, 28 Nov 2009) Log Message: ----------- - Fixed frame limit on loading. - Some misc loading improvements. Modified Paths: -------------- trunk/src/client/bgloader/loader.cpp trunk/src/client/bgloader/loader.h trunk/src/client/psengine.cpp trunk/src/client/psengine.h trunk/src/client/zonehandler.cpp Modified: trunk/src/client/bgloader/loader.cpp =================================================================== --- trunk/src/client/bgloader/loader.cpp 2009-11-28 21:24:06 UTC (rev 4812) +++ trunk/src/client/bgloader/loader.cpp 2009-11-28 21:38:04 UTC (rev 4813) @@ -1240,9 +1240,13 @@ void BgLoader::ContinueLoading(bool waiting) { // Limit even while waiting - we want some frames. + size_t i = 0; size_t count = 0; - while(count < 20) + while(count < 10) { + // True if at least one mesh finished load. + bool finished = false; + // Delete from delete queue (fairly expensive, so limited per update). if(!deleteQueue.IsEmpty()) { @@ -1250,11 +1254,16 @@ deleteQueue.DeleteIndexFast(0); } + // Check if we need to reset i + if (i == loadingMeshes.GetSize()) + i = 0; + // Check already loading meshes. - for(size_t i=0; i<(loadingMeshes.GetSize() < 10 ? loadingMeshes.GetSize() : 10); ++i) + for(; i<(loadingMeshes.GetSize() < 20 ? loadingMeshes.GetSize() : 20); ++i) { if(LoadMesh(loadingMeshes[i])) { + finished = true; finalisableMeshes.Push(loadingMeshes[i]); loadingMeshes.DeleteIndex(i); } @@ -1263,17 +1272,19 @@ // Finalise loaded meshes (expensive, so limited per update). if(!finalisableMeshes.IsEmpty()) { - engine->SyncEngineListsNow(tloader); + if(finished) + engine->SyncEngineListsNow(tloader); + FinishMeshLoad(finalisableMeshes[0]); finalisableMeshes.DeleteIndexFast(0); } // Load meshgens. - for(size_t i=0; i<loadingMeshGen.GetSize(); ++i) + for(size_t j=0; j<loadingMeshGen.GetSize(); ++j) { - if(LoadMeshGen(loadingMeshGen[i])) + if(LoadMeshGen(loadingMeshGen[j])) { - loadingMeshGen.DeleteIndex(i); + loadingMeshGen.DeleteIndex(j); } } Modified: trunk/src/client/bgloader/loader.h =================================================================== --- trunk/src/client/bgloader/loader.h 2009-11-28 21:24:06 UTC (rev 4812) +++ trunk/src/client/bgloader/loader.h 2009-11-28 21:38:04 UTC (rev 4813) @@ -112,7 +112,7 @@ /** * Returns the number of objects currently loading. */ - size_t GetLoadingCount() { return loadingMeshes.GetSize() + finalisableMeshes.GetSize() + deleteQueue.GetSize(); } + size_t GetLoadingCount() { return loadingMeshes.GetSize()*2 + finalisableMeshes.GetSize() + deleteQueue.GetSize(); } /** * Returns a pointer to the object registry. Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-11-28 21:24:06 UTC (rev 4812) +++ trunk/src/client/psengine.cpp 2009-11-28 21:38:04 UTC (rev 4813) @@ -1047,24 +1047,19 @@ // Find the time taken since we left this function elapsedTime = csGetTicks() - elapsed; - static pawsWidget* loading = NULL; - if(!loading) - loading = paws->FindWidget("LoadWindow", false); - - // Loading competes with drawing in THIS thread so we can't sleep - if(loading && loading->IsVisible()) + // If we're loading then do special handling. + if(zonehandler.IsValid() && zonehandler->IsLoading()) { - sleeptime = 1000; - - // Here we sacrifice drawing time for loading time - if(elapsedTime < sleeptime) - return false; - else + // Do 30 frame updates a second at most. + if(elapsedTime < 33) { - elapsedTime = csGetTicks(); - return true; + // If we're not due to update then sleep. + csSleep(33 - elapsedTime); } + // Now it's time to draw another frame. + elapsed = csGetTicks(); + return true; } // Define sleeptimes Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-11-28 21:24:06 UTC (rev 4812) +++ trunk/src/client/psengine.h 2009-11-28 21:38:04 UTC (rev 4813) @@ -415,7 +415,7 @@ csRefArray<iThreadReturn> precaches; csRef<iStringArray> meshes; csRef<iStringArray> maps; - uint lastLoadingCount; + size_t lastLoadingCount; // True if we've requested the main actor. bool actorRequested; Modified: trunk/src/client/zonehandler.cpp =================================================================== --- trunk/src/client/zonehandler.cpp 2009-11-28 21:24:06 UTC (rev 4812) +++ trunk/src/client/zonehandler.cpp 2009-11-28 21:38:04 UTC (rev 4813) @@ -287,8 +287,6 @@ psengine->GetLoader()->ContinueLoading(true); loadProgressBar->SetCurrentValue(loadProgressBar->GetTotalValue() - psengine->GetLoader()->GetLoadingCount()); } - - psengine->ForceRefresh(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2009-11-29 14:00:06
|
Revision: 4823 http://planeshift.svn.sourceforge.net/planeshift/?rev=4823&view=rev Author: weltall2 Date: 2009-11-29 13:59:57 +0000 (Sun, 29 Nov 2009) Log Message: ----------- added an uncombine button Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/client/gui/pawscontainerdescwindow.cpp Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2009-11-29 09:58:13 UTC (rev 4822) +++ trunk/src/client/cmdusers.cpp 2009-11-29 13:59:57 UTC (rev 4823) @@ -567,6 +567,7 @@ else if (words[0] == "/use" || words[0] == "/combine" || + words[0] == "/uncombine" || words[0] == "/construct" || words[0] == "/dig" || words[0] == "/fish" || Modified: trunk/src/client/gui/pawscontainerdescwindow.cpp =================================================================== --- trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-11-29 09:58:13 UTC (rev 4822) +++ trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-11-29 13:59:57 UTC (rev 4823) @@ -48,6 +48,7 @@ #define VIEW_BUTTON 11 #define INVENTORY_BUTTON 12 #define COMBINE_BUTTON 13 +#define UNCOMBINE_BUTTON 14 ////////////////////////////////////////////////////////////////////// // Construction/Destruction @@ -264,7 +265,7 @@ return true; } - else if ( widget->GetID() == COMBINE_BUTTON ) + else if ( widget->GetID() == COMBINE_BUTTON || widget->GetID() == UNCOMBINE_BUTTON ) { GEMClientObject* oldtarget = psengine->GetCharManager()->GetTarget(); EID oldID; @@ -276,11 +277,15 @@ psUserActionMessage setnewtarget(0, containerID, "select"); setnewtarget.SendMessage(); //printf("combining\n"); - psengine->GetCmdHandler()->Execute("/combine"); + if(widget->GetID() == COMBINE_BUTTON) + psengine->GetCmdHandler()->Execute("/combine"); + else + psengine->GetCmdHandler()->Execute("/uncombine"); //printf("selecting oldID %d\n", oldID); psUserActionMessage setoldtarget(0, oldID, "select"); setoldtarget.SendMessage(); } + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-11-29 15:03:37
|
Revision: 4827 http://planeshift.svn.sourceforge.net/planeshift/?rev=4827&view=rev Author: mgist Date: 2009-11-29 15:03:29 +0000 (Sun, 29 Nov 2009) Log Message: ----------- - Fix for #3495 Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-11-29 14:32:22 UTC (rev 4826) +++ trunk/src/client/pscelclient.cpp 2009-11-29 15:03:29 UTC (rev 4827) @@ -1066,13 +1066,29 @@ iSector* old = pcmesh->GetMovable()->GetSectors()->Get(0); if(old != sector) { - // Is this right? - instance->pcmesh->GetMovable()->SetSector(sector); + // Remove the old sector. + if (instance->sectors.Delete(old) && instance->sectors.Find(old) == csArrayItemNotFound) + { + instance->pcmesh->GetMovable()->GetSectors()->Remove(old); + } + + // Add the new sector. + if (instance->sectors.Find(sector) == csArrayItemNotFound) + { + instance->pcmesh->GetMovable()->GetSectors()->Add(sector); + } + + instance->sectors.Push(sector); } } else { - instance->pcmesh->GetMovable()->SetSector(sector); + if (instance->pcmesh->GetMovable()->GetSectors()->Find(sector) == csArrayItemNotFound) + { + instance->pcmesh->GetMovable()->GetSectors()->Add(sector); + } + + instance->sectors.Push(sector); } instance->pcmesh->GetMovable()->SetPosition(0.0f); Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2009-11-29 14:32:22 UTC (rev 4826) +++ trunk/src/client/pscelclient.h 2009-11-29 15:03:29 UTC (rev 4827) @@ -91,6 +91,7 @@ { csRef<iMeshWrapper> pcmesh; csBox3 bbox; + csWeakRefArray<iSector> sectors; }; /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-11-29 22:55:25
|
Revision: 4835 http://planeshift.svn.sourceforge.net/planeshift/?rev=4835&view=rev Author: Khakilord Date: 2009-11-29 22:55:18 +0000 (Sun, 29 Nov 2009) Log Message: ----------- Added anim when jumping inplace. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/psmovement.cpp Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2009-11-29 22:24:20 UTC (rev 4834) +++ trunk/src/client/pscelclient.cpp 2009-11-29 22:55:18 UTC (rev 4835) @@ -1723,6 +1723,8 @@ // Taking larger of the 2 axis; cal3d axis are the opposite of CEL's bool useZ = ABS(velocity.z) > ABS(velocity.x); float cal3dvel = useZ ? velocity.z : velocity.x; + if(cal3dvel == 0.0) + cal3dvel = velocity.y; cal3dstate->SetVelocity(-cal3dvel, &psengine->GetRandomGen()); if((velocity.x != 0 || velocity.z != 0) && velocity.Norm() < 2) Modified: trunk/src/client/psmovement.cpp =================================================================== --- trunk/src/client/psmovement.cpp 2009-11-29 22:24:20 UTC (rev 4834) +++ trunk/src/client/psmovement.cpp 2009-11-29 22:55:18 UTC (rev 4835) @@ -199,7 +199,8 @@ if (event.Name == event_frame) { // If we we've returned to the ground, update allowed velocity - if (!onGround && actor->Movement().IsOnGround()) + if ((!onGround && actor->Movement().IsOnGround()) || + (onGround && !actor->Movement().IsOnGround())) UpdateVelocity(); // UpdateMouseLook will take care of "recent mouse-look turning" based on "bool mouseLook" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2009-11-30 03:03:26
|
Revision: 4839 http://planeshift.svn.sourceforge.net/planeshift/?rev=4839&view=rev Author: Khakilord Date: 2009-11-30 03:03:18 +0000 (Mon, 30 Nov 2009) Log Message: ----------- Fixed crazy camera behaviour crossing warping portals or rotating cameras near warping portals. Modified Paths: -------------- trunk/src/client/pscamera.cpp trunk/src/client/pscamera.h Modified: trunk/src/client/pscamera.cpp =================================================================== --- trunk/src/client/pscamera.cpp 2009-11-30 00:39:07 UTC (rev 4838) +++ trunk/src/client/pscamera.cpp 2009-11-30 03:03:18 UTC (rev 4839) @@ -34,6 +34,7 @@ #include <csutil/flags.h> #include <iengine/mesh.h> #include <iengine/portal.h> +#include <iengine/portalcontainer.h> #include <csutil/xmltiny.h> #include <imesh/object.h> #include <imesh/spritecal3d.h> @@ -712,7 +713,7 @@ // Save and set camera data. iSector* targetSector; - csVector3 oldTarget = actorEye; + csVector3 oldTarget = GetTarget(CAMERA_ACTUAL_DATA); view->GetCamera()->OnlyPortals(true); bool mirrored = view->GetCamera()->IsMirrored(); csVector3 oldOrigin = view->GetCamera()->GetTransform().GetOrigin(); @@ -729,34 +730,29 @@ // Correct previous frame camera data for warping portals. if (lastTargetSector.IsValid() && targetSector != lastTargetSector) { - // Do a hitbeam between the old and new sectors to get the conversion. - iPortal* transversed_portals[2]; - iMeshWrapper* portal_meshes[2]; - int firstIndex = 0, lastIndex = 1; - view->GetCamera()->GetTransform().SetOrigin(GetTarget(CAMERA_ACTUAL_DATA)); - { - lastTargetSector->FollowSegment(view->GetCamera()->GetTransform(), - oldTarget, mirrored, view->GetCamera()->GetOnlyPortals(), transversed_portals, - portal_meshes, firstIndex, &lastIndex); - } - view->GetCamera()->GetTransform().SetOrigin(oldOrigin); + // Cannot do a hitbeam here because the last known position of the actor is still on this + // side of the portal. - if (lastIndex != -1) - { - for (int p = firstIndex; p <= lastIndex; ++p) - { - iPortal *po = transversed_portals[p]; - iMeshWrapper *pmw = portal_meshes[p]; - if (po->GetFlags ().Check (CS_PORTAL_WARP)) - { - csReversibleTransform warp_wor; - po->ObjectToWorld (pmw->GetMovable ()->GetTransform (), warp_wor); - po->WarpSpace (warp_wor, view->GetCamera()->GetTransform(), mirrored); - SetPosition(po->Warp (warp_wor, GetPosition(CAMERA_ACTUAL_DATA)), CAMERA_ACTUAL_DATA); - SetTarget(po->Warp (warp_wor, GetTarget(CAMERA_ACTUAL_DATA)), CAMERA_ACTUAL_DATA); - } - } - } + csSet<csPtrKey<iMeshWrapper> > portals = lastTargetSector->GetPortalMeshes(); + csSet<csPtrKey<iMeshWrapper> >::GlobalIterator portalIter = portals.GetIterator(); + while(portalIter.HasNext()) + { + iMeshWrapper *pmw = portalIter.Next(); + int portalCount = pmw->GetPortalContainer()->GetPortalCount(); + for(int portalIndex = 0; portalIndex < portalCount; portalIndex++) + { + iPortal *po = pmw->GetPortalContainer()->GetPortal(portalIndex); + // TODO: Also do a distance check here to be certain this is the correct portal. + if (po->GetSector() == targetSector && po->GetFlags ().Check (CS_PORTAL_WARP)) + { + csReversibleTransform warp_wor; + po->ObjectToWorld (pmw->GetMovable ()->GetTransform (), warp_wor); + po->WarpSpace (warp_wor, view->GetCamera()->GetTransform(), mirrored); + SetPosition(po->Warp (warp_wor, GetPosition(CAMERA_ACTUAL_DATA)), CAMERA_ACTUAL_DATA); + SetTarget(po->Warp (warp_wor, GetTarget(CAMERA_ACTUAL_DATA)), CAMERA_ACTUAL_DATA); + } + } + } } // calculate ideal camera data (won't affect the actual camera data yet) @@ -1502,7 +1498,7 @@ } } -csVector3 psCamera::CalcCollisionPos(const csVector3& pseudoTarget, const csVector3& pseudoPosition, iSector* sector) +csVector3 psCamera::CalcCollisionPos(const csVector3& pseudoTarget, const csVector3& pseudoPosition, iSector*& sector) { hasCollision = false; if (!useCameraCD) @@ -1519,13 +1515,15 @@ csVector3 isect; csIntersectingTriangle closest_tri; csVector3 modifiedTarget = pseudoTarget; + iSector* endSector; //iMeshWrapper* mesh = sector->HitBeamPortals(modifiedTarget, pseudoPosition, isect, &sel); // iMeshWrapper * mesh; - csColliderHelper::TraceBeam(cdsys, sector, modifiedTarget, pseudoPosition, true, closest_tri, isect, &mesh); + csColliderHelper::TraceBeam(cdsys, sector, modifiedTarget, pseudoPosition, true, closest_tri, isect, &mesh, &endSector); if (mesh) { + sector = endSector; actor->GetMesh()->GetFlags().Reset(CS_ENTITY_NOHITBEAM); hasCollision = true; return isect + (modifiedTarget-isect)*0.1f; @@ -1550,11 +1548,19 @@ void psCamera::DoElasticPhysics(bool isElastic, const csTicks elapsedTicks, const CameraData& deltaIdeal, iSector* sector) { + iSector* newSector = sector; + csVector3 newPseudoPos = CalcCollisionPos(GetTarget(), GetPosition(), newSector); + float squaredChange = (newPseudoPos - GetPosition(CAMERA_ACTUAL_DATA)).SquaredNorm(); + + // TODO: Use warp information from portal to transform to the correct position instead of the hack + // below. + // If the camera is really far away from the target position then hack and force it to a sane + // position. This is needed when rotating a camera near a warping portal. + if((newSector != sector && squaredChange > 50.0f * 50.0f) || squaredChange > 100.0f * 100.0f) + newPseudoPos = GetTarget(); // if the camera mode is elastic then progress gradually to the ideal pos if (isElastic) { - csVector3 newPseudoPos = CalcCollisionPos(GetTarget(), GetPosition(), sector); - float cameraSpringCoef, cameraInertialDampeningCoef, cameraSpringLength; if (hasCollision) { @@ -1586,7 +1592,7 @@ (float)elapsedTicks/1000.0f, cameraSpringCoef, cameraInertialDampeningCoef, cameraSpringLength); SetTarget(newTar, CAMERA_ACTUAL_DATA); - + newUp = CalcElasticPos(GetUp(CAMERA_ACTUAL_DATA), GetUp(), deltaIdeal.worldUp, (float)elapsedTicks/1000.0f, cameraSpringCoef, cameraInertialDampeningCoef, cameraSpringLength); @@ -1595,7 +1601,7 @@ else { // camera isn't elastic, so no interpolation is done between ideal and actual - SetPosition(CalcCollisionPos(GetTarget(), GetPosition(), sector), CAMERA_ACTUAL_DATA); + SetPosition(newPseudoPos, CAMERA_ACTUAL_DATA); SetTarget(GetTarget(), CAMERA_ACTUAL_DATA); SetUp(GetUp(), CAMERA_ACTUAL_DATA); } Modified: trunk/src/client/pscamera.h =================================================================== --- trunk/src/client/pscamera.h 2009-11-30 00:39:07 UTC (rev 4838) +++ trunk/src/client/pscamera.h 2009-11-30 03:03:18 UTC (rev 4839) @@ -521,9 +521,10 @@ * @param pseudoTarget the first end of the line segment to test * @param pseudoPosition the second end of the line segment to test * @param sector the sector to start from (should be the sector where pseudoTarget resides) + * this will be set to the sector where the line segment ends * @return the new world position where it first collides without the world */ - csVector3 CalcCollisionPos(const csVector3& pseudoTarget, const csVector3& pseudoPosition, iSector* sector); + csVector3 CalcCollisionPos(const csVector3& pseudoTarget, const csVector3& pseudoPosition, iSector*& sector); /** decides when the camera isn't in transition mode and handles taking it out of transition mode */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-12-08 09:19:22
|
Revision: 4919 http://planeshift.svn.sourceforge.net/planeshift/?rev=4919&view=rev Author: kennygraunke Date: 2009-12-08 09:19:10 +0000 (Tue, 08 Dec 2009) Log Message: ----------- Add a psEngine::GetMsgStrings wrapper. Eventually we should move the common strings out of psClientDR. Modified Paths: -------------- trunk/src/client/gui/pawscontainerdescwindow.cpp trunk/src/client/gui/pawsitemdescriptionwindow.cpp trunk/src/client/guihandler.cpp trunk/src/client/psengine.cpp trunk/src/client/psengine.h Modified: trunk/src/client/gui/pawscontainerdescwindow.cpp =================================================================== --- trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-12-08 09:10:37 UTC (rev 4918) +++ trunk/src/client/gui/pawscontainerdescwindow.cpp 2009-12-08 09:19:10 UTC (rev 4919) @@ -43,11 +43,6 @@ #include "globals.h" -#include "pscelclient.h" -#include "psclientdr.h" - - - // BUTTONS AND SLOTS #define VIEW_BUTTON 11 #define INVENTORY_BUTTON 12 @@ -125,7 +120,7 @@ void pawsContainerDescWindow::HandleViewItem( MsgEntry* me ) { Show(); - psViewItemDescription mesg( me, psengine->GetCelClient()->GetClientDR()->GetMsgStrings() ); + psViewItemDescription mesg(me, psengine->GetMsgStrings()); description->SetText( mesg.itemDescription ); name->SetText( mesg.itemName ); Modified: trunk/src/client/gui/pawsitemdescriptionwindow.cpp =================================================================== --- trunk/src/client/gui/pawsitemdescriptionwindow.cpp 2009-12-08 09:10:37 UTC (rev 4918) +++ trunk/src/client/gui/pawsitemdescriptionwindow.cpp 2009-12-08 09:19:10 UTC (rev 4919) @@ -35,9 +35,6 @@ #include "net/clientmsghandler.h" #include "util/log.h" -#include "pscelclient.h" -#include "psclientdr.h" - ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// @@ -73,7 +70,7 @@ void pawsItemDescriptionWindow::HandleMessage( MsgEntry* me ) { Show(); - psViewItemDescription mesg( me, psengine->GetCelClient()->GetClientDR()->GetMsgStrings()); + psViewItemDescription mesg(me, psengine->GetMsgStrings()); description->SetText( mesg.itemDescription ); csString nameStr; nameStr = mesg.itemName; Modified: trunk/src/client/guihandler.cpp =================================================================== --- trunk/src/client/guihandler.cpp 2009-12-08 09:10:37 UTC (rev 4918) +++ trunk/src/client/guihandler.cpp 2009-12-08 09:19:10 UTC (rev 4919) @@ -41,8 +41,6 @@ #include "guihandler.h" #include "globals.h" #include "psinventorycache.h" -#include "pscelclient.h" -#include "psclientdr.h" GUIHandler::GUIHandler() @@ -67,7 +65,7 @@ void GUIHandler::HandleInventory(MsgEntry* me) { - psGUIInventoryMessage incoming(me, psengine->GetCelClient()->GetClientDR()->GetMsgStrings()); + psGUIInventoryMessage incoming(me, psengine->GetMsgStrings()); // drop inventory list, if its version is older than the current. // this may happen due to UDP latency. Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2009-12-08 09:10:37 UTC (rev 4918) +++ trunk/src/client/psengine.cpp 2009-12-08 09:19:10 UTC (rev 4919) @@ -1118,26 +1118,28 @@ const char* psEngine::FindCommonString(unsigned int cstr_id) { - if (!celclient) + csStringHashReversible* strings = GetMsgStrings(); + if (!strings) return ""; - psClientDR * clientDR = celclient->GetClientDR(); - if (!clientDR) - return ""; - - return clientDR->GetMsgStrings()->Request(cstr_id); + return strings->Request(cstr_id); } csStringID psEngine::FindCommonStringId(const char *str) { - if (!celclient) + csStringHashReversible* strings = GetMsgStrings(); + if (!strings) return csInvalidStringID; - psClientDR * clientDR = celclient->GetClientDR(); - if (!clientDR) - return csInvalidStringID; + return strings->Request(str); +} - return clientDR->GetMsgStrings()->Request(str); +csStringHashReversible* psEngine::GetMsgStrings() +{ + if (!celclient || !celclient->GetClientDR()) + return NULL; + + return celclient->GetClientDR()->GetMsgStrings(); } // ---------------------------------------------------------------------------- Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2009-12-08 09:10:37 UTC (rev 4918) +++ trunk/src/client/psengine.h 2009-12-08 09:19:10 UTC (rev 4919) @@ -20,6 +20,7 @@ #define __ENGINE_H__ #include <csutil/csstring.h> +#include <csutil/strhashr.h> #include <csutil/randomgen.h> #include <csutil/refarr.h> #include <csutil/sysfunc.h> @@ -330,6 +331,8 @@ */ csStringID FindCommonStringId(const char *str); + /// Get the message strings/common string table + csStringHashReversible* GetMsgStrings(); ///Get the status of the sound plugin, if available or not. bool GetSoundStatus() {return soundOn;} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-01-01 15:44:40
|
Revision: 5128 http://planeshift.svn.sourceforge.net/planeshift/?rev=5128&view=rev Author: weltall2 Date: 2010-01-01 15:44:32 +0000 (Fri, 01 Jan 2010) Log Message: ----------- fixed helms bracers belts cloaks dropping Modified Paths: -------------- trunk/src/client/gui/pawsslot.cpp trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/gui/pawsslot.cpp =================================================================== --- trunk/src/client/gui/pawsslot.cpp 2010-01-01 15:38:49 UTC (rev 5127) +++ trunk/src/client/gui/pawsslot.cpp 2010-01-01 15:44:32 UTC (rev 5128) @@ -150,7 +150,9 @@ void pawsSlot::PlaceItem( const char* imageName, const char* meshFactName, int count ) { meshfactName = meshFactName; - + + psengine->GetCelClient()->replaceRacialGroup(meshfactName); + empty = false; image = PawsManager::GetSingleton().GetTextureManager()->GetPawsImage(imageName); Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2010-01-01 15:38:49 UTC (rev 5127) +++ trunk/src/client/pscelclient.cpp 2010-01-01 15:44:32 UTC (rev 5128) @@ -198,10 +198,10 @@ 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); + local_player = actor; } @@ -1019,6 +1019,28 @@ instanceObjects.Put(name, object); } +void psCelClient::replaceRacialGroup(csString &string) +{ + //avoids useless elaborations + if(!string.Length()) return; + //safe defaults + csString HelmReplacement("stonebm"); + csString BracerReplacement("stonebm"); + csString BeltReplacement("stonebm"); + csString CloakReplacement("stonebm"); + if (GetMainPlayer()) + { + HelmReplacement = GetMainPlayer()->helmGroup; + BracerReplacement = GetMainPlayer()->BracerGroup; + BeltReplacement = GetMainPlayer()->BeltGroup; + CloakReplacement = GetMainPlayer()->CloakGroup; + } + string.ReplaceAll("$H", HelmReplacement); + string.ReplaceAll("$B", BracerReplacement); + string.ReplaceAll("$E", BeltReplacement); + string.ReplaceAll("$C", CloakReplacement); +} + //------------------------------------------------------------------------------- Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2010-01-01 15:38:49 UTC (rev 5127) +++ trunk/src/client/pscelclient.h 2010-01-01 15:44:32 UTC (rev 5128) @@ -253,6 +253,12 @@ * Add an instance object to the tree. */ void AddInstanceObject(const char* name, csRef<InstanceObject> object); + + /** Substituites in a string the group identifiers like $H $B etc depending on the race of the player. + * + * @param string The string where do to the replacements + */ + void replaceRacialGroup(csString &string); protected: /** Finds given entity in list of unresolved entities */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-01-07 22:55:29
|
Revision: 5165 http://planeshift.svn.sourceforge.net/planeshift/?rev=5165&view=rev Author: weltall2 Date: 2010-01-07 22:55:22 +0000 (Thu, 07 Jan 2010) Log Message: ----------- major improvement of the soundmanager, moved the combat music to be sector based and various other improvements and fixed all over the source. Removed references to specific audio files from sources external to the sound manager. Modified Paths: -------------- trunk/src/client/iclient/isoundmngr.h trunk/src/client/modehandler.cpp trunk/src/client/sound/pssoundmngr.cpp trunk/src/client/sound/pssoundmngr.h Modified: trunk/src/client/iclient/isoundmngr.h =================================================================== --- trunk/src/client/iclient/isoundmngr.h 2010-01-06 19:47:10 UTC (rev 5164) +++ trunk/src/client/iclient/isoundmngr.h 2010-01-07 22:55:22 UTC (rev 5165) @@ -162,8 +162,15 @@ /// This returns if we are playing npc voice sounds as a setting or not virtual bool PlayingVoices() = 0; - /// This returns if the music is the one of a fight or not - virtual void ChangeMusicMode(bool combat) = 0; + /** Change the mode if the player is fighting + * @param combat TRUE if we have to set combat music, otherwise FALSE + */ + virtual void SetCombatMusicMode(bool combat) = 0; + + /** Get the mode if the player is fighting + * @return TRUE if we have combat music, otherwise FALSE + */ + virtual bool GetCombatMusicMode() = 0; ///This returns the song name that is overriding virtual const char* GetSongName() = 0; Modified: trunk/src/client/modehandler.cpp =================================================================== --- trunk/src/client/modehandler.cpp 2010-01-06 19:47:10 UTC (rev 5164) +++ trunk/src/client/modehandler.cpp 2010-01-07 22:55:22 UTC (rev 5165) @@ -379,19 +379,10 @@ switch (mode) { case psModeMessage::PEACE: - soundmanager->StopOverrideBG(); - soundmanager->ChangeMusicMode(false); - //const char *sectorname = celclient->GetMainPlayer()->GetSector()->QueryObject()->GetName(); - //SetSectorMusic(sectorname); - soundmanager->FadeSectorSounds( FADE_UP ); + soundmanager->SetCombatMusicMode(false); break; case psModeMessage::COMBAT: - if (soundmanager->PlayingCombatMusic()) - { - soundmanager->OverrideBGSong("combat",iSoundManager::LOOP_SOUND); - soundmanager->FadeSectorSounds( FADE_DOWN ); - soundmanager->ChangeMusicMode(true); - } + soundmanager->SetCombatMusicMode(true); break; case psModeMessage::DEAD: if (soundmanager->PlayingMusic()) Modified: trunk/src/client/sound/pssoundmngr.cpp =================================================================== --- trunk/src/client/sound/pssoundmngr.cpp 2010-01-06 19:47:10 UTC (rev 5164) +++ trunk/src/client/sound/pssoundmngr.cpp 2010-01-07 22:55:22 UTC (rev 5165) @@ -177,6 +177,23 @@ currentSoundSector->ChangeTime( newTime ); } +void psSoundManager::SetCombatMusicMode(bool combat) +{ + if(combat == false) //combat is being disengaged + { + //restore normal background song + musicCombat = false; + if(currentSoundSector) + currentSoundSector->ChangeCombatStatus(false); + } + else if(PlayingCombatMusic()) + { + musicCombat = true; + if(currentSoundSector) + currentSoundSector->ChangeCombatStatus(true); + } +} + void psSoundManager::StartMapSoundSystem() { mapSoundSystem->Initialize(); @@ -531,10 +548,9 @@ if ( currentSoundSector ) currentSoundSector->StartBackground(); - if (musicCombat) + if (musicCombat && currentSoundSector) { - OverrideBGSong("combat",iSoundManager::LOOP_SOUND, 2.0); - FadeSectorSounds( FADE_DOWN ); + currentSoundSector->ChangeCombatStatus(true); } // if ( lastSoundSector ) lastSoundSector->StartBackground(); // Disable Music @@ -851,6 +867,9 @@ lastlastSoundSector = lastSoundSector; lastSoundSector = currentSoundSector; currentSoundSector = mapSoundSystem->GetSoundSectorByName(sector); + + if(!currentSoundSector) //warn a bit all sectors must be defined in the xml + Error2("Sector %s not found in soundsectors!!! Add it in the proper xml!\n", sector); // Transfer sound settings if ( currentSoundSector ) @@ -1145,6 +1164,7 @@ { csRef<iDocumentNode> background = backgroundIter->Next(); csString resource = background->GetAttributeValue("RESOURCE"); + csString type = background->GetAttributeValue("TYPE"); float minVol = background->GetAttributeValueAsFloat("MINVOL"); float maxVol = background->GetAttributeValueAsFloat("MAXVOL"); int fadeDelay = background->GetAttributeValueAsInt("FADEDELAY"); @@ -1177,11 +1197,51 @@ weather, loopStart,loopEnd, sndmngr->LoopBGM()); obj->SetResource( resource ); - manager->NewBackground( obj ); + //if this is a combat song add as such else default as normal background song. + if(type == "COMBAT") + manager->NewCombatBackground( obj ); + else + manager->NewBackground( obj ); } + + //HACK: for now we always add the "combat" resource to all sectors + csString resource = "combat"; + float minVol = 0.0f; + float maxVol = 1.0f; + int fadeDelay = 2; + int timeOfDay = -1; + int timeOfDayRange = 0; + int weather = -1; + size_t loopStart = 0; //need to find the proper position and fix the song + size_t loopEnd = 0; + csRef<SOUND_DATA_TYPE> snddata = sndmngr->GetSoundResource( resource ); + if (!snddata) + { + Error2("Failed to load Sound: %s", resource.GetData()); + continue; + } + + csRef<SOUND_STREAM_TYPE> sndstream = sndmngr->soundSystem->CreateStream(snddata, CS_SND3D_DISABLE); + if ( !sndstream ) + { + Error2("Failed to create Sound Stream: %s", resource.GetData()); + continue; + } + psSoundObject* obj = new psSoundObject (sndstream, this, + maxVol, minVol, + fadeDelay, + timeOfDay, + timeOfDayRange, + weather, loopStart,loopEnd, + sndmngr->LoopBGM()); + + manager->NewCombatBackground( obj ); + + //END HACK } } } + // Remove pending ones pendingSectors.DeleteAll(); @@ -1396,6 +1456,9 @@ music = true; this->engine = engine; mainBG = NULL; + mainCombatBG = NULL; + currentBG = NULL; + mapsoundsystem = mapSS; weather = 1; } @@ -1411,7 +1474,15 @@ mapsoundsystem->RemoveActiveSong(songs[i]); songs[i]->Stop(); } + + l = combatSongs.GetSize(); + for (i=0;i<l;i++) + { + mapsoundsystem->RemoveActiveSong(combatSongs[i]); + combatSongs[i]->Stop(); + } + l = ambient.GetSize(); for (i=0;i<l;i++) { @@ -1432,6 +1503,11 @@ songs.Push( song ); } +void psSectorSoundManager::NewCombatBackground( psSoundObject* song ) +{ + combatSongs.Push( song ); +} + void psSectorSoundManager::NewAmbient( psSoundObject* sound ) { ambient.Push( sound ); @@ -1525,28 +1601,9 @@ { music = true; - if ( mainBG ) - { - mapsoundsystem->RegisterActiveSong(mainBG); - if(mapsoundsystem->sndmngr->LoopBGM()) - mainBG->SetLooping(true); - else - mainBG->SetLooping(false); - mainBG->StartFade( FADE_UP ); - } - else - { - if ( songs.GetSize() > 0 ) - { - mapsoundsystem->RegisterActiveSong(songs[0]); - if(mapsoundsystem->sndmngr->LoopBGM()) - songs[0]->SetLooping(true); - else - songs[0]->SetLooping(false); - songs[0]->StartFade( FADE_UP ); - mainBG = songs[0]; - } - } + SearchAndSetBackgroundSong(false, false, mapsoundsystem->sndmngr->GetCombatMusicMode()); + SearchAndSetCombatSong(false, false, mapsoundsystem->sndmngr->GetCombatMusicMode()); + StartBG(); } @@ -1559,6 +1616,11 @@ mapsoundsystem->RemoveActiveSong(songs[z]); songs[z]->Stop(); } + for ( size_t z = 0; z < combatSongs.GetSize(); z++ ) + { + mapsoundsystem->RemoveActiveSong(combatSongs[z]); + combatSongs[z]->Stop(); + } } void psSectorSoundManager::StartSounds(int weather) @@ -1602,13 +1664,13 @@ void psSectorSoundManager::Fade( Fade_Direction dir ) { - if ( mainBG && HasMusic())//We should check that the sector can play music. + if ( currentBG && HasMusic())//We should check that the sector can play music. { if (dir == FADE_UP) { - mapsoundsystem->RegisterActiveSong(mainBG); + mapsoundsystem->RegisterActiveSong(currentBG); } - mainBG->StartFade( dir ); + currentBG->StartFade( dir ); } size_t z; @@ -1631,79 +1693,140 @@ } } +void psSectorSoundManager::ChangeCombatStatus(bool combatStatus) +{ + if(music) + { + if(combatStatus) + SearchAndSetCombatSong(false,false,false); + StartBG(); + } +} + void psSectorSoundManager::ChangeTime( int timeOfDay ) { + this->timeOfDay = timeOfDay; + if (music) + { + SearchAndSetBackgroundSong(true,false,mapsoundsystem->sndmngr->GetCombatMusicMode()); + StartBG(); + } +} + +void psSectorSoundManager::SetBGSong(psSoundObject* song, bool exitingFromCombat) +{ + if(song == NULL) return; + //we don't enable it again in case + if (!mapsoundsystem->FindSameActiveSong(song)) + { + if(exitingFromCombat) + song->SetPlayPos(song->GetLoopStartPos()); + } + mainBG = song; + +} + +void psSectorSoundManager::SetCombatBGSong(psSoundObject* song, bool combatTransition) +{ + if(song == NULL) return; + if (!mapsoundsystem->FindSameActiveSong(song)) + { + if(combatTransition) //if the combat music is a transition because we have changed sector set it to + song->SetPlayPos(song->GetLoopStartPos()); + else //< setposition is broken in cs + song->SetPlayPos(0); + } + + mainCombatBG = song; +} + +void psSectorSoundManager::SearchAndSetCombatSong(bool timeChange, bool weatherChange, bool combatStatus) +{ + SetCombatBGSong(SearchBackgroundSong(combatSongs, timeChange, weatherChange), combatStatus); +} + +psSoundObject* psSectorSoundManager::SearchBackgroundSong(csPDelArray<psSoundObject> &songList, bool timeChange, bool weatherChange) +{ + csArray<psSoundObject*> bestTimeWeatherSong; csArray<psSoundObject*> bestTimeSong; - if ( music ) + csArray<psSoundObject*> bestWeatherSong; + csArray<psSoundObject*> noReferenceSong; + + for (size_t z = 0; z < songList.GetSize(); z++ ) { - for (size_t z = 0; z < songs.GetSize(); z++ ) + //search for time restrained songs + if (songList[z]->MatchTime(timeOfDay)) { - if ( songs[z]->MatchTime( timeOfDay ) ) - bestTimeSong.Push(songs[z]); + //is this also weather matching? + if(songList[z]->MatchWeather(weather)) + bestTimeWeatherSong.Push(songList[z]); + else + bestTimeSong.Push(songList[z]); } + //search for weather restrained songs + else if (!timeChange && songList[z]->MatchWeather(weather)) + bestWeatherSong.Push(songList[z]); + //search for no restrain songs + else if (!timeChange && !weatherChange && songList[z]->HasNoTime() && songList[z]->HasNoWeather()) + noReferenceSong.Push(songList[z]); } - if ( bestTimeSong.GetSize() ) - SetBGSong(bestTimeSong[mapsoundsystem->GetRandomNumber(bestTimeSong.GetSize())]); + if (bestTimeWeatherSong.GetSize()) + return bestTimeWeatherSong[mapsoundsystem->GetRandomNumber(bestTimeWeatherSong.GetSize())]; + else if (bestTimeSong.GetSize()) + return bestTimeSong[mapsoundsystem->GetRandomNumber(bestTimeSong.GetSize())]; + else if (bestWeatherSong.GetSize()) + return bestWeatherSong[mapsoundsystem->GetRandomNumber(bestWeatherSong.GetSize())]; + else if (noReferenceSong.GetSize()) + return noReferenceSong[mapsoundsystem->GetRandomNumber(noReferenceSong.GetSize())]; + else if (!timeChange && !weatherChange && songList.GetSize())//All failed get a random song. Do we actually have a song? + return songList[mapsoundsystem->GetRandomNumber(songList.GetSize())]; + return NULL; } -void psSectorSoundManager::SetBGSong(psSoundObject* song) +void psSectorSoundManager::SearchAndSetBackgroundSong(bool timeChange, bool weatherChange, bool combatStatus) { + SetBGSong(SearchBackgroundSong(songs, timeChange, weatherChange), combatStatus); +} + +void psSectorSoundManager::StartBG() +{ + psSoundObject* song = mainBG; + if(mapsoundsystem->sndmngr->GetCombatMusicMode() && mainCombatBG) //we apply the combat music + song = mainCombatBG; + + if (!song) //the song isn't available ignore everything + return; + Debug2( LOG_SOUND, 0, "Song now playing is: %s", song->GetName().GetData() ); if (!mapsoundsystem->FindSameActiveSong( song )) { + if(currentBG) + currentBG->StartFade(FADE_DOWN); mapsoundsystem->RegisterActiveSong(song); - if(mapsoundsystem->sndmngr->LoopBGM()) - song->SetLooping(true); - else - song->SetLooping(false); + } + if(mapsoundsystem->sndmngr->LoopBGM()) + song->SetLooping(true); + else + song->SetLooping(false); - song->StartFade( FADE_UP ); - mainBG = song; - } + song->StartFade( FADE_UP ); + + currentBG = song; } void psSectorSoundManager::Enter( psSectorSoundManager* leaveFrom, int timeOfDay, int weather, csVector3& position ) { - csArray<psSoundObject*> bestTimeWeatherSong; - csArray<psSoundObject*> bestTimeSong; - csArray<psSoundObject*> bestWeatherSong; - csArray<psSoundObject*> noReferenceSong; this->weather = weather; - + this->timeOfDay = timeOfDay; + size_t z; if ( music ) { - for ( z = 0; z < songs.GetSize(); z++ ) - { - //search for time restrained songs - if (songs[z]->MatchTime(timeOfDay)) - { - //is this also weather matching? - if(songs[z]->MatchWeather(weather)) - bestTimeWeatherSong.Push(songs[z]); - else - bestTimeSong.Push(songs[z]); - } - //search for weather restrained songs - else if (songs[z]->MatchWeather(weather)) - bestWeatherSong.Push(songs[z]); - //search for no restrain songs - else if (songs[z]->HasNoTime() && songs[z]->HasNoWeather()) - noReferenceSong.Push(songs[z]); - } - - if (bestTimeWeatherSong.GetSize()) - SetBGSong(bestTimeWeatherSong[mapsoundsystem->GetRandomNumber(bestTimeWeatherSong.GetSize())]); - else if (bestTimeSong.GetSize()) - SetBGSong(bestTimeSong[mapsoundsystem->GetRandomNumber(bestTimeSong.GetSize())]); - else if (bestWeatherSong.GetSize()) - SetBGSong(bestWeatherSong[mapsoundsystem->GetRandomNumber(bestWeatherSong.GetSize())]); - else if (noReferenceSong.GetSize()) - SetBGSong(noReferenceSong[mapsoundsystem->GetRandomNumber(noReferenceSong.GetSize())]); - else if (songs.GetSize() > 0)//All failed get a random song. Do we actually have a song? - SetBGSong(songs[mapsoundsystem->GetRandomNumber(songs.GetSize())]); + SearchAndSetBackgroundSong(false, false, mapsoundsystem->sndmngr->GetCombatMusicMode()); + SearchAndSetCombatSong(false, false, mapsoundsystem->sndmngr->GetCombatMusicMode()); + StartBG(); } if ( sounds ) @@ -1808,6 +1931,12 @@ if ( songs[z]->Same( bgSound ) ) return false; } + + for ( size_t z = 0; z < combatSongs.GetSize(); z++ ) + { + if ( combatSongs[z]->Same( bgSound ) ) + return false; + } return true; } @@ -1912,7 +2041,7 @@ { if ( !stream.Start(mapSystem->sndmngr->soundSystem,loop,loopStart,loopEnd) ) return; - + stream.UnPause(); if (threeDee) { soundSource3D = stream.GetSource3D(); @@ -1988,8 +2117,7 @@ if ( isPlaying && range > rangeToStart ) { - stream.SetVolume(0.0f); - isPlaying = false; + Stop(); } else if ( !isPlaying && range < rangeToStart ) { @@ -2013,8 +2141,7 @@ Debug1( LOG_SOUND, 0, "Fading complete" ); if (isPlaying) { - isPlaying = false; - stream.SetVolume(0.0f); + Stop(); } return; } @@ -2027,6 +2154,7 @@ isPlaying = true; stream.Start(mapSystem->sndmngr->soundSystem,loop,loopStart,loopEnd); stream.SetVolume(currentVolume); + stream.UnPause(); } return; } @@ -2052,6 +2180,7 @@ isPlaying = true; Debug2( LOG_SOUND, 0, "Sound Playing at: %f vol", currentVolume ); stream.SetVolume( currentVolume*ambientVolume ); + stream.UnPause(); } else { @@ -2130,12 +2259,12 @@ if ( currentVolume <= minVol && fadeDir == FADE_DOWN ) { - isPlaying = false; - stream.SetVolume(0.0f); + Stop(); } else { stream.SetVolume(currentVolume * ambientVolume); + stream.UnPause(); } } Modified: trunk/src/client/sound/pssoundmngr.h =================================================================== --- trunk/src/client/sound/pssoundmngr.h 2010-01-06 19:47:10 UTC (rev 5164) +++ trunk/src/client/sound/pssoundmngr.h 2010-01-07 22:55:22 UTC (rev 5165) @@ -156,8 +156,15 @@ /** Update the sound system with the new time of day */ virtual void ChangeTimeOfDay( int newTime ); - /** Change the mode if the player is fighting */ - virtual void ChangeMusicMode(bool combat) {musicCombat = combat;} + /** Change the mode if the player is fighting + * @param combat TRUE if we have to set combat music, otherwise FALSE + */ + virtual void SetCombatMusicMode(bool combat); + + /** Get the mode if the player is fighting + * @return TRUE if we have combat music, otherwise FALSE + */ + virtual bool GetCombatMusicMode() { return musicCombat; } /**Return name of the background music that is overriding */ virtual const char* GetSongName() {return overSongName;} @@ -364,7 +371,9 @@ bool IsValid() { return soundSource.IsValid(); } size_t GetPlayPos() { return soundStream->GetPosition(); } - size_t SetPlayPos(size_t position) { soundStream->SetPosition(position); } + void SetPlayPos(size_t position) { soundStream->SetPosition(position); } + void Pause() { soundStream->Pause(); } + void UnPause() { soundStream->Unpause(); } }; //----------------------------------------------------------------------------- @@ -429,7 +438,7 @@ */ void Start3DSound( csVector3 &position ); void StartSound(); - void Stop() { stream.SetVolume(0.0f); isPlaying = false; } + void Stop() { stream.SetVolume(0.0f); isPlaying = false; stream.Pause(); } /** Checks if this object doesn't have a special time defined. * This is used to determine if the object doesn't have a special @@ -498,8 +507,9 @@ /** Set the value of loop **/ void SetLooping(bool looping) {loop = looping;} + size_t GetLoopStartPos() { return loopStart; } size_t GetPlayPos() { return stream.GetPlayPos(); } - size_t SetPlayPos(size_t position) { stream.SetPlayPos(position); } + void SetPlayPos(size_t position) { stream.SetPlayPos(position); } protected: @@ -557,6 +567,11 @@ bool HasSounds(){return sounds;} void NewBackground( psSoundObject* song ); + + /** Adds a combat background song to this sector. + * @param song The song to add to this sector. + */ + void NewCombatBackground( psSoundObject* song ); void NewAmbient( psSoundObject* sound ); void New3DSound( psSoundObject* sound ); void New3DMeshSound( psSoundObject* sound ); @@ -568,12 +583,26 @@ * @param newTime The new time of day. */ void ChangeTime( int newTime ); + + void ChangeCombatStatus(bool combatStatus); /** Sets a new Background Song. * * @param song: the song to set as background song for this sector */ - void SetBGSong(psSoundObject* song); + void SetBGSong(psSoundObject* song, bool exitingFromCombat = false); + + + void SetCombatBGSong(psSoundObject* song, bool combatTransition); + + void StartBG(); + + void SearchAndSetCombatSong(bool timeChange, bool weatherChange, bool combatStatus); + + void SearchAndSetBackgroundSong(bool timeChange, bool weatherChange, bool combatStatus); + + psSoundObject* SearchBackgroundSong(csPDelArray<psSoundObject> &songList, bool timeChange, bool weatherChange); + void Enter( psSectorSoundManager* enterFrom, int timeOfDay, int weather, csVector3& position ); void StartBackground(); @@ -607,13 +636,16 @@ csString sector; psMapSoundSystem *mapsoundsystem; - csPDelArray<psSoundObject> songs; - csPDelArray<psSoundObject> ambient; - csPDelArray<psSoundObject> emitters; + csPDelArray<psSoundObject> songs; ///< stores all the background songs of this sector + csPDelArray<psSoundObject> combatSongs; ///< stores all the combat songs of this sector + csPDelArray<psSoundObject> ambient; ///< stores all the ambient sounds/music of this sector + csPDelArray<psSoundObject> emitters; ///< Stores all the emitters of this sector csArray<psSoundObject*> weatherNotify; ///< Objects to call when we get weather event psSoundObject* mainBG; + psSoundObject* mainCombatBG; + psSoundObject* currentBG; // These are 3d sound emitters that are attached to a mesh but have not yet // had their positions set. When the map is loaded it will get their positions @@ -622,6 +654,7 @@ csArray<ps3DFactorySound*> unAssignedEmitterFactories; int weather; + int timeOfDay; bool music; bool sounds; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-01-10 00:09:17
|
Revision: 5191 http://planeshift.svn.sourceforge.net/planeshift/?rev=5191&view=rev Author: KhakiLord Date: 2010-01-10 00:09:10 +0000 (Sun, 10 Jan 2010) Log Message: ----------- Pulled BreakPadWrapper code into new file. Modified Paths: -------------- trunk/src/client/psengine.cpp trunk/src/client/psengine.h Added Paths: ----------- trunk/src/client/crashreport.cpp Added: trunk/src/client/crashreport.cpp =================================================================== --- trunk/src/client/crashreport.cpp (rev 0) +++ trunk/src/client/crashreport.cpp 2010-01-10 00:09:10 UTC (rev 5191) @@ -0,0 +1,158 @@ +/* + * crashreport.cpp by Andrew Dai + * + * Copyright (C) 2010 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. + * + */ +// Code for wrapping around Google Breakpad. + +#ifdef WIN32 +#include "client/windows/handler/exception_handler.h" +#include "client/windows/sender/crash_report_sender.h" +#elif defined(CS_PLATFORM_MACOSX) +// TODO +#else +// TODO +#endif + +#include <map> +#include <string> +#include <psconfig.h> +#include "globals.h" +#include "psengine.h" +#include "pscelclient.h" + +const wchar_t* crash_post_url = L"http://planeshift.ezpcusa.com/crash_reporting/upload.py"; + +// Only support breakpad for win32 for now. +#ifdef WIN32 +#define USE_BREAKPAD +#endif + +#ifdef USE_BREAKPAD +bool UploadDump(const wchar_t* dump_path, + const wchar_t* minidump_id, + void* context, + EXCEPTION_POINTERS* exinfo, + MDRawAssertionInfo* assertion, + bool succeeded); + +// Initialise the crash dumper. +class BreakPadWrapper +{ +public: + BreakPadWrapper() { + wchar_t* tempPath; +#ifdef WIN32 + int pathLen = GetTempPathW(0, NULL); + tempPath = new wchar_t[pathLen]; + GetTempPathW(pathLen, tempPath); +#else + tempPath = "/tmp/"; +#endif + + crash_handler = new google_breakpad::ExceptionHandler(tempPath, + NULL, + UploadDump, + NULL, +#ifdef WIN32 + google_breakpad::ExceptionHandler::HANDLER_ALL +#else + true +#endif + ); + crash_sender = new google_breakpad::CrashReportSender(L""); + } + +#ifdef WIN32 + static google_breakpad::CrashReportSender* crash_sender; +#endif +private: + static google_breakpad::ExceptionHandler* crash_handler; + +}; + +google_breakpad::ExceptionHandler* BreakPadWrapper::crash_handler = NULL; +google_breakpad::CrashReportSender* BreakPadWrapper::crash_sender = NULL; + +bool UploadDump(const wchar_t* dump_path, + const wchar_t* minidump_id, + void* context, + EXCEPTION_POINTERS* exinfo, + MDRawAssertionInfo* assertion, + bool succeeded) +{ +#ifdef WIN32 + char crashMsg[512]; + sprintf(crashMsg, "Something unexpected happened in PlaneShift!\nA crash report containing only information strictly necessary to resolve this crash in the future will automatically be sent to the developers."); + ::MessageBoxA( NULL, crashMsg, "PlaneShift", MB_OK + MB_ICONERROR ); +#endif + std::map<std::wstring, std::wstring> parameters; + // Add the date of compiled file to check version + struct __stat64 buf; + int result; + wchar_t paramBuffer[512]; + +#ifdef WIN32 + /* Get data associated with "psclient.exe": */ + result = _stat64( "psclient.exe", &buf ); + if(result == 0) + { + wchar_t* time = _wctime64(&buf.st_mtime); + parameters[L"exe_time"] = time; + } +#endif + + if( + psengine && + psengine->GetCelClient() && + psengine->GetCelClient()->GetMainPlayer() && + psengine->GetCelClient()->GetMainPlayer()->GetName() + ) + { + mbstowcs(paramBuffer, psengine->GetCelClient()->GetMainPlayer()->GetName(), 511); + parameters[L"player_name"] = paramBuffer; + } + mbstowcs(paramBuffer, CS_PLATFORM_NAME, 511); + parameters[L"platform"] = paramBuffer; + mbstowcs(paramBuffer, CS_PROCESSOR_NAME, 511); + parameters[L"processor"] = paramBuffer; + mbstowcs(paramBuffer, CS_COMPILER_NAME, 511); + parameters[L"compiler"] = paramBuffer; + mbstowcs(paramBuffer, hwRenderer, 511); + parameters[L"renderer"] = paramBuffer; + mbstowcs(paramBuffer, hwVersion, 511); + parameters[L"hw_version"] = paramBuffer; + + std::wstring report_code; + printf("Attempting to upload crash report."); +#ifdef WIN32 + BreakPadWrapper::crash_sender->SendCrashReport(crash_post_url, + parameters, + dump_path, + &report_code); +#endif + if(report_code.empty()) + { + printf("Upload successful."); + return succeeded; + } + else + return false; +} + +// At global scope to ensure we hook in as early as possible. +BreakPadWrapper wrapper; +#endif // USE_BREAKPAD Property changes on: trunk/src/client/crashreport.cpp ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2010-01-09 17:43:08 UTC (rev 5190) +++ trunk/src/client/psengine.cpp 2010-01-10 00:09:10 UTC (rev 5191) @@ -17,14 +17,6 @@ * */ #include <psconfig.h> -#ifdef WIN32 -#include "client/windows/handler/exception_handler.h" -#include "client/windows/sender/crash_report_sender.h" -#elif defined(CS_PLATFORM_MACOSX) -// TODO -#else -// TODO -#endif ////////////////////////////////////////////////////////////////////////////// // OS Specific Defines @@ -60,8 +52,6 @@ ////////////////////////////////////////////////////////////////////////////// #include "psengine.h" -#include <map> -#include <string> // CS files #include <imap/services.h> @@ -205,126 +195,6 @@ csString hwRenderer; csString hwVersion; - -const wchar_t* crash_post_url = L"http://planeshift.ezpcusa.com/crash_reporting/upload.py"; - -// Only support breakpad for win32 for now. -#ifdef WIN32 -#define USE_BREAKPAD -#endif - -#ifdef USE_BREAKPAD -bool UploadDump(const wchar_t* dump_path, - const wchar_t* minidump_id, - void* context, - EXCEPTION_POINTERS* exinfo, - MDRawAssertionInfo* assertion, - bool succeeded); - -// Initialise the crash dumper. -class BreakPadWrapper -{ -public: - BreakPadWrapper() { - wchar_t* tempPath; -#ifdef WIN32 - int pathLen = GetTempPathW(0, NULL); - tempPath = new wchar_t[pathLen]; - GetTempPathW(pathLen, tempPath); -#else - tempPath = "/tmp/"; -#endif - - crash_handler = new google_breakpad::ExceptionHandler(tempPath, - NULL, - UploadDump, - NULL, -#ifdef WIN32 - google_breakpad::ExceptionHandler::HANDLER_ALL -#else - true -#endif - ); - crash_sender = new google_breakpad::CrashReportSender(L""); - } - -#ifdef WIN32 - static google_breakpad::CrashReportSender* crash_sender; -#endif -private: - static google_breakpad::ExceptionHandler* crash_handler; - -}; - -bool UploadDump(const wchar_t* dump_path, - const wchar_t* minidump_id, - void* context, - EXCEPTION_POINTERS* exinfo, - MDRawAssertionInfo* assertion, - bool succeeded) -{ -#ifdef WIN32 - char crashMsg[512]; - sprintf(crashMsg, "Something unexpected happened in PlaneShift!\nA crash report containing only information strictly necessary to resolve this crash in the future will automatically be sent to the developers."); - ::MessageBox( NULL, crashMsg, "PlaneShift", MB_OK + MB_ICONERROR ); -#endif - std::map<std::wstring, std::wstring> parameters; - // Add the date of compiled file to check version - struct __stat64 buf; - int result; - wchar_t paramBuffer[512]; - -#ifdef WIN32 - /* Get data associated with "psclient.exe": */ - result = _stat64( "psclient.exe", &buf ); - if(result == 0) - { - wchar_t* time = _wctime64(&buf.st_mtime); - parameters[L"exe_time"] = time; - } -#endif - - if( - psengine && - psengine->GetCelClient() && - psengine->GetCelClient()->GetMainPlayer() && - psengine->GetCelClient()->GetMainPlayer()->GetName() - ) - { - mbstowcs(paramBuffer, psengine->GetCelClient()->GetMainPlayer()->GetName(), 511); - parameters[L"player_name"] = paramBuffer; - } - mbstowcs(paramBuffer, CS_PLATFORM_NAME, 511); - parameters[L"platform"] = paramBuffer; - mbstowcs(paramBuffer, CS_PROCESSOR_NAME, 511); - parameters[L"processor"] = paramBuffer; - mbstowcs(paramBuffer, CS_COMPILER_NAME, 511); - parameters[L"compiler"] = paramBuffer; - mbstowcs(paramBuffer, hwRenderer, 511); - parameters[L"renderer"] = paramBuffer; - mbstowcs(paramBuffer, hwVersion, 511); - parameters[L"hw_version"] = paramBuffer; - - std::wstring report_code; - printf("Attempting to upload crash report."); -#ifdef WIN32 - BreakPadWrapper::crash_sender->SendCrashReport(crash_post_url, - parameters, - dump_path, - &report_code); -#endif - if(report_code.empty()) - { - printf("Upload successful."); - return succeeded; - } - else - return false; -} - -BreakPadWrapper wrapper; -#endif // USE_BREAKPAD - // ---------------------------------------------------------------------------- CS_IMPLEMENT_APPLICATION Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2010-01-09 17:43:08 UTC (rev 5190) +++ trunk/src/client/psengine.h 2010-01-10 00:09:10 UTC (rev 5191) @@ -77,6 +77,9 @@ class GUIHandler; +extern csString hwRenderer; +extern csString hwVersion; + struct DelayedLoader : public CS::Utility::WeakReferenced { virtual bool CheckLoadStatus() = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-01-11 19:57:36
|
Revision: 5235 http://planeshift.svn.sourceforge.net/planeshift/?rev=5235&view=rev Author: Khakilord Date: 2010-01-11 19:57:25 +0000 (Mon, 11 Jan 2010) Log Message: ----------- Added BreakPad support to Mac client. Modified Paths: -------------- trunk/src/client/psengine.cpp Added Paths: ----------- trunk/src/client/macosx/ trunk/src/client/macosx/Jamfile trunk/src/client/macosx/maccrashreport.h trunk/src/client/macosx/maccrashreport.mm Added: trunk/src/client/macosx/Jamfile =================================================================== --- trunk/src/client/macosx/Jamfile (rev 0) +++ trunk/src/client/macosx/Jamfile 2010-01-11 19:57:25 UTC (rev 5235) @@ -0,0 +1,9 @@ +SubDir TOP src client macosx ; + +Library crashreport + : [ Wildcard *.mm *.cpp *.h ] + : noinstall +; + +ExternalLibs crashreport : BREAKPAD CRYSTAL ; + Property changes on: trunk/src/client/macosx/Jamfile ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/src/client/macosx/maccrashreport.h =================================================================== --- trunk/src/client/macosx/maccrashreport.h (rev 0) +++ trunk/src/client/macosx/maccrashreport.h 2010-01-11 19:57:25 UTC (rev 5235) @@ -0,0 +1,27 @@ +/* + * maccrashreport.h by Andrew Dai + * + * Copyright (C) 2010 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. + * + */ +// Code for wrapping around Google Breakpad. + +class MacCrashReport +{ +public: + // Fill in server parameters with graphics card info to help with analysing crashes. + MacCrashReport(const char* hwRenderer, const char* hwVersion); + ~MacCrashReport(); +}; Property changes on: trunk/src/client/macosx/maccrashreport.h ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/src/client/macosx/maccrashreport.mm =================================================================== --- trunk/src/client/macosx/maccrashreport.mm (rev 0) +++ trunk/src/client/macosx/maccrashreport.mm 2010-01-11 19:57:25 UTC (rev 5235) @@ -0,0 +1,69 @@ +/* + * maccrashreport.mm by Andrew Dai + * + * Copyright (C) 2010 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. + * + */ +// Mac specific (Objective-C++) code for wrapping around Google Breakpad. + +// Only enabled in release builds + +#ifndef CS_DEBUG + +#import <client/mac/Framework/Breakpad.h> +#include "maccrashreport.h" +#include "csconfig.h" + +BreakpadRef breakpad; + +static BreakpadRef InitBreakpad(const char* hwRenderer, const char* hwVersion) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + breakpad = 0; + NSDictionary *plist = [[NSBundle mainBundle] infoDictionary]; + NSMutableDictionary *mutableDict = [[plist mutableCopy] autorelease]; + NSDictionary *extraDict = [NSDictionary dictionaryWithObjectsAndKeys: + [NSString stringWithCString:hwRenderer], + @"renderer", + [NSString stringWithCString:hwVersion], + @"hw_version", + [NSString stringWithCString:CS_COMPILER_NAME], + @"compiler", + [NSString stringWithCString:CS_PROCESSOR_NAME], + @"processor", + [NSString stringWithCString:CS_PLATFORM_NAME], + @"platform", + nil]; + [mutableDict setObject: extraDict forKey: @"BreakpadServerParameters"]; + if (plist) { + breakpad = BreakpadCreate(mutableDict); + } + [pool release]; + return breakpad; +} + +static void EndBreakpad(void) { + BreakpadRelease(breakpad); +} + +MacCrashReport::MacCrashReport(const char* hwRenderer, const char* hwVersion) +{ + InitBreakpad(hwRenderer, hwVersion); +} + +MacCrashReport::~MacCrashReport() +{ + EndBreakpad(); +} +#endif // CS_DEBUG Property changes on: trunk/src/client/macosx/maccrashreport.mm ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2010-01-11 15:24:21 UTC (rev 5234) +++ trunk/src/client/psengine.cpp 2010-01-11 19:57:25 UTC (rev 5235) @@ -195,6 +195,14 @@ csString hwRenderer; csString hwVersion; +#if !defined(CS_DEBUG) && defined(CS_PLATFORM_MACOSX) +// Set up the mac crash reporter in release builds. This needs to be done here +// since the mac reporter is in a different library. +#include "macosx/maccrashreport.h" + +MacCrashReport* macReporter = NULL; +#endif + // ---------------------------------------------------------------------------- CS_IMPLEMENT_APPLICATION @@ -250,6 +258,8 @@ chatBubbles = 0; options = 0; + delete macReporter; + macReporter = NULL; } // ---------------------------------------------------------------------------- @@ -338,6 +348,10 @@ hwRenderer = g2d->GetHWRenderer(); hwVersion = g2d->GetHWGLVersion(); +#if !defined(CS_DEBUG) && defined(CS_PLATFORM_MACOSX) + // Set up the mac crash reporter now we know the graphics information. + macReporter = new MacCrashReport(hwRenderer, hwVersion); +#endif // Initialize and tweak the Texture Manager txtmgr = g3d->GetTextureManager (); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-01-12 22:38:16
|
Revision: 5259 http://planeshift.svn.sourceforge.net/planeshift/?rev=5259&view=rev Author: Khakilord Date: 2010-01-12 22:38:10 +0000 (Tue, 12 Jan 2010) Log Message: ----------- Added extra info to crash reports. Improved reliability of crash reporting on Windows/Linux. Modified Paths: -------------- trunk/src/client/crashreport.cpp trunk/src/client/macosx/maccrashreport.mm trunk/src/client/pscelclient.cpp trunk/src/client/psengine.cpp trunk/src/client/psengine.h Modified: trunk/src/client/crashreport.cpp =================================================================== --- trunk/src/client/crashreport.cpp 2010-01-12 22:15:21 UTC (rev 5258) +++ trunk/src/client/crashreport.cpp 2010-01-12 22:38:10 UTC (rev 5259) @@ -38,7 +38,6 @@ #include <string> #include "globals.h" #include "psengine.h" -#include "pscelclient.h" #ifdef WIN32 typedef wchar_t PS_CHAR; @@ -99,52 +98,55 @@ http_layer = new LibcurlWrapper(); #endif // Set up parameters - /* Get data associated with "psclient.exe": */ + + PS_CHAR paramBuffer[512]; + #ifdef WIN32 - result = _stat64( "psclient.exe", &buf ); + mbstowcs(paramBuffer, __DATE__ " " __TIME__, 511); + parameters[L"BuildDate"] = paramBuffer; #else - result = stat64( "psclient", &buf ); + parameters["BuildDate"] = __DATE__ " " __TIME__; #endif - if(result == 0) - { - PS_CHAR* time; -#ifdef WIN32 - time = _wctime64(&buf.st_mtime); - parameters[L"exe_time"] = time; -#else - time = ctime64(&buf.st_mtime); - parameters["exe_time"] = time; -#endif - } + + // Set process starttime parameter + time_t start_time = time(NULL); // Reserve space for player name, gfx card info etc because we can't use the heap // when handling the crash. #ifdef WIN32 - parameters[L"player_name"] = ""; - parameters[L"player_name"].reserve(256); + parameters[L"PlayerName"] = L""; + parameters[L"PlayerName"].reserve(256); mbstowcs(paramBuffer, CS_PLATFORM_NAME, 511); - parameters[L"platform"] = paramBuffer; + parameters[L"Platform"] = paramBuffer; mbstowcs(paramBuffer, CS_PROCESSOR_NAME, 511); - parameters[L"processor"] = paramBuffer; + parameters[L"Processor"] = paramBuffer; mbstowcs(paramBuffer, CS_COMPILER_NAME, 511); - parameters[L"compiler"] = paramBuffer; - parameters[L"renderer"] = ""; - parameters[L"renderer"].reserve(256); - parameters[L"hw_version"] = ""; - parameters[L"hw_version"].reserve(256); + parameters[L"Compiler"] = paramBuffer; + parameters[L"Renderer"] = L""; + parameters[L"Renderer"].reserve(256); + parameters[L"RendererVersion"] = L""; + parameters[L"RendererVersion"].reserve(256); + parameters[L"CrashTime"] = L""; + parameters[L"CrashTime"].reserve(32); + swprintf(paramBuffer, "%I64u", start_time); + parameters[L"StartupTime"] = paramBuffer; parameters[L"ProductName"] = L"PlaneShift"; - parameters[L"Version"] = L"0.5"; + parameters[L"Version"] = L"0.5.00"; #else - parameters["player_name"] = ""; - parameters["player_name"].reserve(256); - parameters["platform"] = CS_PLATFORM_NAME; - parameters["processor"] = CS_PROCESSOR_NAME; - parameters["compiler"] = CS_COMPILER_NAME; - parameters["renderer"] = ""; - parameters["renderer"].reserve(256); - parameters["hw_version"] = ""; - parameters["hw_version"].reserve(256); + parameters["PlayerName"] = ""; + parameters["PlayerName"].reserve(256); + parameters["Platform"] = CS_PLATFORM_NAME; + parameters["Processor"] = CS_PROCESSOR_NAME; + parameters["Compiler"] = CS_COMPILER_NAME; + parameters["Renderer"] = ""; + parameters["Renderer"].reserve(256); + parameters["RendererVersion"] = ""; + parameters["RendererVersion"].reserve(256); + parameters["CrashTime"] = ""; + parameters["CrashTime"].reserve(32); + sprintf(paramBuffer, "%lu", start_time) + parameters["StartupTime"] = paramBuffer; parameters["ProductName"] = "PlaneShift"; - parameters["Version"] = "0.5"; + parameters["Version"] = "0.5.00"; #endif report_code.reserve(512); @@ -161,6 +163,7 @@ #else static LibcurlWrapper* http_layer; #endif + #ifdef WIN32 std::map<std::wstring, std::wstring> parameters; std::wstring report_code; @@ -195,6 +198,7 @@ bool succeeded) #endif { + time_t crash_time = time(NULL); PS_CHAR path_file[PS_PATH_MAX]; PS_CHAR* p_path_end = path_file + PS_PATH_MAX; PS_CHAR* p_path = path_file; @@ -207,43 +211,33 @@ p_path += PS_STRLEN(minidump_id); PS_STRNCAT(path_file, DUMP_EXTENSION, p_path_end - p_path); - #ifdef WIN32 char crashMsg[512]; - sprintf(crashMsg, "Something unexpected happened in PlaneShift!\nA crash report containing only information strictly necessary to resolve this crash in the future will automatically be sent to the developers."); - ::MessageBoxA( NULL, crashMsg, "PlaneShift", MB_OK + MB_ICONERROR ); + sprintf(crashMsg, "A report containing only information strictly necessary to identify this problem can be sent to the PlaneShift developers.\nFor concerns about privacy, please see http://watson.microsoft.com/dw/1033/dcp.asp. Please consult the PlaneShift forums for more details.\nClick Yes if you would like to help to identify this problem."); + if(::MessageBoxA( NULL, crashMsg, "PlaneShift has quit unexpectedly!", MB_YESNO + MB_ICONERROR ) == IDNO) + return false; #endif - // Add the date of compiled file to check version - struct __stat64 buf; - int result; PS_CHAR paramBuffer[512]; - if( - psengine && - psengine->GetCelClient() && - psengine->GetCelClient()->GetMainPlayer() && - psengine->GetCelClient()->GetMainPlayer()->GetName() - ) - { + #ifdef WIN32 - mbstowcs(paramBuffer, psengine->GetCelClient()->GetMainPlayer()->GetName(), 511); - wrapper.parameters[L"player_name"] = paramBuffer; -#else - wrapper.parameters["player_name"] = paramBuffer; -#endif - } -#ifdef WIN32 mbstowcs(paramBuffer, hwRenderer, 511); - wrapper.parameters[L"renderer"] = paramBuffer; + wrapper.parameters[L"Renderer"] = paramBuffer; mbstowcs(paramBuffer, hwVersion, 511); - wrapper.parameters[L"hw_version"] = paramBuffer; + wrapper.parameters[L"RendererVersion"] = paramBuffer; + swprintf(paramBuffer, "%I64u", crash_time); + wrapper.parameters[L"CrashTime"] = paramBuffer; + mbstowcs(paramBuffer, psEngine::playerName, 511); + wrapper.parameters[L"PlayerName"] = paramBuffer; #else - wrapper.parameters["renderer"] = hwRenderer; - wrapper.parameters["hw_version"] = hwVersion; + wrapper.parameters["Renderer"] = hwRenderer; + wrapper.parameters["RendererVersion"] = hwVersion; + sprintf(paramBuffer, "%lu", crash_time); + wrapper.parameters["CrashTime"] = paramBuffer; + wrapper.parameters["PlayerName"] = psEngine::playerName; #endif - printf("Attempting to upload crash report.\n"); ReportResult reportResult = RESULT_FAILED; Modified: trunk/src/client/macosx/maccrashreport.mm =================================================================== --- trunk/src/client/macosx/maccrashreport.mm 2010-01-12 22:15:21 UTC (rev 5258) +++ trunk/src/client/macosx/maccrashreport.mm 2010-01-12 22:38:10 UTC (rev 5259) @@ -35,15 +35,17 @@ NSMutableDictionary *mutableDict = [[plist mutableCopy] autorelease]; NSDictionary *extraDict = [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithCString:hwRenderer], - @"renderer", + @"Renderer", [NSString stringWithCString:hwVersion], - @"hw_version", + @"RendererVersion", [NSString stringWithCString:CS_COMPILER_NAME], - @"compiler", + @"Compiler", [NSString stringWithCString:CS_PROCESSOR_NAME], - @"processor", + @"Processor", [NSString stringWithCString:CS_PLATFORM_NAME], - @"platform", + @"Platform", + [NSString __DATE__ " " __TIME__], + @"BuildDate", nil]; [mutableDict setObject: extraDict forKey: @"BreakpadServerParameters"]; if (plist) { Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2010-01-12 22:15:21 UTC (rev 5258) +++ trunk/src/client/pscelclient.cpp 2010-01-12 22:38:10 UTC (rev 5259) @@ -201,6 +201,8 @@ psengine->GetCharControl()->GetMovementManager()->SetActor(actor); psengine->GetPSCamera()->SetActor(actor); psengine->GetModeHandler()->SetEntity(actor); + // Used for debugging + psEngine::playerName = actor->GetName(); local_player = actor; } Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2010-01-12 22:15:21 UTC (rev 5258) +++ trunk/src/client/psengine.cpp 2010-01-12 22:38:10 UTC (rev 5259) @@ -192,8 +192,10 @@ #include "gui/pawsconfigshadows.h" #include "gui/pawsnpcdialog.h" -csString hwRenderer; -csString hwVersion; +// Needed for debugging +csString psEngine::hwRenderer; +csString psEngine::hwVersion; +csString psEngine::playerName; #if !defined(CS_DEBUG) && defined(CS_PLATFORM_MACOSX) // Set up the mac crash reporter in release builds. This needs to be done here Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2010-01-12 22:15:21 UTC (rev 5258) +++ trunk/src/client/psengine.h 2010-01-12 22:38:10 UTC (rev 5259) @@ -77,9 +77,6 @@ class GUIHandler; -extern csString hwRenderer; -extern csString hwVersion; - struct DelayedLoader : public CS::Utility::WeakReferenced { virtual bool CheckLoadStatus() = 0; @@ -348,6 +345,10 @@ void RegisterDelayedLoader(DelayedLoader* obj) { delayedLoaders.PushSmart(obj); } void UnregisterDelayedLoader(DelayedLoader* obj) { delayedLoaders.Delete(obj); } + + static csString hwRenderer; + static csString hwVersion; + static csString playerName; private: /// Load the log report settings from the config file. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-01-16 03:23:10
|
Revision: 5302 http://planeshift.svn.sourceforge.net/planeshift/?rev=5302&view=rev Author: KhakiLord Date: 2010-01-16 03:23:04 +0000 (Sat, 16 Jan 2010) Log Message: ----------- Added more flexible crash notification dialog for Windows to allow user to enter comments. Modified Paths: -------------- trunk/src/client/crashreport.cpp trunk/src/client/psengine.cpp trunk/src/client/psengine.h Added Paths: ----------- trunk/src/client/crashdialog.rc trunk/src/client/resource.h Added: trunk/src/client/crashdialog.rc =================================================================== --- trunk/src/client/crashdialog.rc (rev 0) +++ trunk/src/client/crashdialog.rc 2010-01-16 03:23:04 UTC (rev 5302) @@ -0,0 +1,16 @@ +#include "resource.h" +#include <windows.h> + +IDD_CRASH DIALOGEX 10,10,240,165 +CAPTION "PlaneShift has quit unexpectedly!" +FONT 8,"MS Sans Serif",0,0,0 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOPMOST +BEGIN + CONTROL "",IDC_COMMENTS,"Edit",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE|ES_WANTRETURN|ES_AUTOVSCROLL,6,81,234,60,WS_EX_CLIENTEDGE + CONTROL "Please help us fix the problem by describing what happened before the crash.",IDC_STC1,"Static",WS_CHILDWINDOW|WS_VISIBLE,6,60,231,17 + CONTROL "A report containing only information strictly necessary to identify this problem will be sent to the PlaneShift developers. Please consult the PlaneShift forums for more details.",IDC_STC2,"Static",WS_CHILDWINDOW|WS_VISIBLE,6,6,231,39 + CONTROL "For concerns about privacy, please see http://watson.microsoft.com/dw/1033/dcp.asp.",IDC_STC3,"Static",WS_CHILDWINDOW|WS_VISIBLE,6,35,225,20 + CONTROL "OK",IDOK,"Button",WS_CHILDWINDOW|WS_VISIBLE|WS_TABSTOP|BS_DEFPUSHBUTTON,96,150,48,12 +END + Property changes on: trunk/src/client/crashdialog.rc ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Modified: trunk/src/client/crashreport.cpp =================================================================== --- trunk/src/client/crashreport.cpp 2010-01-15 18:56:11 UTC (rev 5301) +++ trunk/src/client/crashreport.cpp 2010-01-16 03:23:04 UTC (rev 5302) @@ -27,6 +27,7 @@ #ifdef USE_BREAKPAD #ifdef WIN32 +#include "resource.h" #include "client/windows/handler/exception_handler.h" #include "client/windows/sender/crash_report_sender.h" #elif !defined(CS_PLATFORM_MACOSX) && defined(CS_PLATFORM_UNIX) // Mac uses a separate lib @@ -95,6 +96,8 @@ bool succeeded); #endif +char szComments[1500]; + // Initialise the crash dumper. class BreakPadWrapper { @@ -104,6 +107,7 @@ int pathLen = GetTempPathW(0, NULL); CS_ALLOC_STACK_ARRAY(PS_CHAR, tempPath, pathLen); GetTempPathW(pathLen, tempPath); + szComments[0] = '\0'; #else static const PS_CHAR tempPath[] = "/tmp/"; #endif @@ -143,7 +147,9 @@ parameters[STR("RendererVersion")].reserve(256); parameters[STR("CrashTime")] = STR(""); parameters[STR("CrashTime")].reserve(32); - PS_CHAR timeBuffer[512]; + parameters[STR("Comments")] = STR(""); + parameters[STR("Comments")].reserve(1500); + PS_CHAR timeBuffer[128]; #ifdef WIN32 swprintf(timeBuffer, L"%I64u", start_time); #else @@ -190,6 +196,28 @@ // At global scope to ensure we hook in as early as possible. BreakPadWrapper wrapper; +#ifdef WIN32 +BOOL CALLBACK CrashReportProc(HWND hwndDlg, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) + { + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + GetDlgItemTextA(hwndDlg, IDC_COMMENTS, szComments, 1500); + + EndDialog(hwndDlg, wParam); + return TRUE; + } + } + return FALSE; +} +#endif + // This function should not modify the heap! #ifdef WIN32 bool UploadDump(const PS_CHAR* dump_path, @@ -207,6 +235,7 @@ { time_t crash_time = time(NULL); PS_CHAR path_file[PS_PATH_MAX + 1]; + path_file[0] = '\0'; PS_CHAR* p_path_end = path_file + PS_PATH_MAX; PS_CHAR* p_path = path_file; @@ -219,16 +248,22 @@ PS_STRNCAT(path_file, DUMP_EXTENSION, p_path_end - p_path); #ifdef WIN32 - char crashMsg[512]; - sprintf(crashMsg, "A report containing only information strictly necessary to identify this problem will be sent to the PlaneShift developers.\nFor concerns about privacy, please see http://watson.microsoft.com/dw/1033/dcp.asp. Please consult the PlaneShift forums for more details."); - ::MessageBoxA( NULL, crashMsg, "PlaneShift has quit unexpectedly!", MB_OK + MB_ICONERROR ); + + INT_PTR dialogResult = DialogBox(GetModuleHandle(0), + MAKEINTRESOURCE(IDD_CRASH), + psEngine::hwnd, + (DLGPROC)CrashReportProc); + if(dialogResult == 0 || dialogResult == -1) + ::MessageBoxA( NULL, "A report containing only information strictly necessary to identify this problem will be sent to the PlaneShift developers.\nFor concerns about privacy, please see http://watson.microsoft.com/dw/1033/dcp.asp. Please consult the PlaneShift forums for more details.", "PlaneShift has quit unexpectedly!", MB_OK + MB_ICONERROR ); #endif SetParameter (wrapper.parameters[STR("Renderer")], psEngine::hwRenderer); SetParameter (wrapper.parameters[STR("RendererVersion")], psEngine::hwVersion); SetParameter (wrapper.parameters[STR("PlayerName")], psEngine::playerName); - PS_CHAR timeBuffer[512]; + SetParameter (wrapper.parameters[STR("Comments")], szComments); + printf("User Comments: %s\n",szComments); + PS_CHAR timeBuffer[128]; #ifdef WIN32 swprintf(timeBuffer, L"%I64u", crash_time); #else Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2010-01-15 18:56:11 UTC (rev 5301) +++ trunk/src/client/psengine.cpp 2010-01-16 03:23:04 UTC (rev 5302) @@ -197,6 +197,11 @@ csString psEngine::hwVersion = ""; csString psEngine::playerName = ""; +#ifdef WIN32 +#include "csutil/win32/win32.h" +HWND psEngine::hwnd = 0; +#endif + #if !defined(CS_DEBUG) && defined(CS_PLATFORM_MACOSX) // Set up the mac crash reporter in release builds. This needs to be done here // since the mac reporter is in a different library. @@ -352,6 +357,11 @@ // Grab graphics info now in case we crash hwRenderer = g2d->GetHWRenderer(); hwVersion = g2d->GetHWGLVersion(); +#ifdef WIN32 + csRef<iWin32Canvas> canvas = scfQueryInterface<iWin32Canvas> (g2d); + // This does not seem to give the correct window handle. + //hwnd = canvas->GetWindowHandle(); +#endif #if !defined(CS_DEBUG) && defined(CS_PLATFORM_MACOSX) // Set up the mac crash reporter now we know the graphics information. @@ -393,7 +403,6 @@ csString skinPath; skinPath += cfgmgr->GetStr("PlaneShift.GUI.Skin.Dir", "/planeshift/art/skins/"); skinPath += cfgmgr->GetStr("PlaneShift.GUI.Skin.Selected", "default.zip"); - // This could be a file or a dir csString slash(CS_PATH_SEPARATOR); if(vfs->Exists(skinPath + slash)) Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2010-01-15 18:56:11 UTC (rev 5301) +++ trunk/src/client/psengine.h 2010-01-16 03:23:04 UTC (rev 5302) @@ -349,6 +349,9 @@ static csString hwRenderer; static csString hwVersion; static csString playerName; +#ifdef WIN32 + static HWND hwnd; +#endif private: /// Load the log report settings from the config file. Added: trunk/src/client/resource.h =================================================================== --- trunk/src/client/resource.h (rev 0) +++ trunk/src/client/resource.h 2010-01-16 03:23:04 UTC (rev 5302) @@ -0,0 +1,5 @@ +#define IDD_CRASH 1000 +#define IDC_COMMENTS 1001 +#define IDC_STC1 1002 +#define IDC_STC2 1003 +#define IDC_STC3 1004 Property changes on: trunk/src/client/resource.h ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2010-01-20 23:03:48
|
Revision: 5359 http://planeshift.svn.sourceforge.net/planeshift/?rev=5359&view=rev Author: mgist Date: 2010-01-20 23:03:36 +0000 (Wed, 20 Jan 2010) Log Message: ----------- - Added a call to OnMapsLoaded() when zones have finished loading. - Fixed OnMapsLoaded() for the various changes to gem objects recently. - Changed entity moves so that sector change won't occur during map loading. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/zonehandler.cpp Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2010-01-20 23:00:16 UTC (rev 5358) +++ trunk/src/client/pscelclient.cpp 2010-01-20 23:03:36 UTC (rev 5359) @@ -884,21 +884,10 @@ while (posIter.HasCurrent()) { UnresolvedPos * pos = posIter.FetchCurrent(); - //Error3("Re-resolving %s at %s",pos->entity->GetName(), pos->sector.GetData()); iSector * sector = psengine->GetEngine()->GetSectors ()->FindByName (pos->sector); if (sector) { - //Error2("Successfuly resolved %s", pos->sector.GetData()); - if(pos->entity->GetMesh() && pos->entity->GetMesh()->GetMovable()) - { - // If we have a mesh, no need to re set the position. - iMovable* movable = pos->entity->GetMesh()->GetMovable(); - // Check if entity has moved to a different sector now, so no need to move back - if(IsUnresSector(movable->GetSectors()->Get(0))) - movable->SetSector(sector); - } - else - pos->entity->SetPosition(pos->pos, pos->rot, sector); + pos->entity->SetPosition(pos->pos, pos->rot, sector); GEMClientActor* actor = dynamic_cast<GEMClientActor*> (pos->entity); if(actor) @@ -912,6 +901,7 @@ else ++posIter; } + GEMClientActor* actor = GetMainPlayer(); if (actor) actor->Movement().SetOnGround(false); @@ -1214,13 +1204,23 @@ { } -void GEMClientObject::Move(const csVector3& pos,float rotangle, const char* room) +void GEMClientObject::Move(const csVector3& pos, float rotangle, const char* room) { - iSector* sector = psengine->GetEngine()->FindSector(room); - if (sector) - GEMClientObject::SetPosition(pos, rotangle, sector); - else - cel->HandleUnresolvedPos(this, pos, rotangle, room); + // If we're moving to a new sector, wait until we're finished loading. + // If we're moving to the same sector, continue. + if (!psengine->GetZoneHandler()->IsLoading() || + (GetSector() != NULL && strcmp(GetSector()->QueryObject()->GetName(), room) == 0)) + { + iSector* sector = psengine->GetEngine()->FindSector(room); + if (sector) + { + GEMClientObject::SetPosition(pos, rotangle, sector); + return; + } + } + + // Else wait until the sector is loaded. + cel->HandleUnresolvedPos(this, pos, rotangle, room); } void GEMClientObject::SubstituteRacialMeshFact() @@ -1361,7 +1361,7 @@ linmove.InitCD(mesg.top, mesg.bottom, mesg.offset, pcmesh); linmove.SetDeltaLimit(0.2f); - if (mesg.sector != NULL) + if (mesg.sector != NULL && !psengine->GetZoneHandler()->IsLoading()) 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); @@ -1612,20 +1612,29 @@ iSector *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)) + // If we're loading and this is a sector change, set unresolved. + // We don't want to move to a new sector which may be loading. + if (drmsg.sector != cur_sector && psengine->GetZoneHandler()->IsLoading()) { - // 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); + cel->HandleUnresolvedPos(this, drmsg.pos, drmsg.yrot, drmsg.sectorName); } 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); + // 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); + } + 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); + } + + DRcounter = drmsg.counter; + DRcounter_set = true; } - - DRcounter = drmsg.counter; - DRcounter_set = true; } else { Modified: trunk/src/client/zonehandler.cpp =================================================================== --- trunk/src/client/zonehandler.cpp 2010-01-20 23:00:16 UTC (rev 5358) +++ trunk/src/client/zonehandler.cpp 2010-01-20 23:03:36 UTC (rev 5359) @@ -266,21 +266,25 @@ if(psengine->HasLoadedMap()) loadWindow->Hide(); + loading = false; loadProgressBar->Completed(); psengine->SetLoadedMap(true); + // Move the actor to the new sector. MovePlayerTo(newPos, sectorToLoad); + // Move all entities which belong in these new sectors to them. + psengine->GetCelClient()->OnMapsLoaded(); + // Reset camera clip distance. psCamera* cam = psengine->GetPSCamera(); if(cam && !cam->GetDistanceCfg().adaptive) cam->UseFixedDistanceClipping(cam->GetFixedDistClip()); psengine->GetPSCamera()->ResetCameraPositioning(); + // Update the lighting. psengine->GetModeHandler()->FinishLightFade(); psengine->GetModeHandler()->DoneLoading(sectorToLoad); - - loading = false; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2010-02-02 21:29:27
|
Revision: 5439 http://planeshift.svn.sourceforge.net/planeshift/?rev=5439&view=rev Author: mgist Date: 2010-02-02 21:29:21 +0000 (Tue, 02 Feb 2010) Log Message: ----------- - Implemented material swapping on equipped items. Needs testing. Modified Paths: -------------- trunk/src/client/charapp.cpp trunk/src/client/charapp.h Modified: trunk/src/client/charapp.cpp =================================================================== --- trunk/src/client/charapp.cpp 2010-02-02 21:21:22 UTC (rev 5438) +++ trunk/src/client/charapp.cpp 2010-02-02 21:29:21 UTC (rev 5439) @@ -548,7 +548,10 @@ // If it's a new mesh attach that mesh. if ( mesh.Length() ) { - Attach(slotname, mesh); + if( texture.Length() && !subMesh.Length() ) + Attach(slotname, mesh, texture); + else + Attach(slotname, mesh); } // This is a subMesh on the model change so change the mesh for that part. @@ -767,7 +770,7 @@ } -bool psCharAppearance::Attach(const char* socketName, const char* meshFactName) +bool psCharAppearance::Attach(const char* socketName, const char* meshFactName, const char* materialName) { if (!socketName || !meshFactName || !state.IsValid()) { @@ -790,10 +793,22 @@ return false; } - if(!factory.IsValid()) + csRef<iMaterialWrapper> material; + if(materialName != NULL) { + psengine->GetLoader()->LoadMaterial(materialName, &failed); + if(failed) + { + Notify2(LOG_CHARACTER, "Material %s not found.", materialName); + return false; + } + } + + if(!factory.IsValid() || (materialName != NULL && !material.IsValid())) + { Attachment attach(true); attach.factName = meshFactName; + attach.materialName = materialName; attach.socket = socket; if(delayedAttach.IsEmpty()) { @@ -803,16 +818,21 @@ } else { - ProcessAttach(factory, meshFactName, socket); + ProcessAttach(factory, material, meshFactName, socket); } return true; } -void psCharAppearance::ProcessAttach(csRef<iMeshFactoryWrapper> factory, const char* meshFactName, csRef<iSpriteCal3DSocket> socket) +void psCharAppearance::ProcessAttach(iMeshFactoryWrapper* factory, iMaterialWrapper* material, const char* meshFactName, csRef<iSpriteCal3DSocket> socket) { csRef<iMeshWrapper> meshWrap = engine->CreateMeshWrapper( factory, meshFactName ); + if(material != NULL) + { + meshWrap->GetMeshObject()->SetMaterialWrapper(material); + } + ProcessAttach(meshWrap, socket); psengine->GetCelClient()->HandleItemEffect(factory->QueryObject()->GetName(), socket->GetMeshWrapper(), false, socket->GetName(), &effectids, &lightids); @@ -877,10 +897,23 @@ if(attach.factory) { csRef<iMeshFactoryWrapper> factory = psengine->GetLoader()->LoadFactory(attach.factName); + if(factory.IsValid()) { - ProcessAttach(factory, attach.factName, attach.socket); - delayedAttach.PopFront(); + if(!attach.materialName.IsEmpty()) + { + csRef<iMaterialWrapper> material = psengine->GetLoader()->LoadMaterial(attach.materialName); + if(material.IsValid()) + { + ProcessAttach(factory, material, attach.factName, attach.socket); + delayedAttach.PopFront(); + } + } + else + { + ProcessAttach(factory, NULL, attach.factName, attach.socket); + delayedAttach.PopFront(); + } } } else Modified: trunk/src/client/charapp.h =================================================================== --- trunk/src/client/charapp.h 2010-02-02 21:21:22 UTC (rev 5438) +++ trunk/src/client/charapp.h 2010-02-02 21:29:21 UTC (rev 5439) @@ -199,10 +199,11 @@ /** Attach an object into a socket on the model. * @param socketName The name of the cal3d socket on the model to place the item in. * @param meshFactName The name of the mesh factory of the item to place here. + * @param materialName The optional name of a material to apply to the attached object. * * @return true if item was successfully attached to the model. */ - bool Attach(const char* socketName, const char* meshFactName ); + bool Attach(const char* socketName, const char* meshFactName, const char* materialName = NULL); /** Remove an item from a socket on the model. * @param socketName The name of the socket to remove the item from. @@ -223,7 +224,7 @@ */ void DefaultMesh(const char* part); - void ProcessAttach(csRef<iMeshFactoryWrapper> factory, const char* meshFactName, csRef<iSpriteCal3DSocket> socket); + void ProcessAttach(iMeshFactoryWrapper* factory, iMaterialWrapper* material, 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); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-06 01:08:38
|
Revision: 5455 http://planeshift.svn.sourceforge.net/planeshift/?rev=5455&view=rev Author: Khakilord Date: 2010-02-06 00:20:23 +0000 (Sat, 06 Feb 2010) Log Message: ----------- Removed assertion for known bug when character has not finished loading. Modified Paths: -------------- trunk/src/client/Jamfile trunk/src/client/pscelclient.cpp Modified: trunk/src/client/Jamfile =================================================================== --- trunk/src/client/Jamfile 2010-02-06 00:18:40 UTC (rev 5454) +++ trunk/src/client/Jamfile 2010-02-06 00:20:23 UTC (rev 5455) @@ -2,12 +2,18 @@ SubInclude TOP src client sound ; SubInclude TOP src client gui ; +switch $(TARGET.OS) +{ +case MACOS_X : # MacOS/X + SubInclude TOP src client macosx ; +case * : # Posix, Unix, GNU/Linux, etc. +} + ApplicationIcon win32 : psclient : [ ConcatDirs $(TOP) support icons icon1.ico ] ; Application psclient : [ Wildcard *.cpp *.h ] ; ExternalLibs psclient : CRYSTAL CAL3D BREAKPAD ; CompileGroups psclient : client ; -LinkWith psclient : breakpad gui psnet psengine psrpgrules pssound psutil paws effects fparser ; -Win32Resource psclient : [ ConcatDirs $(SUBDIR) crashdialog.rc ] ; +LinkWith psclient : gui psnet psengine psrpgrules pssound psutil paws effects fparser crashreport ; if $(HAVE_STATIC_PLUGINS) = "yes" { @@ -18,8 +24,7 @@ CFlags psclient_static : [ FDefines CS_STATIC_LINKED ] $(CAL3D.CFLAGS) ; LFlags psclient_static : -lcrystalspace_staticplugins-$(CRYSTAL.VERSION) -lcal3d ; MsvcDefine psclient_static : CS_STATIC_LINKED ; -LinkWith psclient_static : planeshift_staticplugins breakpad gui psnet psengine psrpgrules pssound psutil paws effects fparser ; -Win32Resource psclient_static : [ ConcatDirs $(SUBDIR) crashdialog.rc ] ; +LinkWith psclient_static : planeshift_staticplugins gui psnet psengine psrpgrules pssound psutil paws effects fparser crashreport ; # # The plugins that we need Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2010-02-06 00:18:40 UTC (rev 5454) +++ trunk/src/client/pscelclient.cpp 2010-02-06 00:20:23 UTC (rev 5455) @@ -1823,7 +1823,7 @@ void GEMClientActor::SetMode(uint8_t mode, bool newactor) { - CS_ASSERT(cal3dstate); + // TODO: Hacky fix for now when model has not finished loaded. if(!cal3dstate) return; if ((serverMode == psModeMessage::OVERWEIGHT || serverMode == psModeMessage::DEFEATED) && serverMode != mode) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-09 01:20:10
|
Revision: 5487 http://planeshift.svn.sourceforge.net/planeshift/?rev=5487&view=rev Author: Khakilord Date: 2010-02-09 00:39:56 +0000 (Tue, 09 Feb 2010) Log Message: ----------- Added /fps command. Modified Paths: -------------- trunk/src/client/cmdutil.cpp trunk/src/client/psengine.cpp trunk/src/client/psengine.h Modified: trunk/src/client/cmdutil.cpp =================================================================== --- trunk/src/client/cmdutil.cpp 2010-02-08 23:07:01 UTC (rev 5486) +++ trunk/src/client/cmdutil.cpp 2010-02-09 00:39:56 UTC (rev 5487) @@ -67,6 +67,7 @@ cmdsource->Subscribe("/confirm",this); cmdsource->Subscribe("/ping",this); cmdsource->Subscribe("/screenshot",this); + cmdsource->Subscribe("/fps",this); cmdsource->Subscribe("/graphicbug",this); cmdsource->Subscribe("/repaintlabels",this); //cmdsource->Subscribe("/dumpmovements",this); @@ -80,6 +81,7 @@ cmdsource->Unsubscribe("/confirm",this); cmdsource->Unsubscribe("/ping",this); cmdsource->Unsubscribe("/screenshot",this); + cmdsource->Unsubscribe("/fps",this); cmdsource->Unsubscribe("/graphicbug",this); cmdsource->Unsubscribe("/repaintlabels",this); //cmdsource->Unsubscribe("/dumpmovements",this); @@ -161,6 +163,12 @@ cameraData = SaveCamera(); return cameraData.GetData(); } + else if(words[0] =="/fps") + { + static csString fpsStr; + fpsStr = psengine->getFPS(); + return fpsStr; + } else if(words[0] == "/repaintlabels") { if (words[1] == "force") Modified: trunk/src/client/psengine.cpp =================================================================== --- trunk/src/client/psengine.cpp 2010-02-08 23:07:01 UTC (rev 5486) +++ trunk/src/client/psengine.cpp 2010-02-09 00:39:56 UTC (rev 5487) @@ -269,6 +269,9 @@ chatBubbles = 0; options = 0; + countFPS = 0; + timeFPS = 0; + currFPS = 0; #if !defined(CS_DEBUG) && defined(CS_PLATFORM_MACOSX) delete macReporter; @@ -1078,6 +1081,14 @@ else sleeptime = frameLimit; + timeFPS += elapsedTime; + countFPS++; + if(timeFPS > 500) + { + currFPS = 1000.0 * countFPS / timeFPS; + timeFPS = 0; + countFPS = 0; + } // Here we sacrifice drawing AND loading time if(elapsedTime < sleeptime) Modified: trunk/src/client/psengine.h =================================================================== --- trunk/src/client/psengine.h 2010-02-08 23:07:01 UTC (rev 5486) +++ trunk/src/client/psengine.h 2010-02-09 00:39:56 UTC (rev 5487) @@ -231,6 +231,7 @@ // Functions to set and get frameLimit converted into a value of FPS for users void setLimitFPS(int); int getLimitFPS() { return maxFPS; } + float getFPS() { return currFPS; } /// Sets the duel confirmation type void SetDuelConfirm(int confirmType); @@ -461,10 +462,12 @@ csTicks frameLimit; /// Maximum number of frames per second to draw. - // Maximum settable value in client/gui/pawsconfigdetails.cpp is 200, so - // it's more than enough to use an unsigned char to store this value - unsigned char maxFPS; + int maxFPS; + float currFPS; + unsigned int countFPS; + unsigned int timeFPS; + /// Whether sounds should be muted when the application loses focus. bool muteSoundsOnFocusLoss; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-02-18 15:13:37
|
Revision: 5575 http://planeshift.svn.sourceforge.net/planeshift/?rev=5575&view=rev Author: weltall2 Date: 2010-02-18 15:13:30 +0000 (Thu, 18 Feb 2010) Log Message: ----------- fixed PS#4096 - weapon changing shortcut failing patch by rlydontknow Modified Paths: -------------- trunk/src/client/cmdusers.cpp trunk/src/client/gui/inventorywindow.cpp trunk/src/client/gui/inventorywindow.h Modified: trunk/src/client/cmdusers.cpp =================================================================== --- trunk/src/client/cmdusers.cpp 2010-02-18 10:36:07 UTC (rev 5574) +++ trunk/src/client/cmdusers.cpp 2010-02-18 15:13:30 UTC (rev 5575) @@ -45,6 +45,7 @@ #include "gui/pawscontrolwindow.h" #include "gui/psmainwidget.h" #include "gui/pawsgameboard.h" +#include "gui/pawsslot.h" #include "paws/pawsmanager.h" #include "paws/pawsyesnobox.h" @@ -313,17 +314,28 @@ else if (words[0] == "/equip" || (words[0] == "/use" && words.GetCount() > 1)) { if ( words.GetCount() < 2 ) - return "Usage: /equip [stack count] [item name]"; + return "Usage: /equip [stack count] [slot] [item name]"; + + int tail = 1; int quantity = atoi(words[1]); - csString itemName; - if (quantity == 0) + if (quantity > 0) + tail++; + else + quantity = 1; + + pawsInventoryWindow* window = (pawsInventoryWindow*)PawsManager::GetSingleton().FindWidget("InventoryWindow"); + + int slotID = -1; + pawsSlot* toSlot = dynamic_cast <pawsSlot*>(window->FindWidget(words[tail])); + if (toSlot) { - quantity = 1; - itemName = words.GetTail(1); + slotID = toSlot->ID(); + tail++; } - else itemName = words.GetTail(2); - pawsInventoryWindow* window = (pawsInventoryWindow*)PawsManager::GetSingleton().FindWidget("InventoryWindow"); - window->Equip( itemName, quantity ); + + csString itemName; + itemName = words.GetTail(tail); + window->Equip( itemName, quantity, slotID ); } else if ( words[0] == "/dequip" ) Modified: trunk/src/client/gui/inventorywindow.cpp =================================================================== --- trunk/src/client/gui/inventorywindow.cpp 2010-02-18 10:36:07 UTC (rev 5574) +++ trunk/src/client/gui/inventorywindow.cpp 2010-02-18 15:13:30 UTC (rev 5575) @@ -343,7 +343,7 @@ } } -void pawsInventoryWindow::Equip( const char* itemName, int stackCount ) +void pawsInventoryWindow::Equip( const char* itemName, int stackCount, int toSlotID ) { pawsListBox * bulkList = dynamic_cast <pawsListBox*> (FindWidget("BulkList")); if ( (itemName != NULL) && (bulkList) ) @@ -364,12 +364,13 @@ if ( fromSlot ) { + fromSlot->Clear(); int container = fromSlot->ContainerID(); int slot = fromSlot->ID(); //psItem* item = charData->GetItemInSlot( slot ); psSlotMovementMsg msg( container, slot, - CONTAINER_INVENTORY_EQUIPMENT, -1, + CONTAINER_INVENTORY_EQUIPMENT, toSlotID, stackCount ); msg.SendMessage(); } Modified: trunk/src/client/gui/inventorywindow.h =================================================================== --- trunk/src/client/gui/inventorywindow.h 2010-02-18 10:36:07 UTC (rev 5574) +++ trunk/src/client/gui/inventorywindow.h 2010-02-18 15:13:30 UTC (rev 5575) @@ -73,8 +73,9 @@ * * @param itemName The name of the item in the inventory. * @param stackCount The amount to try to equip. + * @param toSlotID The slot you want to equip it to. */ - void Equip( const char* itemName, int stackCount ); + void Equip( const char* itemName, int stackCount, int toSlotID = -1 ); /** Dequips an item into closest available bulk slot. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2010-02-21 22:19:16
|
Revision: 5614 http://planeshift.svn.sourceforge.net/planeshift/?rev=5614&view=rev Author: mgist Date: 2010-02-21 22:19:09 +0000 (Sun, 21 Feb 2010) Log Message: ----------- - Keep the part name separate from the fact name for actors. Modified Paths: -------------- trunk/src/client/pscelclient.cpp trunk/src/client/pscelclient.h Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2010-02-21 22:12:53 UTC (rev 5613) +++ trunk/src/client/pscelclient.cpp 2010-02-21 22:19:09 UTC (rev 5614) @@ -1304,6 +1304,7 @@ groupID = mesg.groupID; gender = mesg.gender; factName = mesg.factname; + partName = factName; matName = mesg.matname; scale = mesg.scale; mountScale = mesg.mountScale; @@ -1955,7 +1956,7 @@ if(!matName.IsEmpty()) { - charApp->ChangeMaterial(factName, matName); + charApp->ChangeMaterial(partName, matName); } if (psengine->GetZoneHandler()->IsLoading() || !post_load->sector) Modified: trunk/src/client/pscelclient.h =================================================================== --- trunk/src/client/pscelclient.h 2010-02-21 22:12:53 UTC (rev 5613) +++ trunk/src/client/pscelclient.h 2010-02-21 22:19:09 UTC (rev 5614) @@ -526,6 +526,7 @@ virtual bool CheckLoadStatus(); csString race; + csString partName; csString mountFactname; csString MounterAnim; csString helmGroup; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-27 14:03:38
|
Revision: 5634 http://planeshift.svn.sourceforge.net/planeshift/?rev=5634&view=rev Author: Khakilord Date: 2010-02-27 14:03:32 +0000 (Sat, 27 Feb 2010) Log Message: ----------- Patch by Botanic. Adds medium rain. Modified Paths: -------------- trunk/src/client/weather.cpp trunk/src/client/weather.h Modified: trunk/src/client/weather.cpp =================================================================== --- trunk/src/client/weather.cpp 2010-02-24 02:46:19 UTC (rev 5633) +++ trunk/src/client/weather.cpp 2010-02-27 14:03:32 UTC (rev 5634) @@ -167,6 +167,8 @@ { if(parent->downfall_params.value > 2000) return WEATHER_SOUND_RAIN_HEAVY; + else if(parent->downfall_params.value > 1000) + return WEATHER_SOUND_RAIN_MEDIUM; else return WEATHER_SOUND_RAIN_LIGHT; } Modified: trunk/src/client/weather.h =================================================================== --- trunk/src/client/weather.h 2010-02-24 02:46:19 UTC (rev 5633) +++ trunk/src/client/weather.h 2010-02-27 14:03:32 UTC (rev 5634) @@ -23,6 +23,7 @@ { WEATHER_SOUND_CLEAR = 1, WEATHER_SOUND_RAIN_LIGHT, + WEATHER_SOUND_RAIN_MEDIUM, WEATHER_SOUND_RAIN_HEAVY, WEATHER_SOUND_SNOW_LIGHT, WEATHER_SOUND_SNOW_HEAVY, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |