From: <mg...@us...> - 2008-12-12 12:12:19
|
Revision: 2674 http://planeshift.svn.sourceforge.net/planeshift/?rev=2674&view=rev Author: mgist Date: 2008-12-12 12:12:00 +0000 (Fri, 12 Dec 2008) Log Message: ----------- - Fixed entity label colour. Modified Paths: -------------- trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h trunk/src/common/effects/pseffectobjlabel.cpp Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2008-12-12 00:06:46 UTC (rev 2673) +++ trunk/src/common/effects/pseffectobj.cpp 2008-12-12 12:12:00 UTC (rev 2674) @@ -274,6 +274,8 @@ : renderer2d(renderer2d) { engine = csQueryRegistry<iEngine> (psCSSetup::object_reg); + stringSet = csQueryRegistryTagInterface<iShaderVarStringSet>(psCSSetup::object_reg, + "crystalspace.shader.variablenameset"); view = parentView; killTime = -1; Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2008-12-12 00:06:46 UTC (rev 2673) +++ trunk/src/common/effects/pseffectobj.h 2008-12-12 12:12:00 UTC (rev 2674) @@ -307,6 +307,8 @@ */ csMatrix3 BuildRotMatrix(const csVector3 &up) const; + csRef<iShaderVarStringSet> stringSet; + csString name; csString materialName; Modified: trunk/src/common/effects/pseffectobjlabel.cpp =================================================================== --- trunk/src/common/effects/pseffectobjlabel.cpp 2008-12-12 00:06:46 UTC (rev 2673) +++ trunk/src/common/effects/pseffectobjlabel.cpp 2008-12-12 12:12:00 UTC (rev 2674) @@ -55,7 +55,6 @@ xpos[i] = (i%16) * 64; ypos[i] = (i/16-2) * 64; } - //printf("new label created\n"); } psEffectObjLabel::~psEffectObjLabel() @@ -447,10 +446,15 @@ cp += 4; x += width[c]; } - csColor color((float)((newElem.colour>>16) & 255)/255.0F, + csVector3 color((float)((newElem.colour>>16) & 255)/255.0F, (float)((newElem.colour>> 8) & 255)/255.0F, (float)((newElem.colour ) & 255)/255.0F); - mesh->GetMeshObject()->SetColor(color); + CS::ShaderVarStringID varName = stringSet->Request("color modulation"); + csShaderVariable* var = mesh->GetSVContext()->GetVariableAdd(varName); + if(var) + { + var->SetValue(color); + } } facState->CalculateNormals(); // facState->SetLighting(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-12-13 10:09:45
|
Revision: 2677 http://planeshift.svn.sourceforge.net/planeshift/?rev=2677&view=rev Author: mgist Date: 2008-12-13 10:09:41 +0000 (Sat, 13 Dec 2008) Log Message: ----------- - Fixed target marker colour. Modified Paths: -------------- trunk/src/common/effects/pseffectobjquad.cpp trunk/src/common/effects/pseffectobjquad.h Modified: trunk/src/common/effects/pseffectobjquad.cpp =================================================================== --- trunk/src/common/effects/pseffectobjquad.cpp 2008-12-13 09:07:28 UTC (rev 2676) +++ trunk/src/common/effects/pseffectobjquad.cpp 2008-12-13 10:09:41 UTC (rev 2677) @@ -25,6 +25,7 @@ #include <iengine/mesh.h> #include <iengine/movable.h> #include <iengine/camera.h> +#include <ivideo/material.h> #include <cstool/csview.h> #include <imesh/objmodel.h> #include <csutil/flags.h> @@ -137,9 +138,6 @@ texel[2].Set(0.0f, 1.0f); texel[3].Set(1.0f, 1.0f); - for (int a=0; a<4; ++a) - colour[a].Set(1, 1, 1); - return true; } @@ -157,8 +155,12 @@ // COLOUR csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR); float lerpAlpha = LERP_KEY(KA_ALPHA); - for (int a=0; a<4; ++a) - colour[a].Set(lerpColour.x, lerpColour.y, lerpColour.z, lerpAlpha); + CS::ShaderVarStringID varName = stringSet->Request("color modulation"); + csShaderVariable* var = mat->GetMaterial()->GetVariableAdd(varName); + if(var) + { + var->SetValue(lerpColour); + } // HEIGHT halfHeightScale *= LERP_KEY(KA_HEIGHT); @@ -265,8 +267,3 @@ { return parent->texel; } - -const csColor4 * psEffectObjQuad::MeshAnimControl::UpdateColors(csTicks current, const csColor4 * colors, int num_colors, uint32 version_id) -{ - return parent->colour; -} Modified: trunk/src/common/effects/pseffectobjquad.h =================================================================== --- trunk/src/common/effects/pseffectobjquad.h 2008-12-13 09:07:28 UTC (rev 2676) +++ trunk/src/common/effects/pseffectobjquad.h 2008-12-13 10:09:41 UTC (rev 2677) @@ -53,12 +53,12 @@ bool AnimatesVertices() const { return false; } bool AnimatesTexels() const { return true; } bool AnimatesNormals() const { return false; } - bool AnimatesColors() const { return true; } + bool AnimatesColors() const { return false; } const csVector3 * UpdateVertices(csTicks current, const csVector3 * verts, int num_verts, uint32 version_id); const csVector2 * UpdateTexels(csTicks current, const csVector2 * texels, int num_texels, uint32 version_id); const csVector3 * UpdateNormals(csTicks current, const csVector3 * normals, int num_normals, uint32 version_id) { return normals; } - const csColor4 * UpdateColors(csTicks current, const csColor4 * colors, int num_colors, uint32 version_id); + const csColor4 * UpdateColors(csTicks current, const csColor4 * colors, int num_colors, uint32 version_id) { return colors; } }; csRef<MeshAnimControl> meshControl; friend struct MeshAnimControl; @@ -95,7 +95,6 @@ csVector3 vert[4]; csVector2 texel[4]; - csColor4 colour[4]; csRef<iMaterialWrapper> mat; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-04-09 23:04:06
|
Revision: 3428 http://planeshift.svn.sourceforge.net/planeshift/?rev=3428&view=rev Author: mgist Date: 2009-04-09 23:04:04 +0000 (Thu, 09 Apr 2009) Log Message: ----------- - Fixed a deadlock when there are duplicate effects. Modified Paths: -------------- trunk/src/common/effects/pseffectmanager.cpp trunk/src/common/effects/pseffectmanager.h Modified: trunk/src/common/effects/pseffectmanager.cpp =================================================================== --- trunk/src/common/effects/pseffectmanager.cpp 2009-04-09 18:18:39 UTC (rev 3427) +++ trunk/src/common/effects/pseffectmanager.cpp 2009-04-09 23:04:04 UTC (rev 3428) @@ -69,14 +69,19 @@ psEffect * newEffect = new psEffect(); newEffect->Load(effectNode, manager->GetView(), manager->Get2DRenderer(), ldr_context); - CS::Threading::MutexScopedLock lock(parseLock); + parseLock.UpgradeLock(); if (manager->FindEffect(newEffect->GetName())) { + parseLock.UpgradeUnlock(); csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Duplicate effect '%s' found!", newEffect->GetName().GetData()); delete newEffect; } else + { + parseLock.UpgradeUnlockAndWriteLock(); manager->AddEffect((const char *)newEffect->GetName(), newEffect); + parseLock.WriteUnlock(); + } } } #endif Modified: trunk/src/common/effects/pseffectmanager.h =================================================================== --- trunk/src/common/effects/pseffectmanager.h 2009-04-09 18:18:39 UTC (rev 3427) +++ trunk/src/common/effects/pseffectmanager.h 2009-04-09 23:04:04 UTC (rev 3428) @@ -32,6 +32,7 @@ #include <imap/reader.h> #include <ivideo/graph3d.h> #include <csutil/scf_implementation.h> +#include <csutil/threading/rwmutex.h> #include "effects/pseffect2drenderer.h" @@ -73,7 +74,7 @@ private: psEffectManager *manager; - CS::Threading::Mutex parseLock; + CS::Threading::ReadWriteMutex parseLock; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-06-19 22:10:47
|
Revision: 3850 http://planeshift.svn.sourceforge.net/planeshift/?rev=3850&view=rev Author: mgist Date: 2009-06-19 22:10:39 +0000 (Fri, 19 Jun 2009) Log Message: ----------- - Compile fix for CS change. Modified Paths: -------------- trunk/src/common/effects/pseffectobjquad.h trunk/src/common/effects/pseffectobjspire.h trunk/src/common/effects/pseffectobjstar.h trunk/src/common/effects/pseffectobjtrail.h Modified: trunk/src/common/effects/pseffectobjquad.h =================================================================== --- trunk/src/common/effects/pseffectobjquad.h 2009-06-19 06:01:21 UTC (rev 3849) +++ trunk/src/common/effects/pseffectobjquad.h 2009-06-19 22:10:39 UTC (rev 3850) @@ -45,7 +45,7 @@ parent = 0; } - void Update(unsigned int i) + void Update(csTicks elapsed, int num_verts, uint32 version_id) { } Modified: trunk/src/common/effects/pseffectobjspire.h =================================================================== --- trunk/src/common/effects/pseffectobjspire.h 2009-06-19 06:01:21 UTC (rev 3849) +++ trunk/src/common/effects/pseffectobjspire.h 2009-06-19 22:10:39 UTC (rev 3850) @@ -44,7 +44,7 @@ parent = 0; } - void Update(unsigned int i) + void Update(csTicks current, int num_verts, uint32 version_id) { } Modified: trunk/src/common/effects/pseffectobjstar.h =================================================================== --- trunk/src/common/effects/pseffectobjstar.h 2009-06-19 06:01:21 UTC (rev 3849) +++ trunk/src/common/effects/pseffectobjstar.h 2009-06-19 22:10:39 UTC (rev 3850) @@ -49,7 +49,7 @@ parent = 0; } - void Update(unsigned int i) + void Update(csTicks elapsed, int num_verts, uint32 version_id) { } Modified: trunk/src/common/effects/pseffectobjtrail.h =================================================================== --- trunk/src/common/effects/pseffectobjtrail.h 2009-06-19 06:01:21 UTC (rev 3849) +++ trunk/src/common/effects/pseffectobjtrail.h 2009-06-19 22:10:39 UTC (rev 3850) @@ -50,7 +50,7 @@ parent = 0; } - void Update(unsigned int i) + void Update(csTicks current, int num_verts, uint32 version_id) { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-09-20 11:59:40
|
Revision: 4462 http://planeshift.svn.sourceforge.net/planeshift/?rev=4462&view=rev Author: mgist Date: 2009-09-20 11:59:32 +0000 (Sun, 20 Sep 2009) Log Message: ----------- - Improved psEffectLight to support multiple lights in podium and moved the messy sector updating code into CS (requires CS update! :P). Modified Paths: -------------- trunk/src/common/effects/pseffectlight.cpp trunk/src/common/effects/pseffectlight.h Modified: trunk/src/common/effects/pseffectlight.cpp =================================================================== --- trunk/src/common/effects/pseffectlight.cpp 2009-09-20 11:57:31 UTC (rev 4461) +++ trunk/src/common/effects/pseffectlight.cpp 2009-09-20 11:59:32 UTC (rev 4462) @@ -32,79 +32,50 @@ // used for generating a unique ID static unsigned int genUniqueID = 0; -static bool podium_lit = false; -static uint podium_count = 0; -static csRef<iLight> plight; psLight::psLight(iObjectRegistry* object_reg) { vclock = csQueryRegistry<iVirtualClock>(object_reg); engine = csQueryRegistry<iEngine>(object_reg); - movable = NULL; dim = true; sequencenum = 0; stepsPerSecond = 60; stepsPerCycle = 60; dimStrength = 100; - is_podium = false; } psLight::~psLight() { - light->QuerySceneNode()->SetParent(0); - - if(podium_lit && is_podium && --podium_count == 0) + if(plight.IsValid()) { - if(podium.IsValid()) - { - podium->GetLights()->Remove(plight); - } - - plight->QuerySceneNode()->SetParent(0); - plight.Invalidate(); - podium_lit = false; + // Remove from the podium sector. + csRef<iSector> podium = engine->GetSectors()->FindByName("room"); + if(podium) podium->GetLights()->Remove(light); } - if(sector.IsValid()) - { - sector->GetLights()->Remove(light); - } + light->QuerySceneNode()->SetParent(0); } unsigned int psLight::AttachLight(const char* name, const csVector3& pos, float radius, const csColor& colour, csRef<iMeshWrapper> mw) { + baseColour = colour; csString lightName = name; lightName.Append("_%u", genUniqueID); light = engine->CreateLight(lightName, pos, radius, colour, CS_LIGHT_DYNAMICTYPE_DYNAMIC); light->SetAttenuationMode(CS_ATTN_INVERSE); - movable = mw->GetMovable(); - baseColour = colour; - sector = movable->GetSectors()->Get(0); - + // Attach to mesh. light->QuerySceneNode()->SetParent(mw->QuerySceneNode()); - csString sname(sector->QueryObject()->GetName()); + csString sname(mw->GetMovable()->GetSectors()->Get(0)->QueryObject()->GetName()); if(sname.Find("room") == 0) { - // Add to the podium sector if not already there. - podium = engine->GetSectors()->FindByName("room"); - if(!podium_lit) - { - plight = engine->CreateLight(name, pos, radius, colour, CS_LIGHT_DYNAMICTYPE_DYNAMIC); - plight->QuerySceneNode()->SetParent(mw->QuerySceneNode()); - podium->AddLight(plight); - podium_lit = true; - } - - is_podium = true; - ++podium_count; + // Add to the podium sector. + csRef<iSector> podium = engine->GetSectors()->FindByName("room"); + if(podium) podium->GetLights()->Add(light); } - // Add to current sector. - sector->GetLights()->Add(light); - lastTime = vclock->GetCurrentTicks(); return ++genUniqueID; @@ -112,71 +83,55 @@ bool psLight::Update() { - if(movable.IsValid()) + int advanceSteps = (vclock->GetCurrentTicks() - lastTime) / (1000.0f/stepsPerSecond); + + if(0 < advanceSteps) { - iSectorList* sectors = movable->GetSectors(); - if(sectors->GetCount() && sector != sectors->Get(0)) - { - if(sector) - { - sector->GetLights()->Remove(light); - } - sector = sectors->Get(0); - sector->AddLight(light); - } + lastTime = vclock->GetCurrentTicks(); - int advanceSteps = (vclock->GetCurrentTicks() - lastTime) / (1000.0f/stepsPerSecond); - - if(0 < advanceSteps) + if(dim) { - lastTime = vclock->GetCurrentTicks(); - - if(dim) + if(sequencenum < stepsPerCycle/2) { - if(sequencenum < stepsPerCycle/2) - { - csColor n = light->GetColor(); + csColor n = light->GetColor(); - for(int i=0; sequencenum < stepsPerCycle/2 && i<advanceSteps; ++i) - { - n.red -= baseColour.red/dimStrength; - n.green -= baseColour.green/dimStrength; - n.blue -= baseColour.blue/dimStrength; - ++sequencenum; - } - - light->SetColor(n); - } - else + for(int i=0; sequencenum < stepsPerCycle/2 && i<advanceSteps; ++i) { - dim = false; + n.red -= baseColour.red/dimStrength; + n.green -= baseColour.green/dimStrength; + n.blue -= baseColour.blue/dimStrength; + ++sequencenum; } + + light->SetColor(n); } else { - if(sequencenum > 0) - { - csColor n = light->GetColor(); + dim = false; + } + } + else + { + if(sequencenum > 0) + { + csColor n = light->GetColor(); - for(int i=0; sequencenum > 0 && i<advanceSteps; ++i) - { - n.red += baseColour.red/dimStrength; - n.green += baseColour.green/dimStrength; - n.blue += baseColour.blue/dimStrength; - --sequencenum; - } - - light->SetColor(n); - } - else + for(int i=0; sequencenum > 0 && i<advanceSteps; ++i) { - dim = true; + n.red += baseColour.red/dimStrength; + n.green += baseColour.green/dimStrength; + n.blue += baseColour.blue/dimStrength; + --sequencenum; } + + light->SetColor(n); } + else + { + dim = true; + } } - - return true; } - return false; + return true; } Modified: trunk/src/common/effects/pseffectlight.h =================================================================== --- trunk/src/common/effects/pseffectlight.h 2009-09-20 11:57:31 UTC (rev 4461) +++ trunk/src/common/effects/pseffectlight.h 2009-09-20 11:59:32 UTC (rev 4462) @@ -56,11 +56,8 @@ uint stepsPerCycle; uint dimStrength; - csWeakRef<iMovable> movable; - csWeakRef<iSector> sector; - - csWeakRef<iSector> podium; - bool is_podium; + // For podium doll lights. + csRef<iLight> plight; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Andrew C. <an...@hy...> - 2009-09-21 00:03:35
|
Hi. I was looking at this and I am not sure where plight actually gets set anywhere? ========== Andrew On Sun, 2009-09-20 at 11:59 +0000, mg...@us... wrote: > Revision: 4462 > http://planeshift.svn.sourceforge.net/planeshift/?rev=4462&view=rev > Author: mgist > Date: 2009-09-20 11:59:32 +0000 (Sun, 20 Sep 2009) > > Log Message: > ----------- > - Improved psEffectLight to support multiple lights in podium and moved the messy sector updating code into CS (requires CS update! :P). > > Modified Paths: > -------------- > trunk/src/common/effects/pseffectlight.cpp > trunk/src/common/effects/pseffectlight.h > > Modified: trunk/src/common/effects/pseffectlight.cpp > =================================================================== > --- trunk/src/common/effects/pseffectlight.cpp 2009-09-20 11:57:31 UTC (rev 4461) > +++ trunk/src/common/effects/pseffectlight.cpp 2009-09-20 11:59:32 UTC (rev 4462) > @@ -32,79 +32,50 @@ > > // used for generating a unique ID > static unsigned int genUniqueID = 0; > -static bool podium_lit = false; > -static uint podium_count = 0; > -static csRef<iLight> plight; > > psLight::psLight(iObjectRegistry* object_reg) > { > vclock = csQueryRegistry<iVirtualClock>(object_reg); > engine = csQueryRegistry<iEngine>(object_reg); > - movable = NULL; > dim = true; > sequencenum = 0; > stepsPerSecond = 60; > stepsPerCycle = 60; > dimStrength = 100; > - is_podium = false; > } > > psLight::~psLight() > { > - light->QuerySceneNode()->SetParent(0); > - > - if(podium_lit && is_podium && --podium_count == 0) > + if(plight.IsValid()) > { > - if(podium.IsValid()) > - { > - podium->GetLights()->Remove(plight); > - } > - > - plight->QuerySceneNode()->SetParent(0); > - plight.Invalidate(); > - podium_lit = false; > + // Remove from the podium sector. > + csRef<iSector> podium = engine->GetSectors()->FindByName("room"); > + if(podium) podium->GetLights()->Remove(light); > } > > - if(sector.IsValid()) > - { > - sector->GetLights()->Remove(light); > - } > + light->QuerySceneNode()->SetParent(0); > } > > unsigned int psLight::AttachLight(const char* name, const csVector3& pos, > float radius, const csColor& colour, csRef<iMeshWrapper> mw) > { > + baseColour = colour; > csString lightName = name; > lightName.Append("_%u", genUniqueID); > light = engine->CreateLight(lightName, pos, radius, colour, CS_LIGHT_DYNAMICTYPE_DYNAMIC); > light->SetAttenuationMode(CS_ATTN_INVERSE); > > - movable = mw->GetMovable(); > - baseColour = colour; > - sector = movable->GetSectors()->Get(0); > - > + // Attach to mesh. > light->QuerySceneNode()->SetParent(mw->QuerySceneNode()); > > - csString sname(sector->QueryObject()->GetName()); > + csString sname(mw->GetMovable()->GetSectors()->Get(0)->QueryObject()->GetName()); > if(sname.Find("room") == 0) > { > - // Add to the podium sector if not already there. > - podium = engine->GetSectors()->FindByName("room"); > - if(!podium_lit) > - { > - plight = engine->CreateLight(name, pos, radius, colour, CS_LIGHT_DYNAMICTYPE_DYNAMIC); > - plight->QuerySceneNode()->SetParent(mw->QuerySceneNode()); > - podium->AddLight(plight); > - podium_lit = true; > - } > - > - is_podium = true; > - ++podium_count; > + // Add to the podium sector. > + csRef<iSector> podium = engine->GetSectors()->FindByName("room"); > + if(podium) podium->GetLights()->Add(light); > } > > - // Add to current sector. > - sector->GetLights()->Add(light); > - > lastTime = vclock->GetCurrentTicks(); > > return ++genUniqueID; > @@ -112,71 +83,55 @@ > > bool psLight::Update() > { > - if(movable.IsValid()) > + int advanceSteps = (vclock->GetCurrentTicks() - lastTime) / (1000.0f/stepsPerSecond); > + > + if(0 < advanceSteps) > { > - iSectorList* sectors = movable->GetSectors(); > - if(sectors->GetCount() && sector != sectors->Get(0)) > - { > - if(sector) > - { > - sector->GetLights()->Remove(light); > - } > - sector = sectors->Get(0); > - sector->AddLight(light); > - } > + lastTime = vclock->GetCurrentTicks(); > > - int advanceSteps = (vclock->GetCurrentTicks() - lastTime) / (1000.0f/stepsPerSecond); > - > - if(0 < advanceSteps) > + if(dim) > { > - lastTime = vclock->GetCurrentTicks(); > - > - if(dim) > + if(sequencenum < stepsPerCycle/2) > { > - if(sequencenum < stepsPerCycle/2) > - { > - csColor n = light->GetColor(); > + csColor n = light->GetColor(); > > - for(int i=0; sequencenum < stepsPerCycle/2 && i<advanceSteps; ++i) > - { > - n.red -= baseColour.red/dimStrength; > - n.green -= baseColour.green/dimStrength; > - n.blue -= baseColour.blue/dimStrength; > - ++sequencenum; > - } > - > - light->SetColor(n); > - } > - else > + for(int i=0; sequencenum < stepsPerCycle/2 && i<advanceSteps; ++i) > { > - dim = false; > + n.red -= baseColour.red/dimStrength; > + n.green -= baseColour.green/dimStrength; > + n.blue -= baseColour.blue/dimStrength; > + ++sequencenum; > } > + > + light->SetColor(n); > } > else > { > - if(sequencenum > 0) > - { > - csColor n = light->GetColor(); > + dim = false; > + } > + } > + else > + { > + if(sequencenum > 0) > + { > + csColor n = light->GetColor(); > > - for(int i=0; sequencenum > 0 && i<advanceSteps; ++i) > - { > - n.red += baseColour.red/dimStrength; > - n.green += baseColour.green/dimStrength; > - n.blue += baseColour.blue/dimStrength; > - --sequencenum; > - } > - > - light->SetColor(n); > - } > - else > + for(int i=0; sequencenum > 0 && i<advanceSteps; ++i) > { > - dim = true; > + n.red += baseColour.red/dimStrength; > + n.green += baseColour.green/dimStrength; > + n.blue += baseColour.blue/dimStrength; > + --sequencenum; > } > + > + light->SetColor(n); > } > + else > + { > + dim = true; > + } > } > - > - return true; > } > > - return false; > + return true; > } > > Modified: trunk/src/common/effects/pseffectlight.h > =================================================================== > --- trunk/src/common/effects/pseffectlight.h 2009-09-20 11:57:31 UTC (rev 4461) > +++ trunk/src/common/effects/pseffectlight.h 2009-09-20 11:59:32 UTC (rev 4462) > @@ -56,11 +56,8 @@ > uint stepsPerCycle; > uint dimStrength; > > - csWeakRef<iMovable> movable; > - csWeakRef<iSector> sector; > - > - csWeakRef<iSector> podium; > - bool is_podium; > + // For podium doll lights. > + csRef<iLight> plight; > }; > > #endif > > > This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > PlaneShift-cvs mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/planeshift-cvs |
From: <mg...@us...> - 2009-09-21 00:41:41
|
Revision: 4465 http://planeshift.svn.sourceforge.net/planeshift/?rev=4465&view=rev Author: mgist Date: 2009-09-21 00:41:34 +0000 (Mon, 21 Sep 2009) Log Message: ----------- - Fixed podium unload in psLight. Modified Paths: -------------- trunk/src/common/effects/pseffectlight.cpp trunk/src/common/effects/pseffectlight.h Modified: trunk/src/common/effects/pseffectlight.cpp =================================================================== --- trunk/src/common/effects/pseffectlight.cpp 2009-09-21 00:41:10 UTC (rev 4464) +++ trunk/src/common/effects/pseffectlight.cpp 2009-09-21 00:41:34 UTC (rev 4465) @@ -46,11 +46,10 @@ psLight::~psLight() { - if(plight.IsValid()) + if(podium.IsValid()) { // Remove from the podium sector. - csRef<iSector> podium = engine->GetSectors()->FindByName("room"); - if(podium) podium->GetLights()->Remove(light); + podium->GetLights()->Remove(light); } light->QuerySceneNode()->SetParent(0); @@ -72,8 +71,8 @@ if(sname.Find("room") == 0) { // Add to the podium sector. - csRef<iSector> podium = engine->GetSectors()->FindByName("room"); - if(podium) podium->GetLights()->Add(light); + podium = engine->GetSectors()->FindByName("room"); + if(podium.IsValid()) podium->GetLights()->Add(light); } lastTime = vclock->GetCurrentTicks(); Modified: trunk/src/common/effects/pseffectlight.h =================================================================== --- trunk/src/common/effects/pseffectlight.h 2009-09-21 00:41:10 UTC (rev 4464) +++ trunk/src/common/effects/pseffectlight.h 2009-09-21 00:41:34 UTC (rev 4465) @@ -57,7 +57,7 @@ uint dimStrength; // For podium doll lights. - csRef<iLight> plight; + csWeakRef<iSector> podium; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2010-03-13 20:14:25
|
Revision: 5674 http://planeshift.svn.sourceforge.net/planeshift/?rev=5674&view=rev Author: weltall2 Date: 2010-03-13 20:14:19 +0000 (Sat, 13 Mar 2010) Log Message: ----------- fixed PS#4244 - very slow modulo for floats in pseffect causes lockups patch by rlydontknow Modified Paths: -------------- trunk/src/common/effects/pseffectanchor.cpp trunk/src/common/effects/pseffectanchorsocket.cpp trunk/src/common/effects/pseffectanchorspline.cpp trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobjsound.cpp trunk/src/common/effects/pseffectobjtext2d.cpp trunk/src/common/effects/pseffectobjtrail.cpp Modified: trunk/src/common/effects/pseffectanchor.cpp =================================================================== --- trunk/src/common/effects/pseffectanchor.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectanchor.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -229,8 +229,10 @@ animLength = 10; life += (float)elapsed; - while (life > animLength) - life -= animLength; + if (life > animLength) + life = fmod(life,animLength); + if (!life) + life += animLength; if (keyFrames->GetSize() == 0) return true; Modified: trunk/src/common/effects/pseffectanchorsocket.cpp =================================================================== --- trunk/src/common/effects/pseffectanchorsocket.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectanchorsocket.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -145,8 +145,10 @@ } life += (float)elapsed; - while (life > animLength) - life -= animLength; + if (life > animLength) + life = fmod(life,animLength); + if (!life) + life += animLength; if (keyFrames->GetSize() == 0) return true; Modified: trunk/src/common/effects/pseffectanchorspline.cpp =================================================================== --- trunk/src/common/effects/pseffectanchorspline.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectanchorspline.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -94,8 +94,10 @@ bool psEffectAnchorSpline::Update(csTicks elapsed) { life += (float)elapsed; - while (life > animLength) - life -= animLength; + if (life > animLength) + life = fmod(life,animLength); + if (!life) + life += animLength; if (keyFrames->GetSize() == 0) objTargetOffset = csVector3(0,0,0); Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectobj.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -454,8 +454,12 @@ const static csMatrix3 UP_FIX(1,0,0, 0,0,1, 0,1,0); life += (float)elapsed; - while (life > animLength && killTime <= 0) - life -= animLength; + if (life > animLength && killTime <= 0) + { + life = fmod(life,animLength); + if (!life) + life += animLength; + } if (life >= birth && !isAlive) { Modified: trunk/src/common/effects/pseffectobjsound.cpp =================================================================== --- trunk/src/common/effects/pseffectobjsound.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectobjsound.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -199,8 +199,12 @@ return true; life += (float)elapsed; - while (life > animLength && killTime <= 0) - life -= animLength; + if (life > animLength && killTime <= 0) + { + life = fmod(life,animLength); + if (!life) + life += animLength; + } if (life >= birth && !isAlive) { Modified: trunk/src/common/effects/pseffectobjtext2d.cpp =================================================================== --- trunk/src/common/effects/pseffectobjtext2d.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectobjtext2d.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -387,8 +387,12 @@ return true; life += (float)elapsed; - while (life > animLength && killTime <= 0) - life -= animLength; + if (life > animLength && killTime <= 0) + { + life = fmod(life,animLength); + if (!life) + life += animLength; + } if (life >= birth && !isAlive) isAlive = true; Modified: trunk/src/common/effects/pseffectobjtrail.cpp =================================================================== --- trunk/src/common/effects/pseffectobjtrail.cpp 2010-03-13 19:42:24 UTC (rev 5673) +++ trunk/src/common/effects/pseffectobjtrail.cpp 2010-03-13 20:14:19 UTC (rev 5674) @@ -174,8 +174,12 @@ return true; life += (float)elapsed; - while (life > animLength && killTime <= 0) - life -= animLength; + if (life > animLength && killTime <= 0) + { + life = fmod(life,animLength); + if (!life) + life += animLength; + } if (life >= birth && !isAlive) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-03 20:43:19
|
Revision: 6120 http://planeshift.svn.sourceforge.net/planeshift/?rev=6120&view=rev Author: rlydontknow Date: 2010-08-03 20:43:13 +0000 (Tue, 03 Aug 2010) Log Message: ----------- first iteration of pseffect optimizations (should save quite some vector operations) Modified Paths: -------------- trunk/src/common/effects/pseffectmanager.cpp trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h trunk/src/common/effects/pseffectobjdecal.cpp trunk/src/common/effects/pseffectobjmesh.cpp trunk/src/common/effects/pseffectobjquad.cpp trunk/src/common/effects/pseffectobjsound.cpp trunk/src/common/effects/pseffectobjspire.cpp trunk/src/common/effects/pseffectobjstar.cpp trunk/src/common/effects/pseffectobjtext2d.cpp trunk/src/common/effects/pseffectobjtrail.cpp Modified: trunk/src/common/effects/pseffectmanager.cpp =================================================================== --- trunk/src/common/effects/pseffectmanager.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectmanager.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -150,7 +150,7 @@ csRef<iThreadedLoader> loader = csQueryRegistry<iThreadedLoader> (psCSSetup::object_reg); csRef<iVFS> vfs = csQueryRegistry<iVFS> (psCSSetup::object_reg); - return csPtr<iThreadReturn>(loader->LoadLibraryFile(vfs->GetCwd(), fileName, effectsCollection)); + return csPtr<iThreadReturn>(loader->LoadLibraryFile(vfs->GetCwd(), fileName, effectsCollection, 0, 0, KEEP_ALL, true)); #endif } Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobj.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -39,35 +39,27 @@ #include "util/pscssetup.h" // keep track of the interpolation types for each key frame -const int lerpTypes[psEffectObjKeyFrame::KA_COUNT] = { +const int lerpTypes[psEffectObjKeyFrame::KA_VEC_COUNT] = { psEffectObjKeyFrame::IT_NONE, /* BLANK */ psEffectObjKeyFrame::IT_LERP, /* SCALE */ psEffectObjKeyFrame::IT_LERP, /* TOP SCALE */ - psEffectObjKeyFrame::IT_LERP, /* POS_X */ - psEffectObjKeyFrame::IT_LERP, /* POS_Y */ - psEffectObjKeyFrame::IT_LERP, /* POS_Z */ - psEffectObjKeyFrame::IT_LERP, /* ROT_X */ - psEffectObjKeyFrame::IT_LERP, /* ROT_Y */ - psEffectObjKeyFrame::IT_LERP, /* ROT_Z */ - psEffectObjKeyFrame::IT_LERP, /* SPIN_X */ - psEffectObjKeyFrame::IT_LERP, /* SPIN_Y */ - psEffectObjKeyFrame::IT_LERP, /* SPIN_Z */ psEffectObjKeyFrame::IT_FLOOR, /* CELL */ - psEffectObjKeyFrame::IT_LERP, /* COLOUR_R */ - psEffectObjKeyFrame::IT_LERP, /* COLOUR_G */ - psEffectObjKeyFrame::IT_LERP, /* COLOUR_B */ psEffectObjKeyFrame::IT_LERP, /* ALPHA */ psEffectObjKeyFrame::IT_LERP, /* HEIGHT */ psEffectObjKeyFrame::IT_LERP, /* PADDING */ psEffectObjKeyFrame::IT_FLOOR, /* ANIMATE */ + psEffectObjKeyFrame::IT_LERP, /* POS */ + psEffectObjKeyFrame::IT_LERP, /* ROT */ + psEffectObjKeyFrame::IT_LERP, /* SPIN */ + psEffectObjKeyFrame::IT_LERP /* COLOUR */ }; -psEffectObjKeyFrame::psEffectObjKeyFrame() : specAction(KA_COUNT) +psEffectObjKeyFrame::psEffectObjKeyFrame() : specAction(KA_VEC_COUNT) { specAction.Clear(); } -psEffectObjKeyFrame::psEffectObjKeyFrame(iDocumentNode *node, const psEffectObjKeyFrame *prevKeyFrame) : specAction(KA_COUNT) +psEffectObjKeyFrame::psEffectObjKeyFrame(iDocumentNode *node, const psEffectObjKeyFrame *prevKeyFrame) : specAction(KA_VEC_COUNT) { specAction.Clear(); @@ -89,23 +81,15 @@ // set default values, if these are wrong then they'll be replaced on the second (lerp) pass actions[KA_SCALE] = 1.0f; actions[KA_TOPSCALE] = 1.0f; - actions[KA_POS_X] = 0; - actions[KA_POS_Y] = 0; - actions[KA_POS_Z] = 0; - actions[KA_ROT_X] = 0.0f; - actions[KA_ROT_Y] = 0.0f; - actions[KA_ROT_Z] = 0.0f; - actions[KA_SPIN_X] = 0; - actions[KA_SPIN_Y] = 0; - actions[KA_SPIN_Z] = 0; actions[KA_CELL] = 0; - actions[KA_COLOUR_R] = 1; - actions[KA_COLOUR_G] = 1; - actions[KA_COLOUR_B] = 1; actions[KA_ALPHA] = 1.0f; actions[KA_HEIGHT] = 1.0f; actions[KA_PADDING] = 0.1f; actions[KA_ANIMATE] = 1; + vecActions[KA_POS - KA_COUNT] = 0; + vecActions[KA_ROT - KA_COUNT] = 0.0f; + vecActions[KA_SPIN - KA_COUNT] = 0; + vecActions[KA_COLOUR - KA_COUNT] = 1; while (xmlbinds->HasNext()) { @@ -134,66 +118,65 @@ } else if (action == "position") { + specAction.SetBit(KA_POS); + csVector3 & vec = vecActions[KA_POS - KA_COUNT]; attr = keyNode->GetAttribute("x"); if (attr) { - specAction.SetBit(KA_POS_X); - actions[KA_POS_X] = attr->GetValueAsFloat(); + vec.x = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("y"); if (attr) { - specAction.SetBit(KA_POS_Y); - actions[KA_POS_Y] = attr->GetValueAsFloat(); + vec.y = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("z"); if (attr) { - specAction.SetBit(KA_POS_Z); - actions[KA_POS_Z] = attr->GetValueAsFloat(); + vec.z = attr->GetValueAsFloat(); } } else if (action == "rotate") { + specAction.SetBit(KA_ROT); + csVector3 & vec = vecActions[KA_ROT - KA_COUNT]; attr = keyNode->GetAttribute("x"); if (attr) { - specAction.SetBit(KA_ROT_X); - actions[KA_ROT_X] = attr->GetValueAsFloat() * PI / 180.0f; + vec.x = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("y"); if (attr) { - specAction.SetBit(KA_ROT_Y); - actions[KA_ROT_Y] = attr->GetValueAsFloat() * PI / 180.0f; + vec.y = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("z"); if (attr) { - specAction.SetBit(KA_ROT_Z); - actions[KA_ROT_Z] = attr->GetValueAsFloat() * PI / 180.0f; + vec.z = attr->GetValueAsFloat(); } + vec *= PI/180.f; } else if (action == "spin") { + specAction.SetBit(KA_SPIN); + csVector3 & vec = vecActions[KA_SPIN - KA_COUNT]; attr = keyNode->GetAttribute("x"); if (attr) { - specAction.SetBit(KA_SPIN_X); - actions[KA_SPIN_X] = attr->GetValueAsFloat() * PI / 180.0f; + vec.x = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("y"); if (attr) { - specAction.SetBit(KA_SPIN_Y); - actions[KA_SPIN_Y] = attr->GetValueAsFloat() * PI / 180.0f; + vec.y = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("z"); if (attr) { - specAction.SetBit(KA_SPIN_Z); - actions[KA_SPIN_Z] = attr->GetValueAsFloat() * PI / 180.0f; + vec.z = attr->GetValueAsFloat(); } + vec *= PI/180.f; } else if (action == "cell") { @@ -202,24 +185,25 @@ } else if (action == "colour") { + specAction.SetBit(KA_COLOUR); + csVector3 & vec = vecActions[KA_COLOUR - KA_COUNT]; attr = keyNode->GetAttribute("r"); if (attr) { - specAction.SetBit(KA_COLOUR_R); - actions[KA_COLOUR_R] = attr->GetValueAsFloat() / 255.0f; + vec.x = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("g"); if (attr) { - specAction.SetBit(KA_COLOUR_G); - actions[KA_COLOUR_G] = attr->GetValueAsFloat() / 255.0f; + vec.y = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("b"); if (attr) { - specAction.SetBit(KA_COLOUR_B); - actions[KA_COLOUR_B] = attr->GetValueAsFloat() / 255.0f; + vec.z = attr->GetValueAsFloat(); } + vec /= 255.0f; + attr = keyNode->GetAttribute("a"); if (attr) { @@ -452,37 +436,43 @@ return true; const static csMatrix3 UP_FIX(1,0,0, 0,0,1, 0,1,0); - - life += (float)elapsed; + const static csMatrix3 billboardFix = csXRotMatrix3(-3.14f/2.0f); + + iMovable* anchorMovable = anchorMesh->GetMovable(); + iMovable* meshMovable = mesh->GetMovable(); + + csVector3 anchorPosition = anchorMovable->GetFullPosition(); + + life += elapsed; if (life > animLength && killTime <= 0) { - life = fmod(life,animLength); + life %= animLength; if (!life) + { life += animLength; + } } - if (life >= birth && !isAlive) - { - isAlive = true; -// if (anchorMesh) -// anchorMesh->GetChildren()->Add(mesh); - } + isAlive |= (life >= birth); if (isAlive && anchorMesh && anchor->IsReady()) { - mesh->GetMovable()->SetSector(anchorMesh->GetMovable()->GetSectors()->Get(0)); - mesh->GetMovable()->SetPosition(anchorMesh->GetMovable()->GetFullPosition()); + meshMovable->SetSector(anchorMovable->GetSectors()->Get(0)); + meshMovable->SetPosition(anchorPosition); if (dir == DT_NONE) - matBase = anchorMesh->GetMovable()->GetFullTransform().GetT2O(); + { + matBase = anchorMovable->GetFullTransform().GetT2O(); + } } - const static csMatrix3 billboardFix = csXRotMatrix3(-3.14f/2.0f); + csMatrix3 matTransform; if (keyFrames->GetSize() == 0) { if (dir == DT_CAMERA) { + // note that this is *very* expensive csVector3 camDir = -view->GetCamera()->GetTransform().GetO2TTranslation() - + anchorMesh->GetMovable()->GetFullPosition(); + + anchorPosition; csReversibleTransform rt; rt.LookAt(camDir, csVector3(0.f,1.f,0.f)); matBase = rt.GetT2O() * UP_FIX; @@ -491,45 +481,41 @@ { matBase = view->GetCamera()->GetTransform().GetT2O() * billboardFix; } - if (scale != 1.0f) - mesh->GetMovable()->SetTransform(matBase * (1.0f / scale)); - else - mesh->GetMovable()->SetTransform(matBase); - baseScale = scale; - mesh->GetMovable()->UpdateMove(); + baseScale = scale; + matTransform = matBase / baseScale; } else { currKeyFrame = FindKeyFrameByTime(life); - nextKeyFrame = currKeyFrame + 1; - if (nextKeyFrame >= keyFrames->GetSize()) - nextKeyFrame = 0; - - // grab and lerp values - - csVector3 lerpRot = LERP_VEC_KEY(KA_ROT); - csVector3 lerpSpin = LERP_VEC_KEY(KA_SPIN); - csVector3 objOffset = LERP_VEC_KEY(KA_POS); - - // calculate rotation from lerped values + nextKeyFrame = (currKeyFrame + 1) % keyFrames->GetSize(); + + // grab and lerp values - expensive + float lerpfactor = LERP_FACTOR; + csVector3 lerpRot = LERP_VEC_KEY(KA_ROT,lerpfactor); + csVector3 lerpSpin = LERP_VEC_KEY(KA_SPIN,lerpfactor); + csVector3 objOffset = LERP_VEC_KEY(KA_POS,lerpfactor); + + // calculate rotation from lerped values - expensive csMatrix3 matRot = csZRotMatrix3(lerpRot.z) * csYRotMatrix3(lerpRot.y) * csXRotMatrix3(lerpRot.x); if (dir != DT_CAMERA && dir != DT_BILLBOARD) - matRot = matRot * matBase; + { + matRot *= matBase; + } // calculate new position csVector3 newPos = matRot * csVector3(-objOffset.x, objOffset.y, -objOffset.z); - - csMatrix3 matTransform; + if (dir == DT_CAMERA) { + // note that this is *very* expensive - again csVector3 camDir = -view->GetCamera()->GetTransform().GetO2TTranslation() - + anchorMesh->GetMovable()->GetFullPosition() + newPos; + + anchorPosition + newPos; csReversibleTransform rt; rt.LookAt(camDir, csVector3(sinf(lerpSpin.y),cosf(lerpSpin.y),0.f)); matBase = rt.GetT2O() * UP_FIX; - newPos = rt.GetT2O() * newPos; + // rotate and spin should have no effect on the transform when we want it to face the camera matTransform = matBase; } @@ -545,25 +531,24 @@ } // SCALE - baseScale = (LERP_KEY(KA_SCALE) * scale); - matTransform *= (1.0f / baseScale); - - // set new transform - mesh->GetMovable()->SetTransform(matTransform); + baseScale = LERP_KEY(KA_SCALE,lerpfactor) * scale; + matTransform /= baseScale; - // set new position - mesh->GetMovable()->SetPosition(anchorMesh->GetMovable()->GetFullPosition() + newPos); - mesh->GetMovable()->UpdateMove(); + // adjust position + meshMovable->SetPosition(anchorPosition+newPos); } - - if (killTime <= 0) - return true; // this effect obj will last forever until some divine intervention - // age the effect obj - killTime -= (int)elapsed; - if (killTime <= 0) - return false; - + // set new transform + meshMovable->SetTransform(matTransform); + meshMovable->UpdateMove(); + + if (killTime > 0) + { + killTime -= elapsed; + if (killTime <= 0) + return false; + } + return true; } @@ -619,10 +604,10 @@ size_t psEffectObj::FindKeyFrameByTime(float time) const { - for ( size_t a = keyFrames->GetSize(); a-- > 0; ) + for ( size_t a = keyFrames->GetSize(); a > 0; --a) { - if (keyFrames->Get(a)->time < time) - return a; + if (keyFrames->Get(a-1)->time < time) + return (a-1); } return 0; } @@ -645,38 +630,62 @@ // this code is crap, but doing it this way allows everything else to be decently nice, clean, and efficient size_t a,b,nextIndex; - for (size_t k=0; k<psEffectObjKeyFrame::KA_COUNT; ++k) + for (size_t k=0; k<psEffectObjKeyFrame::KA_VEC_COUNT; ++k) { a = 0; + size_t i = k - psEffectObjKeyFrame::KA_COUNT; while (FindNextKeyFrameWithAction(a+1, k, nextIndex)) { + psEffectObjKeyFrame* keyA = keyFrames->Get(a); + psEffectObjKeyFrame* keyNext = keyFrames->Get(nextIndex); for (b=a+1; b<nextIndex; ++b) { + psEffectObjKeyFrame* keyB = keyFrames->Get(b); switch(lerpTypes[k]) { case psEffectObjKeyFrame::IT_FLOOR: - keyFrames->Get(b)->actions[k] = keyFrames->Get(a)->actions[k]; + { + if(k < psEffectObjKeyFrame::KA_COUNT) + keyB->actions[k] = keyA->actions[k]; + else + keyB->vecActions[i] = keyA->vecActions[i]; break; + } case psEffectObjKeyFrame::IT_CEILING: - keyFrames->Get(b)->actions[k] = keyFrames->Get(nextIndex)->actions[k]; + { + if(k < psEffectObjKeyFrame::KA_COUNT) + keyB->actions[k] = keyNext->actions[k]; + else + keyB->vecActions[i] = keyNext->vecActions[i]; break; + } case psEffectObjKeyFrame::IT_LERP: - float lerpVal = lerp(keyFrames->Get(a)->actions[k], keyFrames->Get(nextIndex)->actions[k], - keyFrames->Get(a)->time, - keyFrames->Get(nextIndex)->time, - keyFrames->Get(b)->time); - keyFrames->Get(b)->actions[k] = lerpVal; + { + float lerpFact = lerpFactor(keyA->time, keyNext->time, keyB->time); + + if(k < psEffectObjKeyFrame::KA_COUNT) + keyB->actions[k] = lerp(keyA->actions[k], keyNext->actions[k], lerpFact); + else + keyB->vecActions[i] = lerpVec(keyA->vecActions[i], keyNext->vecActions[i], lerpFact); break; + } } } a = nextIndex; } // no matter what the interpolation type (as long as we have one), just clamp the end - if (lerpTypes[k] != psEffectObjKeyFrame::IT_NONE) + if (lerpTypes[k] != psEffectObjKeyFrame::IT_NONE && a < keyFrames->GetSize()) { + psEffectObjKeyFrame* keyA = keyFrames->Get(a); for (b = a + 1; b < keyFrames->GetSize(); ++b) - keyFrames->Get(b)->actions[k] = keyFrames->Get(a)->actions[k]; + { + psEffectObjKeyFrame* keyB = keyFrames->Get(b); + if(k < psEffectObjKeyFrame::KA_COUNT) + keyB->actions[k] = keyA->actions[k]; + else + keyB->vecActions[i] = keyA->vecActions[i]; + } } } } Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobj.h 2010-08-03 20:43:13 UTC (rev 6120) @@ -53,8 +53,8 @@ psEffectObjKeyFrame(iDocumentNode *node, const psEffectObjKeyFrame *prevKeyFrame); ~psEffectObjKeyFrame(); - /// this is the time of the keyframe animation (in seconds) - float time; + /// this is the time of the keyframe animation (in milliseconds) + csTicks time; enum INTERP_TYPE { @@ -70,19 +70,7 @@ { KA_SCALE = 1, KA_TOPSCALE, - KA_POS_X, - KA_POS_Y, - KA_POS_Z, - KA_ROT_X, - KA_ROT_Y, - KA_ROT_Z, - KA_SPIN_X, - KA_SPIN_Y, - KA_SPIN_Z, KA_CELL, - KA_COLOUR_R, KA_COLOUR_X = KA_COLOUR_R, - KA_COLOUR_G, KA_COLOUR_Y = KA_COLOUR_G, - KA_COLOUR_B, KA_COLOUR_Z = KA_COLOUR_B, KA_ALPHA, KA_HEIGHT, KA_PADDING, @@ -91,7 +79,18 @@ KA_COUNT }; + enum KEY_VEC_ACTION + { + KA_POS = KA_COUNT, + KA_ROT, + KA_SPIN, + KA_COLOUR, + + KA_VEC_COUNT + }; + float actions[KA_COUNT]; + csVector3 vecActions[KA_VEC_COUNT - KA_COUNT]; /// keep track of which actions were specified for which csBitArray specAction; @@ -339,8 +338,8 @@ csString materialName; int killTime; - float life; - float animLength; + csTicks life; + csTicks animLength; // the effect anchor that this obj is attached to csString anchorName; @@ -356,7 +355,7 @@ csRef<iMeshFactoryWrapper> meshFact; csRef<iMeshWrapper> mesh; - float birth; + csTicks birth; bool isAlive; float baseScale; @@ -387,42 +386,56 @@ float scale; float aspect; - inline float lerp(float f1, float f2, float t1, float t2, float t) + inline float lerp(float f1, float f2, float factor) { - if (t2 == t1) + if (factor == 0.f) + { return f1; - - return f1 + (f2-f1)*(t-t1)/(t2-t1); + } + else + { + return f1 + (f2-f1)*factor; + } } - inline csVector3 lerpVec(const csVector3 &v1, const csVector3 &v2, float t1, float t2, float t) + inline csVector3 lerpVec(const csVector3 &v1, const csVector3 &v2, float factor) { - if (t2 == t1) + if (factor == 0.f) + { return v1; - - return v1 + (v2-v1)*(t-t1)/(t2-t1); + } + else + { + return v1 + (v2-v1)*factor; + } } + + inline float lerpFactor(csTicks t1, csTicks t2, csTicks t) + { + if(t2 == t1) + { + return 0.f; + } + else + { + return ((float)(t-t1)/(float)(t2-t1)); + } + } }; -#define LERP_KEY(action) \ +#define LERP_KEY(action,factor) \ lerp(keyFrames->Get(currKeyFrame)->actions[psEffectObjKeyFrame::action], \ keyFrames->Get(nextKeyFrame)->actions[psEffectObjKeyFrame::action], \ - keyFrames->Get(currKeyFrame)->time, \ - keyFrames->Get(nextKeyFrame)->time, \ - life) + factor) -#define LERP_VEC_KEY(action) \ - lerpVec( \ - csVector3(keyFrames->Get(currKeyFrame)->actions[psEffectObjKeyFrame::action##_X], \ - keyFrames->Get(currKeyFrame)->actions[psEffectObjKeyFrame::action##_Y], \ - keyFrames->Get(currKeyFrame)->actions[psEffectObjKeyFrame::action##_Z]), \ - csVector3(keyFrames->Get(nextKeyFrame)->actions[psEffectObjKeyFrame::action##_X], \ - keyFrames->Get(nextKeyFrame)->actions[psEffectObjKeyFrame::action##_Y], \ - keyFrames->Get(nextKeyFrame)->actions[psEffectObjKeyFrame::action##_Z]), \ - keyFrames->Get(currKeyFrame)->time, \ - keyFrames->Get(nextKeyFrame)->time, \ - life) +#define LERP_VEC_KEY(action,factor) \ + lerpVec(keyFrames->Get(currKeyFrame)->vecActions[psEffectObjKeyFrame::action - psEffectObjKeyFrame::KA_COUNT], \ + keyFrames->Get(nextKeyFrame)->vecActions[psEffectObjKeyFrame::action - psEffectObjKeyFrame::KA_COUNT], \ + factor) +#define LERP_FACTOR \ + lerpFactor(keyFrames->Get(currKeyFrame)->time, \ + keyFrames->Get(nextKeyFrame)->time, \ + life) - #endif Modified: trunk/src/common/effects/pseffectobjdecal.cpp =================================================================== --- trunk/src/common/effects/pseffectobjdecal.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjdecal.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -194,7 +194,7 @@ float heightScale = 1.0f; if (keyFrames->GetSize() > 0) - heightScale = LERP_KEY(KA_HEIGHT); + heightScale = LERP_KEY(KA_HEIGHT,LERP_FACTOR); const csReversibleTransform t = mesh->GetMovable()->GetFullTransform(); const csVector3 newPos = t.GetOrigin(); Modified: trunk/src/common/effects/pseffectobjmesh.cpp =================================================================== --- trunk/src/common/effects/pseffectobjmesh.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjmesh.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -167,13 +167,14 @@ return true; // COLOUR - csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR); + float lerpfactor = LERP_FACTOR; + csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR,lerpfactor); mesh->GetMeshObject()->SetColor(csColor(lerpColour.x, lerpColour.y, lerpColour.z)); - + // ALPHA if (mixmode == CS_FX_ALPHA) { - float lerpAlpha = LERP_KEY(KA_ALPHA); + float lerpAlpha = LERP_KEY(KA_ALPHA,lerpfactor); sprState->SetMixMode(CS_FX_SETALPHA(lerpAlpha)); } Modified: trunk/src/common/effects/pseffectobjquad.cpp =================================================================== --- trunk/src/common/effects/pseffectobjquad.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjquad.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -150,7 +150,8 @@ if (keyFrames->GetSize() > 0) { // COLOUR - csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR); + float lerpfactor = LERP_FACTOR; + csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR,lerpfactor); //float lerpAlpha = LERP_KEY(KA_ALPHA); CS::ShaderVarStringID varName = stringSet->Request("color modulation"); csShaderVariable* var = mat->GetMaterial()->GetVariableAdd(varName); @@ -160,7 +161,7 @@ } // HEIGHT - halfHeightScale *= LERP_KEY(KA_HEIGHT); + halfHeightScale *= LERP_KEY(KA_HEIGHT,lerpfactor); } halfHeightScale *= quadAspect * aspect; Modified: trunk/src/common/effects/pseffectobjsound.cpp =================================================================== --- trunk/src/common/effects/pseffectobjsound.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjsound.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -136,16 +136,23 @@ if (!anchor || !anchor->IsReady()) // wait for anchor to be ready return true; - life += (float)elapsed; + life += elapsed; if (life > animLength && killTime <= 0) { - life = fmod(life,animLength); + life %= animLength; if (!life) life += animLength; } - if (life >= birth && !isAlive) + if (killTime > 0) { + killTime -= elapsed; + if (killTime <= 0) + return false; + } + + if (!isAlive && life >= birth) + { isAlive = true; SndSysMgr->Play3DSound (soundName, LOOP, 0, 0, VOLUME_NORM, SndSysMgr->effectSndCtrl, csVector3(0,0,0), csVector3(0,0,0), @@ -158,24 +165,15 @@ if (keyFrames->GetSize() > 0) { currKeyFrame = FindKeyFrameByTime(life); - nextKeyFrame = currKeyFrame + 1; - if (nextKeyFrame >= keyFrames->GetSize()) - nextKeyFrame = 0; + nextKeyFrame = (currKeyFrame + 1) % keyFrames->GetSize(); // position - soundPos += LERP_VEC_KEY(KA_POS); + soundPos += LERP_VEC_KEY(KA_POS,LERP_FACTOR); } if (sndHandle != NULL) sndHandle->sndsource3d->SetPosition(soundPos); - - if (killTime <= 0) - return true; - killTime -= (int)elapsed; - if (killTime <= 0) - return false; - return true; } Modified: trunk/src/common/effects/pseffectobjspire.cpp =================================================================== --- trunk/src/common/effects/pseffectobjspire.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjspire.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -166,14 +166,15 @@ if (keyFrames->GetSize() > 0) { // COLOUR - csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR); - float lerpAlpha = LERP_KEY(KA_ALPHA); + float lerpfactor = LERP_FACTOR; + csVector3 lerpColour = LERP_VEC_KEY(KA_COLOUR,lerpfactor); + float lerpAlpha = LERP_KEY(KA_ALPHA,lerpfactor); for (int a=0; a<vertCount; ++a) colour[a].Set(lerpColour.x, lerpColour.y, lerpColour.z, lerpAlpha); - topScale = LERP_KEY(KA_TOPSCALE); - height = LERP_KEY(KA_HEIGHT); - padding = LERP_KEY(KA_PADDING); + topScale = LERP_KEY(KA_TOPSCALE,lerpfactor); + height = LERP_KEY(KA_HEIGHT,lerpfactor); + padding = LERP_KEY(KA_PADDING,lerpfactor); } CalculateData(shape, segments, vert, texel, topScale, height, padding); Modified: trunk/src/common/effects/pseffectobjstar.cpp =================================================================== --- trunk/src/common/effects/pseffectobjstar.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjstar.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -153,11 +153,12 @@ if (keyFrames->GetSize() > 0) { // COLOUR - lerpColour = LERP_VEC_KEY(KA_COLOUR); - lerpAlpha = LERP_KEY(KA_ALPHA); + float lerpfactor = LERP_FACTOR; + lerpColour = LERP_VEC_KEY(KA_COLOUR,lerpfactor); + lerpAlpha = LERP_KEY(KA_ALPHA,lerpfactor); - topScale = LERP_KEY(KA_TOPSCALE); - height = LERP_KEY(KA_HEIGHT); + topScale = LERP_KEY(KA_TOPSCALE,lerpfactor); + height = LERP_KEY(KA_HEIGHT,lerpfactor); } for (int b=0; b<segments; ++b) Modified: trunk/src/common/effects/pseffectobjtext2d.cpp =================================================================== --- trunk/src/common/effects/pseffectobjtext2d.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjtext2d.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -150,30 +150,30 @@ break; } - if (elem->scale) - { - // if it's scaled and has an offset, then the offset should scale both sides, otherwise it's just a translation - if (elem->align == EA_TOP || elem->align == EA_BOTTOM || elem->align == EA_CENTER) - destRect.xmin -= elem->offsetx; - else - destRect.xmin += elem->offsetx; - destRect.xmax += elem->offsetx; + if (elem->scale) + { + // if it's scaled and has an offset, then the offset should scale both sides, otherwise it's just a translation + if (elem->align == EA_TOP || elem->align == EA_BOTTOM || elem->align == EA_CENTER) + destRect.xmin -= elem->offsetx; + else + destRect.xmin += elem->offsetx; + destRect.xmax += elem->offsetx; - if (elem->align == EA_LEFT || elem->align == EA_RIGHT || elem->align == EA_CENTER) - destRect.ymin -= elem->offsety; - else - destRect.ymin += elem->offsety; - destRect.ymax += elem->offsety; - } - else - { - destRect.xmin += elem->offsetx; - destRect.xmax += elem->offsetx; - destRect.ymin += elem->offsety; - destRect.ymax += elem->offsety; - } + if (elem->align == EA_LEFT || elem->align == EA_RIGHT || elem->align == EA_CENTER) + destRect.ymin -= elem->offsety; + else + destRect.ymin += elem->offsety; + destRect.ymax += elem->offsety; + } + else + { + destRect.xmin += elem->offsetx; + destRect.xmax += elem->offsetx; + destRect.ymin += elem->offsety; + destRect.ymax += elem->offsety; + } - csRect tr(elem->umin, elem->vmin, elem->umax, elem->vmax); + csRect tr(elem->umin, elem->vmin, elem->umax, elem->vmax); elems.Push(renderer2d->Add2DElement(new psEffect2DImgElement(zorder++, backgroundMat->GetMaterial()->GetTexture(), tr, destRect, 0, elem->tile))); } @@ -381,36 +381,35 @@ bool psEffectObjText2D::Update(csTicks elapsed) { size_t a, len; - int lerpAlpha = 255; + int lerpAlpha = 255; if (!anchor || !anchor->IsReady()) // wait for anchor to be ready return true; - life += (float)elapsed; + life += elapsed; if (life > animLength && killTime <= 0) { - life = fmod(life,animLength); + life %= animLength; if (!life) life += animLength; } - if (life >= birth && !isAlive) - isAlive = true; + life |= (life >= birth); // calculate 2D position of text csVector3 p = anchorMesh->GetMovable()->GetPosition(); if (keyFrames->GetSize() > 0) { currKeyFrame = FindKeyFrameByTime(life); - nextKeyFrame = currKeyFrame + 1; - if (nextKeyFrame >= keyFrames->GetSize()) - nextKeyFrame = 0; + nextKeyFrame = (currKeyFrame + 1) % keyFrames->GetSize(); + float lerpfactor = LERP_FACTOR; + // position - p += LERP_VEC_KEY(KA_POS); + p += LERP_VEC_KEY(KA_POS,lerpfactor); - // calculate alpha - lerpAlpha = (int) (LERP_KEY(KA_ALPHA) * 255); + // calculate alpha + lerpAlpha = (int) (LERP_KEY(KA_ALPHA,lerpfactor) * 255); } // transform 3D to camera @@ -436,13 +435,13 @@ { elems[a]->originx = (int)sp.x; elems[a]->originy = (int)sp.y + yAlign; - elems[a]->SetAlpha(lerpAlpha); + elems[a]->SetAlpha(lerpAlpha); } if (killTime <= 0) return true; - killTime -= (int)elapsed; + killTime -= elapsed; if (killTime <= 0) return false; @@ -516,7 +515,7 @@ int y = element.y - maxHeight / 2; const char * text = element.text; - psEffect2DTextElement * textElem = new psEffect2DTextElement(zorder++, font, text, x, y, element.colour, -1, element.hasOutline ? element.outlineColour : -1, element.hasShadow ? element.shadowColour : -1, 0); + psEffect2DTextElement * textElem = new psEffect2DTextElement(zorder++, font, text, x, y, element.colour, -1, element.hasOutline ? element.outlineColour : -1, element.hasShadow ? element.shadowColour : -1, 0); elems.Push(renderer2d->Add2DElement(textElem)); } Modified: trunk/src/common/effects/pseffectobjtrail.cpp =================================================================== --- trunk/src/common/effects/pseffectobjtrail.cpp 2010-08-02 21:45:27 UTC (rev 6119) +++ trunk/src/common/effects/pseffectobjtrail.cpp 2010-08-03 20:43:13 UTC (rev 6120) @@ -173,18 +173,15 @@ if (!anchor || !anchor->IsReady()) // wait for anchor to be ready return true; - life += (float)elapsed; + life += elapsed; if (life > animLength && killTime <= 0) { - life = fmod(life,animLength); + life %= animLength; if (!life) life += animLength; } - if (life >= birth && !isAlive) - { - isAlive = true; - } + isAlive |= (life >= birth); if (!setMesh && isAlive) { @@ -203,7 +200,7 @@ if (killTime > 0) { // age the effect obj - killTime -= (int)elapsed; + killTime -= elapsed; if (killTime <= 0) return false; } @@ -223,12 +220,13 @@ nextKeyFrame = 0; // grab and lerp values - rot = LERP_VEC_KEY(KA_ROT); - spin = LERP_VEC_KEY(KA_SPIN); - newColour = LERP_VEC_KEY(KA_COLOUR); - alpha = LERP_KEY(KA_ALPHA); - posOffset = LERP_VEC_KEY(KA_POS); - height = LERP_KEY(KA_HEIGHT); + float lerpfactor = LERP_FACTOR; + rot = LERP_VEC_KEY(KA_ROT,lerpfactor); + spin = LERP_VEC_KEY(KA_SPIN,lerpfactor); + newColour = LERP_VEC_KEY(KA_COLOUR,lerpfactor); + alpha = LERP_KEY(KA_ALPHA,lerpfactor); + posOffset = LERP_VEC_KEY(KA_POS,lerpfactor); + height = LERP_KEY(KA_HEIGHT,lerpfactor); } matBase *= csZRotMatrix3(rot.z) * csYRotMatrix3(rot.y) * csXRotMatrix3(rot.x); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-05 23:38:27
|
Revision: 6126 http://planeshift.svn.sourceforge.net/planeshift/?rev=6126&view=rev Author: rlydontknow Date: 2010-08-05 23:38:21 +0000 (Thu, 05 Aug 2010) Log Message: ----------- fixed dependency and looping of effects where animLength < lifeTime Modified Paths: -------------- trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2010-08-05 23:37:28 UTC (rev 6125) +++ trunk/src/common/effects/pseffectobj.cpp 2010-08-05 23:38:21 UTC (rev 6126) @@ -602,8 +602,9 @@ return false; } -size_t psEffectObj::FindKeyFrameByTime(float time) const +size_t psEffectObj::FindKeyFrameByTime(csTicks time) const { + time %= animLength; for ( size_t a = keyFrames->GetSize(); a > 0; --a) { if (keyFrames->Get(a-1)->time < time) Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2010-08-05 23:37:28 UTC (rev 6125) +++ trunk/src/common/effects/pseffectobj.h 2010-08-05 23:38:21 UTC (rev 6126) @@ -39,8 +39,9 @@ struct iMeshFactoryWrapper; struct iSector; struct iCollection; +struct iLoaderContext; + class psEffect2DRenderer; - class psEffectAnchor; /** @@ -312,7 +313,7 @@ * @param time the time to lookup * @return the index of the keyFrame at the specified time */ - size_t FindKeyFrameByTime(float time) const; + size_t FindKeyFrameByTime(csTicks time) const; /** finds the next key frame where the specific action is specified * @param startFrame the first frame to start looking This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-06 01:22:11
|
Revision: 6131 http://planeshift.svn.sourceforge.net/planeshift/?rev=6131&view=rev Author: rlydontknow Date: 2010-08-06 01:22:04 +0000 (Fri, 06 Aug 2010) Log Message: ----------- added light effect Added Paths: ----------- trunk/src/common/effects/pseffectobjlight.cpp trunk/src/common/effects/pseffectobjlight.h Added: trunk/src/common/effects/pseffectobjlight.cpp =================================================================== --- trunk/src/common/effects/pseffectobjlight.cpp (rev 0) +++ trunk/src/common/effects/pseffectobjlight.cpp 2010-08-06 01:22:04 UTC (rev 6131) @@ -0,0 +1,214 @@ +/* +* Author: Matthieu Kraus +* +* 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. +* +*/ + +#include "pseffectobjlight.h" +#include "pseffectanchor.h" + +#include <csutil/xmltiny.h> +#include <iengine/engine.h> +#include <iengine/mesh.h> +#include <iengine/movable.h> +#include <iengine/scenenode.h> +#include <iengine/sector.h> + +psEffectObjLight::psEffectObjLight(iView * parentView, psEffect2DRenderer * renderer2d) + :psEffectObj(parentView, renderer2d) +{ +} + +psEffectObjLight::~psEffectObjLight() +{ + if(light.IsValid()) + { + light->QuerySceneNode()->SetParent(0); + light->GetMovable()->UpdateMove(); + engine->RemoveObject(light); + if(anchorMesh) + anchorMesh->GetMovable()->UpdateMove(); + } + csPrintf("destroyed effect light\n\n"); +} + +bool psEffectObjLight::Load(iDocumentNode* node, iLoaderContext* ldr_context) +{ + if (!psEffectObj::Load(node, ldr_context)) + return false; + + radius = 10.f; + type = CS_LIGHT_POINTLIGHT; + mode = CS_ATTN_INVERSE; + color = csColor(0); + offset = csVector3(0); + + csRef<iDocumentAttributeIterator> attribIter = node->GetAttributes(); + while(attribIter->HasNext()) + { + csRef<iDocumentAttribute> attr = attribIter->Next(); + csString attrName = attr->GetName(); + attrName.Downcase(); + if(attrName == "radius") + { + radius = attr->GetValueAsFloat(); + } + else if(attrName == "mode") + { + csString modeName = attr->GetValue(); + modeName.Downcase(); + if(modeName == "linear") + mode = CS_ATTN_LINEAR; + else if(modeName == "realistic") + mode = CS_ATTN_REALISTIC; + else if(modeName == "clq") + mode = CS_ATTN_CLQ; + } + else if(attrName == "type") + { + csString typeName = attr->GetValue(); + typeName.Downcase(); + if(typeName == "spot") + type = CS_LIGHT_SPOTLIGHT; + else if(typeName == "directional") + type = CS_LIGHT_DIRECTIONAL; + } + else if(attrName == "r") + { + color.red = attr->GetValueAsFloat(); + } + else if(attrName == "g") + { + color.green = attr->GetValueAsFloat(); + } + else if(attrName == "b") + { + color.blue = attr->GetValueAsFloat(); + } + else if(attrName == "x") + { + offset.x = attr->GetValueAsFloat(); + } + else if(attrName == "y") + { + offset.y = attr->GetValueAsFloat(); + } + else if(attrName == "z") + { + offset.z = attr->GetValueAsFloat(); + } + } + + return true; +} + +bool psEffectObjLight::AttachToAnchor(psEffectAnchor* anchor) +{ + if(!anchor) + return false; + + csRef<iMeshWrapper> mw = anchor->GetMesh(); + if(light && mw) + { + light->QuerySceneNode()->SetParent(mw->QuerySceneNode()); + mw->GetMovable()->UpdateMove(); + if(anchorMesh) + anchorMesh->GetMovable()->UpdateMove(); + + this->anchor = anchor; + anchorMesh = mw; + return true; + } + else + { + csPrintf("failed to attach light\n"); + } + return false; +} + +bool psEffectObjLight::Render(const csVector3 &up) +{ + if(light.IsValid()) + return true; + + light = engine->CreateLight(0, offset, radius, color, CS_LIGHT_DYNAMICTYPE_DYNAMIC); + if(!light.IsValid()) + { + csPrintf("failed to create effect light\n"); + return false; + } + else + { + csPrintf("created effect light\n\n"); + } + + light->SetAttenuationMode(mode); + light->SetType(type); + return true; +} + +bool psEffectObjLight::Update(csTicks elapsed) +{ + if (!anchor || !anchor->IsReady() || !anchorMesh->GetMovable()->GetSectors()->GetCount()) // wait for anchor to be ready + return true; + + life += elapsed; + if (life > animLength && killTime <= 0) + { + life %= animLength; + if (!life) + { + life += animLength; + } + } + + if(keyFrames->GetSize() == 0) + { + light->SetColor(color); + } + else + { + currKeyFrame = FindKeyFrameByTime(life); + nextKeyFrame = (currKeyFrame + 1) % keyFrames->GetSize(); + float lerpfactor = LERP_FACTOR; + csVector3 newColor = LERP_VEC_KEY(KA_COLOUR,lerpfactor)*255.f; + csColor c(newColor.x, newColor.y, newColor.z); + light->SetColor(c); + } + + if (killTime > 0) + { + killTime -= elapsed; + if (killTime <= 0) + return false; + } + + return true; +} + +psEffectObj* psEffectObjLight::Clone() const +{ + psEffectObjLight* newLight = new psEffectObjLight(view, renderer2d); + CloneBase(newLight); + + newLight->radius = radius; + newLight->type = type; + newLight->mode = mode; + newLight->color = color; + newLight->offset = offset; + return newLight; +} + Property changes on: trunk/src/common/effects/pseffectobjlight.cpp ___________________________________________________________________ Added: svn:mim-type + text/plain Added: svn:mime-type + text/plain Added: svn:eol-style + native Added: trunk/src/common/effects/pseffectobjlight.h =================================================================== --- trunk/src/common/effects/pseffectobjlight.h (rev 0) +++ trunk/src/common/effects/pseffectobjlight.h 2010-08-06 01:22:04 UTC (rev 6131) @@ -0,0 +1,51 @@ +/* +* Author: Matthieu Kraus +* +* 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. +* +*/ + +#ifndef PS_EFFECT_OBJ_LIGHT_HEADER +#define PS_EFFECT_OBJ_LIGHT_HEADER + +#include <cssysdef.h> +#include <iengine/light.h> +#include <csutil/cscolor.h> + +#include "pseffectobj.h" + +class psEffectObjLight : public psEffectObj +{ +public: + + psEffectObjLight(iView* parentView, psEffect2DRenderer* renderer2d); + ~psEffectObjLight(); + + bool Load(iDocumentNode* node, iLoaderContext* ldr_context); + bool Render(const csVector3 &up); + bool Update(csTicks elapsed); + psEffectObj* Clone() const; + bool AttachToAnchor(psEffectAnchor* anchor); + +protected: + csRef<iLight> light; + float radius; + csLightType type; + csLightAttenuationMode mode; + csColor color; + csVector3 offset; +}; + +#endif Property changes on: trunk/src/common/effects/pseffectobjlight.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: <rly...@us...> - 2010-08-06 03:21:14
|
Revision: 6137 http://planeshift.svn.sourceforge.net/planeshift/?rev=6137&view=rev Author: rlydontknow Date: 2010-08-06 03:21:08 +0000 (Fri, 06 Aug 2010) Log Message: ----------- added scaling for non-looping effects to-do: add a way to mark effects that shouldn't be scaled Modified Paths: -------------- trunk/src/common/effects/pseffect.cpp trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h Modified: trunk/src/common/effects/pseffect.cpp =================================================================== --- trunk/src/common/effects/pseffect.cpp 2010-08-06 02:56:24 UTC (rev 6136) +++ trunk/src/common/effects/pseffect.cpp 2010-08-06 03:21:08 UTC (rev 6137) @@ -601,12 +601,17 @@ void psEffect::SetKillTime(const int newKillTime) { + int oldKillTime = GetKillTime(); for(size_t a = 0; a < effectObjs.GetSize(); ++a) { if(effectObjs[a]->GetKillTime() <= 0) { effectObjs[a]->SetKillTime(newKillTime); } + else + { + effectObjs[a]->SetAnimationScaling((float)oldKillTime/newKillTime); + } } } Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2010-08-06 02:56:24 UTC (rev 6136) +++ trunk/src/common/effects/pseffectobj.cpp 2010-08-06 03:21:08 UTC (rev 6137) @@ -265,6 +265,7 @@ view = parentView; killTime = -1; + animScaling = 1; isAlive = true; birth = 0; @@ -604,6 +605,7 @@ size_t psEffectObj::FindKeyFrameByTime(csTicks time) const { + time *= animScaling; time %= animLength; for ( size_t a = keyFrames->GetSize(); a > 0; --a) { Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2010-08-06 02:56:24 UTC (rev 6136) +++ trunk/src/common/effects/pseffectobj.h 2010-08-06 03:21:08 UTC (rev 6137) @@ -277,6 +277,12 @@ */ float GetAnimLength() const { return animLength; } + void SetAnimationScaling(float s) + { + killTime *= animScaling/s; + animScaling = s; + } + /** Gets the name of this effect obj. * @return the name of this effect obj. */ @@ -341,6 +347,7 @@ int killTime; csTicks life; csTicks animLength; + float animScaling; // the effect anchor that this obj is attached to csString anchorName; @@ -437,6 +444,6 @@ #define LERP_FACTOR \ lerpFactor(keyFrames->Get(currKeyFrame)->time, \ keyFrames->Get(nextKeyFrame)->time, \ - life) + life*animScaling) #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-06 03:41:34
|
Revision: 6138 http://planeshift.svn.sourceforge.net/planeshift/?rev=6138&view=rev Author: rlydontknow Date: 2010-08-06 03:41:28 +0000 (Fri, 06 Aug 2010) Log Message: ----------- added possibility to prevent scaling of effect object (set attribute "autoscale" of death node to false) Modified Paths: -------------- trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2010-08-06 03:21:08 UTC (rev 6137) +++ trunk/src/common/effects/pseffectobj.cpp 2010-08-06 03:41:28 UTC (rev 6138) @@ -266,6 +266,7 @@ killTime = -1; animScaling = 1; + autoScale = true; isAlive = true; birth = 0; @@ -315,13 +316,14 @@ if (dataNode) { killTime = dataNode->GetContentsValueAsInt(); + autoScale = dataNode->GetAttributeValueAsBool("autoscale", true); } else { csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Effect obj %s is missing a <death> tag. If you want an infinite effect use <death>none</death>\n", name.GetData()); return false; // effect is invalid without a death tag } - + // anchor dataNode = node->GetNode("attach"); if (dataNode) @@ -571,6 +573,8 @@ newObj->dir = dir; newObj->priority = priority; newObj->mixmode = mixmode; + newObj->autoScale = autoScale; + newObj->animScaling = animScaling; // the group of keyFrames remains static (don't clone) newObj->keyFrames = keyFrames; Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2010-08-06 03:21:08 UTC (rev 6137) +++ trunk/src/common/effects/pseffectobj.h 2010-08-06 03:41:28 UTC (rev 6138) @@ -279,8 +279,11 @@ void SetAnimationScaling(float s) { - killTime *= animScaling/s; - animScaling = s; + if (autoScale) + { + killTime *= animScaling/s; + animScaling = s; + } } /** Gets the name of this effect obj. @@ -348,6 +351,7 @@ csTicks life; csTicks animLength; float animScaling; + bool autoScale; // the effect anchor that this obj is attached to csString anchorName; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-08-07 17:29:23
|
Revision: 6146 http://planeshift.svn.sourceforge.net/planeshift/?rev=6146&view=rev Author: rlydontknow Date: 2010-08-07 17:29:17 +0000 (Sat, 07 Aug 2010) Log Message: ----------- changed the way animation scaling works all scaling is optional now and must be specified in the effect object you may specify a <scale /> node with any of the following attributes set to true to enable scaling: death, birth, frames, loop note that frames and loop are mutually exclusive (frames takes preceedence over loop) frames streches the animation over the full time (e.g. useful for casting effects) loop repeats the animation over the full time (e.g. useful for buffs like defensive wind) Modified Paths: -------------- trunk/src/common/effects/pseffect.cpp trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h Modified: trunk/src/common/effects/pseffect.cpp =================================================================== --- trunk/src/common/effects/pseffect.cpp 2010-08-07 12:22:13 UTC (rev 6145) +++ trunk/src/common/effects/pseffect.cpp 2010-08-07 17:29:17 UTC (rev 6146) @@ -601,17 +601,10 @@ void psEffect::SetKillTime(const int newKillTime) { - int oldKillTime = GetKillTime(); + float scaling = (float)newKillTime/(float)GetKillTime(); for(size_t a = 0; a < effectObjs.GetSize(); ++a) { - if(effectObjs[a]->GetKillTime() <= 0) - { - effectObjs[a]->SetKillTime(newKillTime); - } - else - { - effectObjs[a]->SetAnimationScaling((float)oldKillTime/newKillTime); - } + effectObjs[a]->SetAnimationScaling(scaling); } } Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2010-08-07 12:22:13 UTC (rev 6145) +++ trunk/src/common/effects/pseffectobj.cpp 2010-08-07 17:29:17 UTC (rev 6146) @@ -266,7 +266,7 @@ killTime = -1; animScaling = 1; - autoScale = true; + autoScale = SCALING_NONE; isAlive = true; birth = 0; @@ -316,7 +316,6 @@ if (dataNode) { killTime = dataNode->GetContentsValueAsInt(); - autoScale = dataNode->GetAttributeValueAsBool("autoscale", true); } else { @@ -324,6 +323,20 @@ return false; // effect is invalid without a death tag } + // time scaling + dataNode = node->GetNode("scale"); + if (dataNode) + { + if(dataNode->GetAttributeValueAsBool("death")) + autoScale |= SCALING_DEATH; + if(dataNode->GetAttributeValueAsBool("birth")) + autoScale |= SCALING_BIRTH; + if(dataNode->GetAttributeValueAsBool("frames")) + autoScale |= SCALING_FRAMES; + else if(dataNode->GetAttributeValueAsBool("loop")) + autoScale |= SCALING_LOOP; + } + // anchor dataNode = node->GetNode("attach"); if (dataNode) @@ -421,6 +434,18 @@ return true; } +void psEffectObj::SetAnimationScaling(float s) +{ + if (autoScale & SCALING_DEATH) + killTime *= s; + + if (autoScale & SCALING_BIRTH) + birth *= s; + + animScaling = s; +} + + bool psEffectObj::Render(const csVector3 &up) { return false; @@ -458,7 +483,7 @@ isAlive |= (life >= birth); - if (isAlive && anchorMesh && anchor->IsReady()) + if (isAlive) { meshMovable->SetSector(anchorMovable->GetSectors()->Get(0)); meshMovable->SetPosition(anchorPosition); @@ -609,8 +634,15 @@ size_t psEffectObj::FindKeyFrameByTime(csTicks time) const { - time *= animScaling; - time %= animLength; + if (autoScale & SCALING_FRAMES) + { + time /= animScaling; + } + else if (autoScale & SCALING_LOOP) + { + time %= animLength; + } + for ( size_t a = keyFrames->GetSize(); a > 0; --a) { if (keyFrames->Get(a-1)->time < time) Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2010-08-07 12:22:13 UTC (rev 6145) +++ trunk/src/common/effects/pseffectobj.h 2010-08-07 17:29:17 UTC (rev 6146) @@ -277,14 +277,7 @@ */ float GetAnimLength() const { return animLength; } - void SetAnimationScaling(float s) - { - if (autoScale) - { - killTime *= animScaling/s; - animScaling = s; - } - } + void SetAnimationScaling(float s); /** Gets the name of this effect obj. * @return the name of this effect obj. @@ -318,6 +311,15 @@ protected: + enum SCALING_TYPE + { + SCALING_NONE = 0, + SCALING_BIRTH = 1, + SCALING_DEATH = 2, + SCALING_FRAMES = 4, + SCALING_LOOP = 8 + }; + /** finds the index of the keyFrame at the specified time * @param time the time to lookup * @return the index of the keyFrame at the specified time @@ -351,7 +353,7 @@ csTicks life; csTicks animLength; float animScaling; - bool autoScale; + int autoScale; // the effect anchor that this obj is attached to csString anchorName; @@ -430,6 +432,15 @@ } else { + if (autoScale & SCALING_FRAMES) + { + t /= animScaling; + } + else if (autoScale & SCALING_LOOP) + { + t %= animLength; + } + return ((float)(t-t1)/(float)(t2-t1)); } } @@ -448,6 +459,6 @@ #define LERP_FACTOR \ lerpFactor(keyFrames->Get(currKeyFrame)->time, \ keyFrames->Get(nextKeyFrame)->time, \ - life*animScaling) + life) #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rly...@us...> - 2010-12-25 23:40:25
|
Revision: 6595 http://planeshift.svn.sourceforge.net/planeshift/?rev=6595&view=rev Author: rlydontknow Date: 2010-12-25 23:40:19 +0000 (Sat, 25 Dec 2010) Log Message: ----------- added back accidently removed loading factories from libraries specified in the effect Modified Paths: -------------- trunk/src/common/effects/pseffectobjmesh.cpp trunk/src/common/effects/pseffectobjmesh.h Modified: trunk/src/common/effects/pseffectobjmesh.cpp =================================================================== --- trunk/src/common/effects/pseffectobjmesh.cpp 2010-12-25 20:09:28 UTC (rev 6594) +++ trunk/src/common/effects/pseffectobjmesh.cpp 2010-12-25 23:40:19 UTC (rev 6595) @@ -40,7 +40,7 @@ #include "util/log.h" psEffectObjMesh::psEffectObjMesh(iView * parentView, psEffect2DRenderer * renderer2d) - :psEffectObj(parentView, renderer2d) + : psEffectObj(parentView, renderer2d), usedBgLoader(false) { } @@ -198,8 +198,13 @@ csRef<iBgLoader> loader = csQueryRegistry<iBgLoader>(psCSSetup::object_reg); meshFact = loader->LoadFactory(factName, &failed, true); - if (!meshFact) + if(failed) { + meshFact = ldr_context->FindMeshFactory(factName); + } + + if (!meshFact.IsValid()) + { csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Couldn't find mesh factory %s in effect %s\n", factName.GetData(), name.GetData()); return false; } Modified: trunk/src/common/effects/pseffectobjmesh.h =================================================================== --- trunk/src/common/effects/pseffectobjmesh.h 2010-12-25 20:09:28 UTC (rev 6594) +++ trunk/src/common/effects/pseffectobjmesh.h 2010-12-25 23:40:19 UTC (rev 6595) @@ -46,6 +46,7 @@ bool PostSetup(iLoaderContext * ldr_context); csString factName; + bool usedBgLoader; csRef<iSprite3DState> sprState; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wel...@us...> - 2011-02-09 08:26:57
|
Revision: 6899 http://planeshift.svn.sourceforge.net/planeshift/?rev=6899&view=rev Author: weltall2 Date: 2011-02-09 08:26:51 +0000 (Wed, 09 Feb 2011) Log Message: ----------- fixed effect library for last cs Modified Paths: -------------- trunk/src/common/effects/pseffectobjquad.h trunk/src/common/effects/pseffectobjspire.h trunk/src/common/effects/pseffectobjstar.h trunk/src/common/effects/pseffectobjtrail.h Modified: trunk/src/common/effects/pseffectobjquad.h =================================================================== --- trunk/src/common/effects/pseffectobjquad.h 2011-02-09 08:20:21 UTC (rev 6898) +++ trunk/src/common/effects/pseffectobjquad.h 2011-02-09 08:26:51 UTC (rev 6899) @@ -54,7 +54,11 @@ bool AnimatesTexels() const { return true; } bool AnimatesNormals() const { return false; } bool AnimatesColors() const { return false; } + bool AnimatesBBoxRadius () const { return false; } + const csBox3& UpdateBoundingBox (csTicks /*current*/, uint32 /*version_id*/, const csBox3& bbox) { return bbox; } + const float UpdateRadius (csTicks /*current*/, uint32 /*version_id*/, const float radius) { return radius; } + const csBox3* UpdateBoundingBoxes (csTicks /*current*/, uint32 /*version_id*/) { return nullptr; } const csVector3* UpdateVertices(csTicks current, const csVector3* verts, int num_verts, uint32 version_id); const csVector2* UpdateTexels(csTicks current, const csVector2* texels, int num_texels, uint32 version_id); const csVector3* UpdateNormals(csTicks /*current*/, const csVector3* normals, int /*num_normals*/, Modified: trunk/src/common/effects/pseffectobjspire.h =================================================================== --- trunk/src/common/effects/pseffectobjspire.h 2011-02-09 08:20:21 UTC (rev 6898) +++ trunk/src/common/effects/pseffectobjspire.h 2011-02-09 08:26:51 UTC (rev 6899) @@ -53,8 +53,11 @@ bool AnimatesTexels() const { return true; } bool AnimatesNormals() const { return false; } bool AnimatesColors()const { return true; } - - + bool AnimatesBBoxRadius () const { return false; } + + const csBox3& UpdateBoundingBox (csTicks /*current*/, uint32 /*version_id*/, const csBox3& bbox) { return bbox; } + const float UpdateRadius (csTicks /*current*/, uint32 /*version_id*/, const float radius) { return radius; } + const csBox3* UpdateBoundingBoxes (csTicks /*current*/, uint32 /*version_id*/) { return nullptr; } const csVector3* UpdateVertices(csTicks current, const csVector3* verts, int num_verts, uint32 version_id); const csVector2* UpdateTexels(csTicks current, const csVector2* texels, int num_texels, uint32 version_id); const csVector3* UpdateNormals(csTicks /*current*/, const csVector3* normals, Modified: trunk/src/common/effects/pseffectobjstar.h =================================================================== --- trunk/src/common/effects/pseffectobjstar.h 2011-02-09 08:20:21 UTC (rev 6898) +++ trunk/src/common/effects/pseffectobjstar.h 2011-02-09 08:26:51 UTC (rev 6899) @@ -39,6 +39,7 @@ bool AnimatesTexels() const { return false; } bool AnimatesNormals() const { return false; } bool AnimatesColors()const { return true; } + bool AnimatesBBoxRadius () const { return false; } MeshAnimControl ( psEffectObjStar* parent ) : scfImplementationType (this) { @@ -53,6 +54,9 @@ { } + const csBox3& UpdateBoundingBox (csTicks /*current*/, uint32 /*version_id*/, const csBox3& bbox) { return bbox; } + const float UpdateRadius (csTicks /*current*/, uint32 /*version_id*/, const float radius) { return radius; } + const csBox3* UpdateBoundingBoxes (csTicks /*current*/, uint32 /*version_id*/) { return nullptr; } const csVector3* UpdateVertices(csTicks current, const csVector3* verts, int num_verts, uint32 version_id); const csVector2* UpdateTexels(csTicks /*current*/, const csVector2* texels, int /*num_texels*/, uint32 /*version_id*/) Modified: trunk/src/common/effects/pseffectobjtrail.h =================================================================== --- trunk/src/common/effects/pseffectobjtrail.h 2011-02-09 08:20:21 UTC (rev 6898) +++ trunk/src/common/effects/pseffectobjtrail.h 2011-02-09 08:26:51 UTC (rev 6899) @@ -40,7 +40,8 @@ bool AnimatesTexels() const { return false; } bool AnimatesNormals() const { return false; } bool AnimatesColors()const { return true; } - + bool AnimatesBBoxRadius () const { return false; } + MeshAnimControl ( psEffectObjTrail* parent ) : scfImplementationType (this) { this->parent = parent; @@ -54,6 +55,9 @@ { } + const csBox3& UpdateBoundingBox (csTicks /*current*/, uint32 /*version_id*/, const csBox3& bbox) { return bbox; } + const float UpdateRadius (csTicks /*current*/, uint32 /*version_id*/, const float radius) { return radius; } + const csBox3* UpdateBoundingBoxes (csTicks /*current*/, uint32 /*version_id*/) { return nullptr; } const csVector3* UpdateVertices(csTicks current, const csVector3* verts, int num_verts, uint32 version_id); const csVector2* UpdateTexels(csTicks /*current*/, const csVector2* texels, int /*num_texels*/, uint32 /*version_id*/) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wha...@us...> - 2011-10-17 21:38:13
|
Revision: 7678 http://planeshift.svn.sourceforge.net/planeshift/?rev=7678&view=rev Author: whacko88 Date: 2011-10-17 21:38:07 +0000 (Mon, 17 Oct 2011) Log Message: ----------- Fixed distance bug for effect object sounds Modified Paths: -------------- trunk/src/common/effects/pseffectobjsound.cpp trunk/src/common/effects/pseffectobjsound.h Modified: trunk/src/common/effects/pseffectobjsound.cpp =================================================================== --- trunk/src/common/effects/pseffectobjsound.cpp 2011-10-17 10:22:39 UTC (rev 7677) +++ trunk/src/common/effects/pseffectobjsound.cpp 2011-10-17 21:38:07 UTC (rev 7678) @@ -72,8 +72,8 @@ // get the attributes name.Clear(); soundName.Clear(); - minDistSquared = 25.0f; - maxDistSquared = 100000.0f; + minDist = 25.0f; + maxDist = 100000.0f; loop = true; csRef<iDocumentAttributeIterator> attribIter = node->GetAttributes(); while (attribIter->HasNext()) @@ -99,18 +99,16 @@ // min distance dataNode = node->GetNode("mindist"); - if (dataNode) + if(dataNode) { - minDistSquared = dataNode->GetContentsValueAsFloat(); - minDistSquared *= minDistSquared; + minDist = dataNode->GetContentsValueAsFloat(); } // max distance dataNode = node->GetNode("maxdist"); - if (dataNode) + if(dataNode) { - maxDistSquared = dataNode->GetContentsValueAsFloat(); - maxDistSquared *= maxDistSquared; + maxDist = dataNode->GetContentsValueAsFloat(); } if (name.IsEmpty()) @@ -165,7 +163,7 @@ iSoundControl* effectSndCtrl = soundManager->GetSndCtrl(iSoundManager::EFFECT_SNDCTRL); soundID = soundManager->PlaySound(soundName, true, effectSndCtrl, - csVector3(0,0,0), csVector3(0,0,0), minDistSquared, maxDistSquared); + csVector3(0,0,0), csVector3(0,0,0), minDist, maxDist); } csVector3 soundPos = anchorMesh->GetMovable()->GetPosition(); @@ -193,8 +191,8 @@ // simp mesh specific newObj->soundName = soundName; - newObj->minDistSquared = minDistSquared; - newObj->maxDistSquared = maxDistSquared; + newObj->minDist = minDist; + newObj->maxDist = maxDist; newObj->loop = loop; Modified: trunk/src/common/effects/pseffectobjsound.h =================================================================== --- trunk/src/common/effects/pseffectobjsound.h 2011-10-17 10:22:39 UTC (rev 7677) +++ trunk/src/common/effects/pseffectobjsound.h 2011-10-17 21:38:07 UTC (rev 7678) @@ -51,8 +51,8 @@ csString soundName; uint soundID; - float minDistSquared; - float maxDistSquared; + float minDist; + float maxDist; csString effectID; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wha...@us...> - 2011-11-24 01:06:27
|
Revision: 7753 http://planeshift.svn.sourceforge.net/planeshift/?rev=7753&view=rev Author: whacko88 Date: 2011-11-24 01:06:21 +0000 (Thu, 24 Nov 2011) Log Message: ----------- don't play again a pseffect sound that is not looping and that has been already played Modified Paths: -------------- trunk/src/common/effects/pseffectobjsound.cpp trunk/src/common/effects/pseffectobjsound.h Modified: trunk/src/common/effects/pseffectobjsound.cpp =================================================================== --- trunk/src/common/effects/pseffectobjsound.cpp 2011-11-23 20:39:03 UTC (rev 7752) +++ trunk/src/common/effects/pseffectobjsound.cpp 2011-11-24 01:06:21 UTC (rev 7753) @@ -56,6 +56,7 @@ } soundID = 0; + playedOnce = false; } psEffectObjSound::~psEffectObjSound() @@ -178,13 +179,17 @@ // playing sound if (!isAlive && life >= birth) { - iSoundControl* effectSndCtrl = soundManager->GetSndCtrl(iSoundManager::EFFECT_SNDCTRL); - soundID = soundManager->PlaySound(soundName, loop, effectSndCtrl, - soundPos, csVector3(0,0,0), minDist, maxDist); + if(loop || !playedOnce) + { + iSoundControl* effectSndCtrl = soundManager->GetSndCtrl(iSoundManager::EFFECT_SNDCTRL); + soundID = soundManager->PlaySound(soundName, loop, effectSndCtrl, + soundPos, csVector3(0,0,0), minDist, maxDist); - if(soundID != 0) // sound not played - { - isAlive = true; + if(soundID != 0) // sound not played + { + isAlive = true; + playedOnce = true; + } } } Modified: trunk/src/common/effects/pseffectobjsound.h =================================================================== --- trunk/src/common/effects/pseffectobjsound.h 2011-11-23 20:39:03 UTC (rev 7752) +++ trunk/src/common/effects/pseffectobjsound.h 2011-11-24 01:06:21 UTC (rev 7753) @@ -58,7 +58,7 @@ float volumeMultiplier; bool loop; - + bool playedOnce; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2013-08-09 08:44:25
|
Revision: 8750 http://sourceforge.net/p/planeshift/code/8750 Author: lpancallo Date: 2013-08-09 08:44:22 +0000 (Fri, 09 Aug 2013) Log Message: ----------- valgrind memory leaks fixes by Ralph Campbell. #6051 Modified Paths: -------------- trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h Modified: trunk/src/common/effects/pseffectobj.cpp =================================================================== --- trunk/src/common/effects/pseffectobj.cpp 2013-08-09 08:42:26 UTC (rev 8749) +++ trunk/src/common/effects/pseffectobj.cpp 2013-08-09 08:44:22 UTC (rev 8750) @@ -315,14 +315,15 @@ keyFrames.DeleteAll(); } -psEffectObjKeyFrameGroup* psEffectObjKeyFrameGroup::Clone() const +csPtr<psEffectObjKeyFrameGroup> psEffectObjKeyFrameGroup::Clone() const //ticket 6051 { - psEffectObjKeyFrameGroup* clone = new psEffectObjKeyFrameGroup(); + csRef<psEffectObjKeyFrameGroup> clone; //ticket 6051 + clone.AttachNew(new psEffectObjKeyFrameGroup()); //ticket 6051 for (size_t i = 0; i < keyFrames.GetSize(); i++) { clone->Push(new psEffectObjKeyFrame(keyFrames[i])); } - return clone; + return csPtr<psEffectObjKeyFrameGroup> (clone); //ticket 6051 } bool psEffectObjKeyFrameGroup::SetFrameParamScalings(const float* scale) Modified: trunk/src/common/effects/pseffectobj.h =================================================================== --- trunk/src/common/effects/pseffectobj.h 2013-08-09 08:42:26 UTC (rev 8749) +++ trunk/src/common/effects/pseffectobj.h 2013-08-09 08:44:22 UTC (rev 8750) @@ -175,7 +175,7 @@ /** * Clones the key frame group object. */ - psEffectObjKeyFrameGroup* Clone() const; + csPtr<psEffectObjKeyFrameGroup> Clone() const; //ticket 6051 /** * Adjust each parameter in each frame that have the use_scale This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2013-12-09 12:04:22
|
Revision: 9068 http://sourceforge.net/p/planeshift/code/9068 Author: lpancallo Date: 2013-12-09 12:04:16 +0000 (Mon, 09 Dec 2013) Log Message: ----------- Code formatting. Modified Paths: -------------- trunk/src/common/effects/pseffect.cpp trunk/src/common/effects/pseffect.h trunk/src/common/effects/pseffect2drenderer.cpp trunk/src/common/effects/pseffect2drenderer.h trunk/src/common/effects/pseffectanchor.cpp trunk/src/common/effects/pseffectanchor.h trunk/src/common/effects/pseffectanchorbasic.cpp trunk/src/common/effects/pseffectanchorbasic.h trunk/src/common/effects/pseffectanchorsocket.cpp trunk/src/common/effects/pseffectanchorsocket.h trunk/src/common/effects/pseffectanchorspline.cpp trunk/src/common/effects/pseffectanchorspline.h trunk/src/common/effects/pseffectlight.cpp trunk/src/common/effects/pseffectlight.h trunk/src/common/effects/pseffectmanager.cpp trunk/src/common/effects/pseffectmanager.h trunk/src/common/effects/pseffectobj.cpp trunk/src/common/effects/pseffectobj.h trunk/src/common/effects/pseffectobjdecal.cpp trunk/src/common/effects/pseffectobjdecal.h trunk/src/common/effects/pseffectobjlabel.cpp trunk/src/common/effects/pseffectobjlabel.h trunk/src/common/effects/pseffectobjlight.cpp trunk/src/common/effects/pseffectobjmesh.cpp trunk/src/common/effects/pseffectobjmesh.h trunk/src/common/effects/pseffectobjparticles.cpp trunk/src/common/effects/pseffectobjparticles.h trunk/src/common/effects/pseffectobjquad.cpp trunk/src/common/effects/pseffectobjquad.h trunk/src/common/effects/pseffectobjsimpmesh.cpp trunk/src/common/effects/pseffectobjsimpmesh.h trunk/src/common/effects/pseffectobjsound.cpp trunk/src/common/effects/pseffectobjsound.h trunk/src/common/effects/pseffectobjspire.cpp trunk/src/common/effects/pseffectobjspire.h trunk/src/common/effects/pseffectobjstar.cpp trunk/src/common/effects/pseffectobjstar.h trunk/src/common/effects/pseffectobjtext.cpp trunk/src/common/effects/pseffectobjtext.h trunk/src/common/effects/pseffectobjtext2d.cpp trunk/src/common/effects/pseffectobjtext2d.h trunk/src/common/effects/pseffectobjtextable.h trunk/src/common/effects/pseffectobjtrail.cpp trunk/src/common/effects/pseffectobjtrail.h Modified: trunk/src/common/effects/pseffect.cpp =================================================================== --- trunk/src/common/effects/pseffect.cpp 2013-12-08 23:17:03 UTC (rev 9067) +++ trunk/src/common/effects/pseffect.cpp 2013-12-09 12:04:16 UTC (rev 9068) @@ -69,41 +69,41 @@ effectObjs.DeleteAll(); } -psEffectAnchor * psEffect::CreateAnchor(const csString & type) +psEffectAnchor* psEffect::CreateAnchor(const csString &type) { - if (type == "basic") + if(type == "basic") return new psEffectAnchorBasic(); - else if (type == "spline") + else if(type == "spline") return new psEffectAnchorSpline(); - else if (type == "socket") + else if(type == "socket") return new psEffectAnchorSocket(); - + csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Unknown anchor type: %s\n", type.GetData()); return 0; } -size_t psEffect::AddAnchor(psEffectAnchor * anchor) +size_t psEffect::AddAnchor(psEffectAnchor* anchor) { effectAnchors.Push(anchor); return effectAnchors.GetSize()-1; } -bool psEffect::Load(iDocumentNode * node, iView * parentView, psEffect2DRenderer * renderer2d, iLoaderContext * ldr_context) +bool psEffect::Load(iDocumentNode* node, iView* parentView, psEffect2DRenderer* renderer2d, iLoaderContext* ldr_context) { csRef<iDocumentNodeIterator> xmlbinds; - + // get the attributes name.Clear(); csRef<iDocumentAttributeIterator> attribIter = node->GetAttributes(); - while (attribIter->HasNext()) + while(attribIter->HasNext()) { csRef<iDocumentAttribute> attr = attribIter->Next(); csString attrName = attr->GetName(); attrName.Downcase(); - if (attrName == "name") + if(attrName == "name") name = attr->GetValue(); } - if (name.IsEmpty()) + if(name.IsEmpty()) { csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Attempting to create an effect with no name.\n"); return false; @@ -112,17 +112,17 @@ // anchors xmlbinds = node->GetNodes("anchor"); csRef<iDocumentNode> anchorNode; - while (xmlbinds->HasNext()) + while(xmlbinds->HasNext()) { anchorNode = xmlbinds->Next(); - psEffectAnchor * anchor = 0; + psEffectAnchor* anchor = 0; // create a anchor from the given type string anchor = CreateAnchor(anchorNode->GetAttributeValue("type")); - if (anchor) + if(anchor) { - if (anchor->Load(anchorNode)) + if(anchor->Load(anchorNode)) AddAnchor(anchor); else { @@ -138,84 +138,84 @@ // objs xmlbinds = node->GetNodes("obj"); csRef<iDocumentNode> objNode; - while (xmlbinds->HasNext()) + while(xmlbinds->HasNext()) { objNode = xmlbinds->Next(); - psEffectObj *obj = 0; + psEffectObj* obj = 0; csString type = objNode->GetAttributeValue("type"); type.Downcase(); - if (type == "quad") + if(type == "quad") { obj = new psEffectObjQuad(parentView, renderer2d); } - else if (type == "spire") + else if(type == "spire") { obj = new psEffectObjSpire(parentView, renderer2d); } - else if (type == "mesh") + else if(type == "mesh") { obj = new psEffectObjMesh(parentView, renderer2d); } - else if (type == "simpmesh") + else if(type == "simpmesh") { obj = new psEffectObjSimpMesh(parentView, renderer2d); } - else if (type == "particles") + else if(type == "particles") { obj = new psEffectObjParticles(parentView, renderer2d); } - else if (type == "sound") + else if(type == "sound") { obj = new psEffectObjSound(parentView, renderer2d); } - else if (type == "star") + else if(type == "star") { obj = new psEffectObjStar(parentView, renderer2d); } - else if (type == "text") + else if(type == "text") { obj = new psEffectObjText(parentView, renderer2d); } - else if (type == "label") + else if(type == "label") { obj = new psEffectObjLabel(parentView, renderer2d); } - else if (type == "trail") + else if(type == "trail") { obj = new psEffectObjTrail(parentView, renderer2d); } #ifdef PS_EFFECT_ENABLE_DECAL - else if (type == "decal") + else if(type == "decal") { obj = new psEffectObjDecal(parentView, renderer2d); #endif // PS_EFFECT_ENABLE_DECAL } - else if (type == "text2d") + else if(type == "text2d") { obj = new psEffectObjText2D(parentView, renderer2d); } - else if (type == "light") + else if(type == "light") { obj = new psEffectObjLight(parentView, renderer2d); } - - if (obj) + + if(obj) { - if (obj->Load(objNode, ldr_context)) + if(obj->Load(objNode, ldr_context)) { effectObjs.Push(obj); - if (mainTextObj == (size_t)(-1)) + if(mainTextObj == (size_t)(-1)) { - psEffectObjTextable * textObj = dynamic_cast<psEffectObjTextable *>(obj); - if (textObj) + psEffectObjTextable* textObj = dynamic_cast<psEffectObjTextable*>(obj); + if(textObj) mainTextObj = effectObjs.GetSize()-1; } } else { - csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", + csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Problem with an effect obj in: %s/%s\n", type.GetData(), name.GetData()); delete obj; @@ -231,20 +231,20 @@ return true; } -unsigned int psEffect::Render(iSectorList * sectors, const csVector3 & offset, iMeshWrapper * attachPos, - iMeshWrapper * attachTarget, const csVector3 & up, const unsigned int uniqueIDOverride, +unsigned int psEffect::Render(iSectorList* sectors, const csVector3 &offset, iMeshWrapper* attachPos, + iMeshWrapper* attachTarget, const csVector3 &up, const unsigned int uniqueIDOverride, bool rotateWithMesh) { bool hasSuccess = false; - if (!sectors) + if(!sectors) return false; // no sectorlist - if (sectors->GetCount() == 0) + if(sectors->GetCount() == 0) return false; // no sectors // create a listener for the attached position if it exists - if (attachPos) + if(attachPos) { positionListener.AttachNew(new psEffectMovableListener); attachPos->GetMovable()->AddListener(positionListener); @@ -252,7 +252,7 @@ } // create a listener for the attached target if it exists - if (attachTarget) + if(attachTarget) { targetListener.AttachNew(new psEffectMovableListener); attachTarget->GetMovable()->AddListener(targetListener); @@ -260,8 +260,9 @@ } // build a rotation matrix that points from the position to the target - csMatrix3 rotBase; rotBase.Identity(); - if (attachPos && attachTarget) + csMatrix3 rotBase; + rotBase.Identity(); + if(attachPos && attachTarget) { // make the base angle point towards the target csVector3 diff = attachPos->GetMovable()->GetFullPosition() - attachTarget->GetMovable()->GetFullPosition(); @@ -271,105 +272,106 @@ //rotBase = csYRotMatrix3(3.14159f - atan2(-diff.x, -diff.z)); } - // For absolute positioning (not attached to a position mesh), the offset is actually the base pos and not an + // For absolute positioning (not attached to a position mesh), the offset is actually the base pos and not an // offset at all. This code ensures that the offset is 0,0,0 and basepos is the offset for such a case. csVector3 usedOffset = offset; - if (!attachPos) + if(!attachPos) usedOffset = csVector3(0,0,0); - + // the base position is either the offset (absolute position) or the attached mesh if it exists. csVector3 newPos = offset; - csMatrix3 posTransf; posTransf.Identity(); - if (attachPos) + csMatrix3 posTransf; + posTransf.Identity(); + if(attachPos) { newPos = attachPos->GetMovable()->GetFullPosition(); posTransf = attachPos->GetMovable()->GetFullTransform().GetT2O(); } - + csMatrix3 targetTransf = posTransf; - if (attachTarget) + if(attachTarget) targetTransf = attachTarget->GetMovable()->GetFullTransform().GetT2O(); - + // effect anchors - for (size_t i=0; i<effectAnchors.GetSize(); ++i) + for(size_t i=0; i<effectAnchors.GetSize(); ++i) { - if (effectAnchors[i]->Create(usedOffset, attachPos, rotateWithMesh)) + if(effectAnchors[i]->Create(usedOffset, attachPos, rotateWithMesh)) { hasSuccess = true; effectAnchors[i]->SetPosition(newPos, sectors, posTransf); - + // target of the anchor is either the given target if it exists or the position - if (attachTarget) + if(attachTarget) effectAnchors[i]->SetTarget(attachTarget->GetMovable()->GetFullPosition(), targetTransf); else effectAnchors[i]->SetTarget(newPos, posTransf); // if we're attached to both a position and target then orient the anchor - if (attachPos && attachTarget) + if(attachPos && attachTarget) effectAnchors[i]->SetRotBase(rotBase); } } // effect objs - for (size_t i=0; i<effectObjs.GetSize(); ++i) + for(size_t i=0; i<effectObjs.GetSize(); ++i) { - if (effectObjs[i]->Render(up)) + if(effectObjs[i]->Render(up)) { hasSuccess = true; - - psEffectAnchor * anchor = FindAnchor(effectObjs[i]->GetAnchorName()); - if (!anchor) + + psEffectAnchor* anchor = FindAnchor(effectObjs[i]->GetAnchorName()); + if(!anchor) { - csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", - "Couldn't find effect anchor: %s, in: %s\n", - effectObjs[i]->GetAnchorName().GetData(), name.GetData()); + csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", + "Couldn't find effect anchor: %s, in: %s\n", + effectObjs[i]->GetAnchorName().GetData(), name.GetData()); } else { - if (!effectObjs[i]->AttachToAnchor(anchor)) + if(!effectObjs[i]->AttachToAnchor(anchor)) { csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_WARNING, "planeshift_effects", - "Couldn't attach obj to %s in %s\n", - effectObjs[i]->GetAnchorName().GetData(), name.GetData()); + "Couldn't attach obj to %s in %s\n", + effectObjs[i]->GetAnchorName().GetData(), name.GetData()); } } - + // update the position of this obj - if (attachPos) + if(attachPos) { effectObjs[i]->SetPosition(posTransf); - if (!targetListener) + if(!targetListener) effectObjs[i]->SetTarget(posTransf); } // update the target of this obj - if (attachTarget) + if(attachTarget) effectObjs[i]->SetTarget(targetTransf); // if we're attached to both a position and target then orient the anchor - if (attachPos && attachTarget) + if(attachPos && attachTarget) effectObjs[i]->SetRotBase(rotBase); } } - if (!hasSuccess) + if(!hasSuccess) return 0; uniqueID = (uniqueIDOverride > 0 ? uniqueIDOverride : ++genUniqueID); return uniqueID; } -unsigned int psEffect::Render(iSector * sector, const csVector3 & offset, iMeshWrapper * attachPos, - iMeshWrapper * attachTarget, const csVector3 & up, const unsigned int uniqueIDOverride) +unsigned int psEffect::Render(iSector* sector, const csVector3 &offset, iMeshWrapper* attachPos, + iMeshWrapper* attachTarget, const csVector3 &up, const unsigned int uniqueIDOverride) { bool hasSuccess = false; - if (!sector) + if(!sector) return false; // no sector // create a listener for the attached position if it exists - if (attachPos) + if(attachPos) { positionListener.AttachNew(new psEffectMovableListener); attachPos->GetMovable()->AddListener(positionListener); @@ -377,7 +379,7 @@ } // create a listener for the attached target if it exists - if (attachTarget) + if(attachTarget) { targetListener.AttachNew(new psEffectMovableListener); attachTarget->GetMovable()->AddListener(targetListener); @@ -385,8 +387,9 @@ } // build a rotation matrix that points from the position to the target - csMatrix3 rotBase; rotBase.Identity(); - if (attachPos && attachTarget) + csMatrix3 rotBase; + rotBase.Identity(); + if(attachPos && attachTarget) { // make the base angle point towards the target csVector3 diff = attachPos->GetMovable()->GetFullPosition() - attachTarget->GetMovable()->GetFullPosition(); @@ -396,64 +399,65 @@ //rotBase = csYRotMatrix3(3.14159f - atan2(-diff.x, -diff.z)); } - // For absolute positioning (not attached to a position mesh), the offset is actually the base pos and not an + // For absolute positioning (not attached to a position mesh), the offset is actually the base pos and not an // offset at all. This code ensures that the offset is 0,0,0 and basepos is the offset for such a case. csVector3 usedOffset = offset; - if (!attachPos) + if(!attachPos) usedOffset = csVector3(0,0,0); - + // the base position is either the offset (absolute position) or the attached mesh if it exists. csVector3 newPos = offset; - csMatrix3 posTransf; posTransf.Identity(); - if (attachPos) + csMatrix3 posTransf; + posTransf.Identity(); + if(attachPos) { newPos = attachPos->GetMovable()->GetFullPosition(); posTransf = attachPos->GetMovable()->GetFullTransform().GetT2O(); } - + csMatrix3 targetTransf = posTransf; - if (attachTarget) + if(attachTarget) targetTransf = attachTarget->GetMovable()->GetFullTransform().GetT2O(); - + // effect anchors - for (size_t i=0; i<effectAnchors.GetSize(); ++i) + for(size_t i=0; i<effectAnchors.GetSize(); ++i) { - if (effectAnchors[i]->Create(usedOffset, attachPos)) + if(effectAnchors[i]->Create(usedOffset, attachPos)) { hasSuccess = true; effectAnchors[i]->SetPosition(newPos, sector, posTransf); - + // target of the anchor is either the given target if it exists or the position - if (attachTarget) + if(attachTarget) effectAnchors[i]->SetTarget(attachTarget->GetMovable()->GetFullPosition(), targetTransf); else effectAnchors[i]->SetTarget(newPos, posTransf); // if we're attached to both a position and target then orient the anchor - if (attachPos && attachTarget) + if(attachPos && attachTarget) effectAnchors[i]->SetRotBase(rotBase); } } // effect objs - for (size_t i=0; i<effectObjs.GetSize(); ++i) + for(size_t i=0; i<effectObjs.GetSize(); ++i) { - if (effectObjs[i]->Render(up)) + if(effectObjs[i]->Render(up)) { hasSuccess = true; - - psEffectAnchor * anchor = FindAnchor(effectObjs[i]->GetAnchorName()); - if (!anchor) + + psEffectAnchor* anchor = FindAnchor(effectObjs[i]->GetAnchorName()); + if(!anchor) { csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", - "Couldn't find effect anchor: %s, in: %s\n", + "Couldn't find effect anchor: %s, in: %s\n", effectObjs[i]->GetAnchorName().GetData(), name.GetData()); } else { - if (!effectObjs[i]->AttachToAnchor(anchor)) + if(!effectObjs[i]->AttachToAnchor(anchor)) { csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_WARNING, "planeshift_effects", "Couldn't attach obj to %s in %s\n", @@ -462,25 +466,25 @@ } // update the position of this obj - if (attachPos) + if(attachPos) { effectObjs[i]->SetPosition(posTransf); - if (!targetListener) + if(!targetListener) effectObjs[i]->SetTarget(posTransf); } // update the target of this obj - if (attachTarget) + if(attachTarget) effectObjs[i]->SetTarget(targetTransf); - + // if we're attached to both a position and target then orient the anchor - if (attachPos && attachTarget) + if(attachPos && attachTarget) effectObjs[i]->SetRotBase(rotBase); } } - if (!hasSuccess) + if(!hasSuccess) return 0; uniqueID = (uniqueIDOverride > 0 ? uniqueIDOverride : ++genUniqueID); @@ -491,46 +495,47 @@ { bool updatePos = false; bool updateTarget = false; - iSectorList * newSectors = NULL; + iSectorList* newSectors = NULL; csVector3 newPos; csVector3 newTarget; csMatrix3 newPosTransf; csMatrix3 newTargetTransf; - if (positionListener) + if(positionListener) { // if the attachMesh is gone, remove the effect - if (positionListener->IsMovableDead()) + if(positionListener->IsMovableDead()) return false; // if the attachMesh has moved, then flag a position update - if (positionListener->GrabNewData(newSectors, newPos, newPosTransf)) + if(positionListener->GrabNewData(newSectors, newPos, newPosTransf)) { - if (!newSectors) + if(!newSectors) return false; // no sector list - if (newSectors->GetCount() == 0) + if(newSectors->GetCount() == 0) return false; // not in any sector csString sector(newSectors->Get(0)->QueryObject()->GetName()); - if (sector.Compare("SectorWhereWeKeepEntitiesResidingInUnloadedMaps")) + if(sector.Compare("SectorWhereWeKeepEntitiesResidingInUnloadedMaps")) return true; // in a sector not loaded - + updatePos = true; } } - if (targetListener) + if(targetListener) { // if the targetMesh has moved, then flag a target update - if (targetListener->GrabNewData(newTarget, newTargetTransf)) + if(targetListener->GrabNewData(newTarget, newTargetTransf)) updateTarget = true; } - + // build a rotation matrix that points from the anchor to the target - csMatrix3 rotBase; rotBase.Identity(); - if (updatePos || updateTarget) + csMatrix3 rotBase; + rotBase.Identity(); + if(updatePos || updateTarget) { - if (targetListener && positionListener) + if(targetListener && positionListener) { // make the base angle point towards the target csVector3 diff = positionListener->GetPosition() - targetListener->GetPosition(); @@ -540,62 +545,62 @@ //rotBase = csYRotMatrix3(3.14159f - atan2(-diff.x, -diff.z)); } } - + // effect anchors - for ( size_t a = effectAnchors.GetSize(); a-- > 0; ) + for(size_t a = effectAnchors.GetSize(); a-- > 0;) { psEffectAnchor* anchor = effectAnchors[a]; - if (!anchor) + if(!anchor) continue; // update the position of this anchor - if (updatePos) + if(updatePos) { effectAnchors[a]->SetPosition(newPos, newSectors, newPosTransf); - if (!targetListener) + if(!targetListener) anchor->SetTarget(newPos, newPosTransf); } // update the target of this anchor - if (updateTarget) + if(updateTarget) anchor->SetTarget(newTarget, newTargetTransf); // update the direction/orientation of this anchor - if (updatePos || updateTarget) + if(updatePos || updateTarget) anchor->SetRotBase(rotBase); // update the actual anchor - if (!anchor->Update(elapsed)) + if(!anchor->Update(elapsed)) effectAnchors.DeleteIndex(a); // anchor has told us it doesn't want to live anymore } - + // effect objs - for ( size_t a = effectObjs.GetSize(); a-- > 0; ) + for(size_t a = effectObjs.GetSize(); a-- > 0;) { - if (!effectObjs[a]) + if(!effectObjs[a]) continue; // update the position of this obj - if (updatePos) + if(updatePos) { effectObjs[a]->SetPosition(newPosTransf); - if (!targetListener) + if(!targetListener) effectObjs[a]->SetTarget(newPosTransf); } // update the target of this obj - if (updateTarget) + if(updateTarget) effectObjs[a]->SetTarget(newTargetTransf); // update the orientation of the obj - if (updatePos || updateTarget) + if(updatePos || updateTarget) effectObjs[a]->SetRotBase(rotBase); // update the actual obj - if (!effectObjs[a]->Update(elapsed)) + if(!effectObjs[a]->Update(elapsed)) effectObjs.DeleteIndex(a); // obj has told us it doesn't want to live anymore } - + return (effectObjs.GetSize() != 0); } @@ -624,7 +629,7 @@ bool result = false; for(size_t a = 0; a < effectObjs.GetSize(); ++a) { - if (effectObjs[a]->SetFrameParamScalings(scale)) + if(effectObjs[a]->SetFrameParamScalings(scale)) { result = true; } @@ -632,15 +637,15 @@ return result; } -psEffect * psEffect::Clone() const +psEffect* psEffect::Clone() const { - psEffect * newEffect = new psEffect(); + psEffect* newEffect = new psEffect(); newEffect->name = name; - for (size_t a=0; a<effectAnchors.GetSize(); ++a) + for(size_t a=0; a<effectAnchors.GetSize(); ++a) newEffect->effectAnchors.Push(effectAnchors[a]->Clone()); - - for (size_t b=0; b<effectObjs.GetSize(); ++b) + + for(size_t b=0; b<effectObjs.GetSize(); ++b) newEffect->effectObjs.Push(effectObjs[b]->Clone()); newEffect->mainTextObj = mainTextObj; @@ -655,7 +660,7 @@ float psEffect::GetAnimLength() const { float ret = 0; - for (size_t a=0; a<effectObjs.GetSize(); ++a) + for(size_t a=0; a<effectObjs.GetSize(); ++a) ret = (effectObjs[a]->GetAnimLength() > ret ? effectObjs[a]->GetAnimLength() : ret); return ret; } @@ -665,7 +670,7 @@ return effectAnchors.GetSize(); } -psEffectAnchor * psEffect::GetAnchor(size_t idx) const +psEffectAnchor* psEffect::GetAnchor(size_t idx) const { return effectAnchors[idx]; } @@ -675,22 +680,22 @@ return effectObjs.GetSize(); } -psEffectObj * psEffect::GetObj(size_t idx) const +psEffectObj* psEffect::GetObj(size_t idx) const { return effectObjs[idx]; } -const csString & psEffect::GetName() const +const csString &psEffect::GetName() const { return name; } -psEffectObjTextable * psEffect::GetMainTextObj() const +psEffectObjTextable* psEffect::GetMainTextObj() const { - if (effectObjs.GetSize() <= mainTextObj) + if(effectObjs.GetSize() <= mainTextObj) return 0; - return dynamic_cast<psEffectObjTextable *>(effectObjs[mainTextObj]); + return dynamic_cast<psEffectObjTextable*>(effectObjs[mainTextObj]); } /* @@ -708,21 +713,21 @@ } */ -psEffectObj * psEffect::FindObj(const csString & objName) const +psEffectObj* psEffect::FindObj(const csString &objName) const { - for (size_t a=0; a<effectObjs.GetSize(); ++a) + for(size_t a=0; a<effectObjs.GetSize(); ++a) { - if (effectObjs[a]->GetName() == objName) + if(effectObjs[a]->GetName() == objName) return effectObjs[a]; } return 0; } -psEffectAnchor * psEffect::FindAnchor(const csString & anchorName) const +psEffectAnchor* psEffect::FindAnchor(const csString &anchorName) const { - for (size_t a=0; a<effectAnchors.GetSize(); ++a) + for(size_t a=0; a<effectAnchors.GetSize(); ++a) { - if (effectAnchors[a]->GetName() == anchorName) + if(effectAnchors[a]->GetName() == anchorName) return effectAnchors[a]; } return 0; Modified: trunk/src/common/effects/pseffect.h =================================================================== --- trunk/src/common/effects/pseffect.h 2013-12-08 23:17:03 UTC (rev 9067) +++ trunk/src/common/effects/pseffect.h 2013-12-09 12:04:16 UTC (rev 9068) @@ -73,7 +73,7 @@ * </ul> * @return the effect anchor if successfull, 0 otherwise. */ - psEffectAnchor * CreateAnchor(const csString & type); + psEffectAnchor* CreateAnchor(const csString &type); /** * Adds an effect anchor to this effect. @@ -81,7 +81,7 @@ * @param anchor a valid effect anchor. * @return the index of the effect anchor; Can be accessed with GetAnchor(index) */ - size_t AddAnchor(psEffectAnchor * anchor); + size_t AddAnchor(psEffectAnchor* anchor); /** * Loads the effect from an xml node. @@ -92,8 +92,8 @@ * @param ldr_context the current loader context. * @return true on success, false otherwise. */ - bool Load(iDocumentNode * node, iView * parentView, psEffect2DRenderer * renderer2d, - iLoaderContext * ldr_context); + bool Load(iDocumentNode* node, iView* parentView, psEffect2DRenderer* renderer2d, + iLoaderContext* ldr_context); /** * Renders the effect. @@ -107,23 +107,23 @@ * @param rotateWithMesh Should the effect rotate with the mesh. * @return 0 on failure, a unique ID on success */ - unsigned int Render(iSectorList * sectors, const csVector3 & offset, iMeshWrapper * attachPos, - iMeshWrapper * attachTarget, const csVector3 & up, const unsigned int uniqueIDOverride = 0, + unsigned int Render(iSectorList* sectors, const csVector3 &offset, iMeshWrapper* attachPos, + iMeshWrapper* attachTarget, const csVector3 &up, const unsigned int uniqueIDOverride = 0, bool rotateWithMesh = false); - + /** * Renders the effect. * * @param sector the starting sector of the effect * @param offset the offset of the position of the effect * @param attachPos the object to attoch the effect to, 0 for 0,0,0 - * @param attachTarget the target of the effect, 0 for + * @param attachTarget the target of the effect, 0 for * @param up the base up vector of the effect * @param uniqueIDOverride overrides the unique ID of the effect (for things like group effects) * @return 0 on failure, a unique ID on success */ - unsigned int Render(iSector * sector, const csVector3 & offset, iMeshWrapper * attachPos, - iMeshWrapper * attachTarget, const csVector3 & up, const unsigned int uniqueIDOverride = 0); + unsigned int Render(iSector* sector, const csVector3 &offset, iMeshWrapper* attachPos, + iMeshWrapper* attachTarget, const csVector3 &up, const unsigned int uniqueIDOverride = 0); /** * Updates the spell effect -- called every frame. @@ -136,7 +136,7 @@ /** * Clones the effect. */ - psEffect * Clone() const; + psEffect* Clone() const; /** * Returns the uniqueID of this effect @@ -183,7 +183,7 @@ * @param idx the index of the anchor to grab * @return the effect anchor at the given index */ - psEffectAnchor * GetAnchor(size_t idx) const; + psEffectAnchor* GetAnchor(size_t idx) const; /** * Finds an effect anchor of the given name. @@ -191,7 +191,7 @@ * @param anchorName the name of the anchor to find * @return the anchor if it's found, 0 otherwise */ - psEffectAnchor * FindAnchor(const csString & anchorName) const; + psEffectAnchor* FindAnchor(const csString &anchorName) const; /** * Returns the number of effect objs in this effect. @@ -206,7 +206,7 @@ * @param idx the index of the obj to grab * @return the effect obj at the given index */ - psEffectObj * GetObj(size_t idx) const; + psEffectObj* GetObj(size_t idx) const; /** * Finds an effect obj of the given name. @@ -214,19 +214,19 @@ * @param objName the name of the obj to find * @return the obj if it's found, 0 otherwise */ - psEffectObj * FindObj(const csString & objName) const; + psEffectObj* FindObj(const csString &objName) const; /** * Gets the name of the effect. * * @return the name of the effect */ - const csString & GetName() const; + const csString &GetName() const; /** * @todo comment this */ - psEffectObjTextable * GetMainTextObj() const; + psEffectObjTextable* GetMainTextObj() const; /** * Returns visibility value. @@ -256,8 +256,8 @@ { private: bool movableDead; - bool movableChanged; - iMovable* movable; + bool movableChanged; + iMovable* movable; public: psEffectMovableListener() @@ -288,7 +288,7 @@ this->movable = 0; movableChanged = false; } - + /** * Checks to see if the movable has disappeared. * @@ -307,11 +307,11 @@ * @param newTransf a container to store the new transform of the movable * @return true if the movable has changed since this function was called last */ - bool GrabNewData(iSectorList *& newSectors, csVector3 & newPos, csMatrix3 & newTransf) + bool GrabNewData(iSectorList* &newSectors, csVector3 &newPos, csMatrix3 &newTransf) { - if (!movableChanged || !movable) + if(!movableChanged || !movable) return false; - + newPos = movable->GetFullPosition(); newSectors = movable->GetSectors(); newTransf = movable->GetFullTransform().GetT2O(); @@ -327,9 +327,9 @@ * @param newTransf a container to store the new transform of the movable * @return true if the movable has changed since this function was called last */ - bool GrabNewData(csVector3 & newPos, csMatrix3 & newTransf) + bool GrabNewData(csVector3 &newPos, csMatrix3 &newTransf) { - if (!movableChanged || !movable) + if(!movableChanged || !movable) return false; newPos = movable->GetFullPosition(); @@ -340,13 +340,13 @@ csVector3 GetPosition() { - if (movable) - return movable->GetFullPosition(); - else - return csVector3(0, 0, 0); + if(movable) + return movable->GetFullPosition(); + else + return csVector3(0, 0, 0); } }; - + csRef<psEffectMovableListener> positionListener; csRef<psEffectMovableListener> targetListener; @@ -358,7 +358,7 @@ csPDelArray<psEffectObj> effectObjs; size_t mainTextObj; - psEffect2DRenderer * renderer2d; + psEffect2DRenderer* renderer2d; }; /** @} */ Modified: trunk/src/common/effects/pseffect2drenderer.cpp =================================================================== --- trunk/src/common/effects/pseffect2drenderer.cpp 2013-12-08 23:17:03 UTC (rev 9067) +++ trunk/src/common/effects/pseffect2drenderer.cpp 2013-12-09 12:04:16 UTC (rev 9068) @@ -25,7 +25,7 @@ psEffect2DElement::psEffect2DElement(int zOrder, int alpha) - : zOrder(zOrder), alpha(alpha), originx(0), originy(0) + : zOrder(zOrder), alpha(alpha), originx(0), originy(0) { } @@ -40,20 +40,20 @@ int psEffect2DElement::GetAlpha() const { - return alpha; + return alpha; } void psEffect2DElement::SetAlpha(int alpha) { - this->alpha = alpha; + this->alpha = alpha; } void psEffect2DElement::Draw(iGraphics3D* /*g3d*/, iGraphics2D* /*g2d*/) { } -psEffect2DTextElement::psEffect2DTextElement(int zOrder, iFont* font, const char * text, int x, int y, int fgColor, int bgColor, int outlineColor, int shadowColor, int alpha) - : psEffect2DElement(zOrder, alpha), font(font), x(x), y(y), fgColor(fgColor), bgColor(bgColor), shadowColor(shadowColor), outlineColor(outlineColor) +psEffect2DTextElement::psEffect2DTextElement(int zOrder, iFont* font, const char* text, int x, int y, int fgColor, int bgColor, int outlineColor, int shadowColor, int alpha) + : psEffect2DElement(zOrder, alpha), font(font), x(x), y(y), fgColor(fgColor), bgColor(bgColor), shadowColor(shadowColor), outlineColor(outlineColor) { strncpy(this->text, text, PS_EFFECT_2D_TEXT_MAX_CHARS); this->text[PS_EFFECT_2D_TEXT_MAX_CHARS-1] = 0; @@ -65,27 +65,27 @@ void psEffect2DTextElement::Draw(iGraphics3D* /*g3d*/, iGraphics2D* g2d) { - int x = this->x + originx; - int y = this->y + originy; - if (outlineColor >= 0) - { - g2d->Write(font, x-2, y-2, outlineColor, bgColor, text); - g2d->Write(font, x-2, y, outlineColor, bgColor, text); - g2d->Write(font, x-2, y+2, outlineColor, bgColor, text); - g2d->Write(font, x, y-2, outlineColor, bgColor, text); - g2d->Write(font, x, y+2, outlineColor, bgColor, text); - g2d->Write(font, x+2, y-2, outlineColor, bgColor, text); - g2d->Write(font, x+2, y, outlineColor, bgColor, text); - g2d->Write(font, x+2, y+2, outlineColor, bgColor, text); - } - if (shadowColor >= 0) - g2d->Write(font, x+1, y+1, shadowColor, bgColor, text); + int x = this->x + originx; + int y = this->y + originy; + if(outlineColor >= 0) + { + g2d->Write(font, x-2, y-2, outlineColor, bgColor, text); + g2d->Write(font, x-2, y, outlineColor, bgColor, text); + g2d->Write(font, x-2, y+2, outlineColor, bgColor, text); + g2d->Write(font, x, y-2, outlineColor, bgColor, text); + g2d->Write(font, x, y+2, outlineColor, bgColor, text); + g2d->Write(font, x+2, y-2, outlineColor, bgColor, text); + g2d->Write(font, x+2, y, outlineColor, bgColor, text); + g2d->Write(font, x+2, y+2, outlineColor, bgColor, text); + } + if(shadowColor >= 0) + g2d->Write(font, x+1, y+1, shadowColor, bgColor, text); - g2d->Write(font, x, y, fgColor, bgColor, text); + g2d->Write(font, x, y, fgColor, bgColor, text); } -psEffect2DImgElement::psEffect2DImgElement(int zOrder, iTextureHandle* texHandle, const csRect & texRect, const csRect & destRect, int alpha, bool tiled) - : psEffect2DElement(zOrder, alpha), texHandle(texHandle), texRect(texRect), destRect(destRect), tiled(tiled) +psEffect2DImgElement::psEffect2DImgElement(int zOrder, iTextureHandle* texHandle, const csRect &texRect, const csRect &destRect, int alpha, bool tiled) + : psEffect2DElement(zOrder, alpha), texHandle(texHandle), texRect(texRect), destRect(destRect), tiled(tiled) { } @@ -99,16 +99,16 @@ int th = texRect.Height(); int left = destRect.xmin + originx; int top = destRect.ymin + originy; - if (!tiled) + if(!tiled) g3d->DrawPixmap(texHandle, left, top, destRect.Width(), destRect.Height(), texRect.xmin, texRect.ymin, tw, th, 255 - alpha); else { int right = left + destRect.Width(); int bottom = top + destRect.Height(); - for (int x=left; x<right; x+=tw) + for(int x=left; x<right; x+=tw) { - for (int y=top; y<bottom; y+=th) + for(int y=top; y<bottom; y+=th) { int w = csMin<int>(tw, right - x); int h = csMin<int>(th, bottom - y); @@ -127,11 +127,11 @@ { } -int psEffect2DRendererCompareZOrder(psEffect2DElement* const& a, psEffect2DElement* const& b) +int psEffect2DRendererCompareZOrder(psEffect2DElement* const &a, psEffect2DElement* const &b) { - if (a->GetZOrder() < b->GetZOrder()) + if(a->GetZOrder() < b->GetZOrder()) return -1; - else if (a->GetZOrder() == b->GetZOrder()) + else if(a->GetZOrder() == b->GetZOrder()) return 0; return 1; } @@ -148,9 +148,9 @@ { size_t a; size_t len = effect2DElements.GetSize(); - for (a=0; a<len; ++a) + for(a=0; a<len; ++a) { - if (effect2DElements[a] != elem) + if(effect2DElements[a] != elem) continue; effect2DElements.DeleteIndex(a); @@ -165,7 +165,7 @@ void psEffect2DRenderer::RemoveAll2DElements() { - effect2DElements.DeleteAll(); + effect2DElements.DeleteAll(); } size_t psEffect2DRenderer::Get2DElementCount() const @@ -173,10 +173,10 @@ return effect2DElements.GetSize(); } -void psEffect2DRenderer::Render(iGraphics3D * g3d, iGraphics2D * g2d) +void psEffect2DRenderer::Render(iGraphics3D* g3d, iGraphics2D* g2d) { size_t a; size_t len = effect2DElements.GetSize(); - for (a=0; a<len; ++a) + for(a=0; a<len; ++a) effect2DElements[a]->Draw(g3d, g2d); } Modified: trunk/src/common/effects/pseffect2drenderer.h =================================================================== --- trunk/src/common/effects/pseffect2drenderer.h 2013-12-08 23:17:03 UTC (rev 9067) +++ trunk/src/common/effects/pseffect2drenderer.h 2013-12-09 12:04:16 UTC (rev 9068) @@ -40,7 +40,7 @@ { protected: int zOrder; - int alpha; + int alpha; public: int originx; @@ -50,9 +50,9 @@ psEffect2DElement(int zOrder, int alpha); virtual ~psEffect2DElement(); int GetZOrder() const; - int GetAlpha() const; - void SetAlpha(int alpha); - virtual void Draw(iGraphics3D * g3d, iGraphics2D * g2d); + int GetAlpha() const; + void SetAlpha(int alpha); + virtual void Draw(iGraphics3D* g3d, iGraphics2D* g2d); }; /** A 2D Text Effect Element @@ -66,13 +66,13 @@ int y; int fgColor; int bgColor; - int shadowColor; - int outlineColor; + int shadowColor; + int outlineColor; public: - psEffect2DTextElement(int zOrder, iFont* font, const char * text, int x, int y, int fgColor, int bgColor, int outlineColor, int shadowColor, int alpha); + psEffect2DTextElement(int zOrder, iFont* font, const char* text, int x, int y, int fgColor, int bgColor, int outlineColor, int shadowColor, int alpha); virtual ~psEffect2DTextElement(); - virtual void Draw(iGraphics3D * g3d, iGraphics2D * g2d); + virtual void Draw(iGraphics3D* g3d, iGraphics2D* g2d); }; /** A 2D Image Effect Element @@ -80,15 +80,15 @@ class psEffect2DImgElement : public psEffect2DElement { public: - csRef<iTextureHandle> texHandle; - csRect texRect; + csRef<iTextureHandle> texHandle; + csRect texRect; csRect destRect; - bool tiled; + bool tiled; public: - psEffect2DImgElement(int zOrder, iTextureHandle* texHandle, const csRect & texRect, const csRect & destRect, int alpha, bool tiled); + psEffect2DImgElement(int zOrder, iTextureHandle* texHandle, const csRect &texRect, const csRect &destRect, int alpha, bool tiled); virtual ~psEffect2DImgElement(); - virtual void Draw(iGraphics3D * g3d, iGraphics2D * g2d); + virtual void Draw(iGraphics3D* g3d, iGraphics2D* g2d); }; /** The manager of all 2D effect elements. @@ -102,13 +102,13 @@ psEffect2DRenderer(); ~psEffect2DRenderer(); - psEffect2DElement * Add2DElement(psEffect2DElement * elem); - void Remove2DElement(psEffect2DElement * elem); + psEffect2DElement* Add2DElement(psEffect2DElement* elem); + void Remove2DElement(psEffect2DElement* elem); void Remove2DElementByIndex(size_t index); void RemoveAll2DElements(); size_t Get2DElementCount() const; - void Render(iGraphics3D * g3d, iGraphics2D * g2d); + void Render(iGraphics3D* g3d, iGraphics2D* g2d); }; /** @} */ Modified: trunk/src/common/effects/pseffectanchor.cpp =================================================================== --- trunk/src/common/effects/pseffectanchor.cpp 2013-12-08 23:17:03 UTC (rev 9067) +++ trunk/src/common/effects/pseffectanchor.cpp 2013-12-09 12:04:16 UTC (rev 9068) @@ -34,8 +34,8 @@ #include "util/pscssetup.h" // keep track of the interpolation types for each key frame -const int lerpTypes[psEffectAnchorKeyFrame::KA_COUNT] = -{ +const int lerpTypes[psEffectAnchorKeyFrame::KA_COUNT] = +{ psEffectAnchorKeyFrame::IT_NONE, /* BLANK */ psEffectAnchorKeyFrame::IT_LERP, /* POS_X */ psEffectAnchorKeyFrame::IT_LERP, /* POS_Y */ @@ -45,75 +45,75 @@ psEffectAnchorKeyFrame::IT_LERP, /* TOTARGET_Z */ }; -psEffectAnchorKeyFrame::psEffectAnchorKeyFrame() - :specAction(KA_COUNT) +psEffectAnchorKeyFrame::psEffectAnchorKeyFrame() + :specAction(KA_COUNT) { specAction.Clear(); SetDefaults(); } -psEffectAnchorKeyFrame::psEffectAnchorKeyFrame(iDocumentNode * node, const psEffectAnchorKeyFrame * prevKeyFrame) - :specAction(KA_COUNT) +psEffectAnchorKeyFrame::psEffectAnchorKeyFrame(iDocumentNode* node, const psEffectAnchorKeyFrame* prevKeyFrame) + :specAction(KA_COUNT) { specAction.Clear(); - + csRef<iDocumentNodeIterator> xmlbinds; - + time = atof(node->GetAttributeValue("time")); xmlbinds = node->GetNodes("action"); csRef<iDocumentNode> keyNode; csRef<iDocumentAttribute> attr; - - if (!prevKeyFrame) + + if(!prevKeyFrame) SetupFirstFrame(); // set default values, if these are wrong then they'll be replaced on the second (lerp) pass SetDefaults(); - while (xmlbinds->HasNext()) + while(xmlbinds->HasNext()) { keyNode = xmlbinds->Next(); csString action = keyNode->GetAttributeValue("name"); action.Downcase(); - - if (action == "position") + + if(action == "position") { attr = keyNode->GetAttribute("x"); - if (attr) + if(attr) { specAction.SetBit(KA_POS_X); actions[KA_POS_X] = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("y"); - if (attr) + if(attr) { specAction.SetBit(KA_POS_Y); actions[KA_POS_Y] = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("z"); - if (attr) + if(attr) { specAction.SetBit(KA_POS_Z); actions[KA_POS_Z] = attr->GetValueAsFloat(); } } - else if (action == "totarget") + else if(action == "totarget") { attr = keyNode->GetAttribute("x"); - if (attr) + if(attr) { specAction.SetBit(KA_TOTARGET_X); actions[KA_TOTARGET_X] = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("y"); - if (attr) + if(attr) { specAction.SetBit(KA_TOTARGET_Y); actions[KA_TOTARGET_Y] = attr->GetValueAsFloat(); } attr = keyNode->GetAttribute("z"); - if (attr) + if(attr) { specAction.SetBit(KA_TOTARGET_Z); actions[KA_TOTARGET_Z] = attr->GetValueAsFloat(); @@ -162,7 +162,7 @@ objOffset = csVector3(0,0,0); posTransf.Identity(); targetTransf.Identity(); - + dir = DT_NONE; keyFrames.AttachNew(new psEffectAnchorKeyFrameGroup); @@ -175,36 +175,36 @@ psEffectAnchor::~psEffectAnchor() { - if (mesh) + if(mesh) engine->RemoveObject(mesh); } -bool psEffectAnchor::Load(iDocumentNode *node) +bool psEffectAnchor::Load(iDocumentNode* node) { name = node->GetAttributeValue("name"); - + csRef<iDocumentNode> dataNode; - + // direction dataNode = node->GetNode("dir"); dir = DT_NONE; - if (dataNode) + if(dataNode) { SetDirectionType(dataNode->GetContentsValue()); } - + // KEYFRAMES csRef<iDocumentNodeIterator> xmlbinds; xmlbinds = node->GetNodes("keyFrame"); csRef<iDocumentNode> keyNode; animLength = 0; - psEffectAnchorKeyFrame * prevKeyFrame = 0; - while (xmlbinds->HasNext()) + psEffectAnchorKeyFrame* prevKeyFrame = 0; + while(xmlbinds->HasNext()) { keyNode = xmlbinds->Next(); - psEffectAnchorKeyFrame * keyFrame = new psEffectAnchorKeyFrame(keyNode, prevKeyFrame); - if (keyFrame->time > animLength) + psEffectAnchorKeyFrame* keyFrame = new psEffectAnchorKeyFrame(keyNode, prevKeyFrame); + if(keyFrame->time > animLength) animLength = keyFrame->time; prevKeyFrame = keyFrame; keyFrames->Push(keyFrame); @@ -218,43 +218,43 @@ return true; } -bool psEffectAnchor::Create(const csVector3& /*offset*/, iMeshWrapper* /*posAttach*/, bool /*rotateWithMesh*/) +bool psEffectAnchor::Create(const csVector3 & /*offset*/, iMeshWrapper* /*posAttach*/, bool /*rotateWithMesh*/) { return false; } bool psEffectAnchor::Update(csTicks elapsed) { - if (animLength < 10) + if(animLength < 10) animLength = 10; life += (float)elapsed; - if (life > animLength) + if(life > animLength) life = fmod(life,animLength); - if (!life) + if(!life) life += animLength; - if (keyFrames->GetSize() == 0) + if(keyFrames->GetSize() == 0) return true; currKeyFrame = FindKeyFrameByTime(life); nextKeyFrame = currKeyFrame+1; - if (nextKeyFrame >= keyFrames->GetSize()) + if(nextKeyFrame >= keyFrames->GetSize()) nextKeyFrame = 0; // TOTARGET objTargetOffset = lerpVec( - csVector3(keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_X], - keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Y], - keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Z]), - csVector3(keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_X], - keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Y], - keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Z]), - keyFrames->Get(currKeyFrame)->time, keyFrames->Get(nextKeyFrame)->time, life); - + csVector3(keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_X], + keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Y], + keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Z]), + csVector3(keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_X], + keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Y], + keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_TOTARGET_Z]), + keyFrames->Get(currKeyFrame)->time, keyFrames->Get(nextKeyFrame)->time, life); + TransformOffset(objTargetOffset); - + // POSITION objOffset = lerpVec(csVector3(keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_POS_X], keyFrames->Get(currKeyFrame)->actions[psEffectAnchorKeyFrame::KA_POS_Y], @@ -263,14 +263,14 @@ keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_POS_Y], keyFrames->Get(nextKeyFrame)->actions[psEffectAnchorKeyFrame::KA_POS_Z]), keyFrames->Get(currKeyFrame)->time, keyFrames->Get(nextKeyFrame)->time, life); - + // adjust position by direction if there is one - if (dir == DT_TARGET) + if(dir == DT_TARGET) objOffset = targetTransf * csVector3(-objOffset.x, objOffset.y, -objOffset.z); - else if (dir == DT_ORIGIN) + else if(dir == DT_ORIGIN) objOffset = posTransf * csVector3(-objOffset.x, objOffset.y, -objOffset.z); - - + + mesh->GetMovable()->SetPosition(objEffectPos + objBasePos + objTargetOffset + objOffset); //mesh->GetMovable()->SetTransform(matBase); mesh->GetMovable()->UpdateMove(); @@ -278,7 +278,7 @@ return true; } -void psEffectAnchor::CloneBase(psEffectAnchor * newAnchor) const +void psEffectAnchor::CloneBase(psEffectAnchor* newAnchor) const { newAnchor->name = name; newAnchor->life = 0; @@ -290,17 +290,17 @@ newAnchor->keyFrames = keyFrames; } -psEffectAnchor * psEffectAnchor::Clone() const +psEffectAnchor* psEffectAnchor::Clone() const { - psEffectAnchor * newObj = new psEffectAnchor(); + psEffectAnchor* newObj = new psEffectAnchor(); CloneBase(newObj); - return newObj; + return newObj; } -void psEffectAnchor::SetPosition(const csVector3 & basePos, iSector * sector, const csMatrix3 & transf) +void psEffectAnchor::SetPosition(const csVector3 &basePos, iSector* sector, const csMatrix3 &transf) { - if (sector) + if(sector) { objEffectPos = basePos; posTransf = transf; @@ -313,9 +313,9 @@ } } -void psEffectAnchor::SetPosition(const csVector3 & basePos, iSectorList * sectors, const csMatrix3 & transf) +void psEffectAnchor::SetPosition(const csVector3 &basePos, iSectorList* sectors, const csMatrix3 &transf) { - if (sectors) + if(sectors) { objEffectPos = basePos; posTransf = transf; @@ -326,14 +326,14 @@ mesh->GetMovable()->SetPosition(objEffectPos + posTransf*objBasePos + objTargetOffset + objOffset); mesh->GetMovable()->GetSectors()->RemoveAll(); mesh->GetMovable()->SetSector(sectors->Get(0)); - for (int a=1; a<sectors->GetCount(); ++a) + for(int a=1; a<sectors->GetCount(); ++a) mesh->GetMovable()->GetSectors()->Add(sectors->Get(a)); } } -void psEffectAnchor::TransformOffset(csVector3 & offset) +void psEffectAnchor::TransformOffset(csVector3 &offset) { - if (offset.x != 0 || offset.y != 0 || offset.z != 0) + if(offset.x != 0 || offset.y != 0 || offset.z != 0) { // distance scale float tarDiff = -(target - objEffectPos).Norm(); @@ -344,36 +344,36 @@ } } -const char * psEffectAnchor::GetDirectionType() const +const char* psEffectAnchor::GetDirectionType() const { - switch (dir) + switch(dir) { - case DT_TARGET: - return "target"; - case DT_ORIGIN: - return "origin"; + case DT_TARGET: + return "target"; + case DT_ORIGIN: + return "origin"; } return "none"; } -void psEffectAnchor::SetDirectionType(const char * newDir) +void psEffectAnchor::SetDirectionType(const char* newDir) { csString dirName = newDir; dirName.Downcase(); - if (dirName == "target") + if(dirName == "target") dir = DT_TARGET; - else if (dirName == "origin") + else if(dirName == "origin") dir = DT_ORIGIN; - else if (dirName == "none") + else if(dirName == "none") dir = DT_NONE; } size_t psEffectAnchor::AddKeyFrame(float time) { - psEffectAnchorKeyFrame * newKeyFrame = new psEffectAnchorKeyFrame(); + psEffectAnchorKeyFrame* newKeyFrame = new psEffectAnchorKeyFrame(); // if there are no other keys then this is the first frame. - if (keyFrames->GetSize() == 0) + if(keyFrames->GetSize() == 0) newKeyFrame->SetupFirstFrame(); newKeyFrame->time = time; @@ -387,9 +387,9 @@ size_t psEffectAnchor::FindKeyFrameByTime(float time) const { - for ( size_t a = keyFrames->GetSize(); a-- > 0; ) + for(size_t a = keyFrames->GetSize(); a-- > 0;) { - if (keyFrames->Get(a)->time < time) + if(keyFrames->Get(a)->time < time) return a; } return 0; @@ -397,9 +397,9 @@ bool psEffectAnchor::FindNextKeyFrameWithAction(size_t startFrame, size_t action, size_t &index) const { - for (size_t a=startFrame; a<keyFrames->GetSize(); a++) + for(size_t a=startFrame; a<keyFrames->GetSize(); a++) { - if (a == 0 || keyFrames->Get(a)->specAction.IsBitSet(action)) + if(a == 0 || keyFrames->Get(a)->specAction.IsBitSet(action)) { index = a; return true; @@ -413,12 +413,12 @@ // this code is crap, but doing it this way allows everything else to be decently nice, clean, and efficient size_t a,b,nextIndex; - for (size_t k=0; k<psEffectAnchorKeyFrame::KA_COUNT; ++k) + for(size_t k=0; k<psEffectAnchorKeyFrame::KA_COUNT; ++k) { a = 0; - while (FindNextKeyFrameWithAction(a+1, k, nextIndex)) + while(FindNextKeyFrameWithAction(a+1, k, nextIndex)) { - for (b=a+1; b<nextIndex; ++b) + for(b=a+1; b<nextIndex; ++b) { switch(lerpTypes[k]) { @@ -429,11 +429,11 @@ keyFrames->Get(b)->actions[k] = keyFrames->Get(nextIndex)->actions[k]; break; case psEffectAnchorKeyFrame::IT_LERP: - keyFrames->Get(b)->actions[k] = lerp(keyFrames->Get(a)->actions[k], - keyFrames->Get(nextIndex)->actions[k], - keyFrames->Get(a)->time, - keyFrames->Get(nextIndex)->time, - keyFrames->Get(b)->time); + keyFrames->Get(b)->actions[k] = lerp(keyFrames->Get(a)->actions[k], + keyFrames->Get(nextIndex)->actions[k], + keyFrames->Get(a)->time, + keyFrames->Get(nextIndex)->time, + keyFrames->Get(b)->time); break; } } @@ -441,9 +441,9 @@ } // no matter what the interpolation type (as long as we have one), just clamp the end - if (lerpTypes[k] != psEffectAnchorKeyFrame::IT_NONE) + if(lerpTypes[k] != psEffectAnchorKeyFrame::IT_NONE) { - for (b=a+1; b<keyFrames->GetSize(); ++b) + for(b=a+1; b<keyFrames->GetSize(); ++b) keyFrames->Get(b)->actions[k] = keyFrames->Get(a)->actions[k]; } } Modified: trunk/src/common/effects/pseffectanchor.h =================================================================== --- trunk/src/common/effects/pseffectanchor.h 2013-12-08 23:17:03 UTC (rev 9067) +++ trunk/src/common/effects/pseffectanchor.h 2013-12-09 12:04:16 UTC (rev 9068) @@ -47,7 +47,7 @@ { public: psEffectAnchorKeyFrame(); - psEffectAnchorKeyFrame(iDocumentNode * node, const psEffectAnchorKeyFrame * prevKeyFrame); + psEffectAnchorKeyFrame(iDocumentNode* node, const psEffectAnchorKeyFrame* prevKeyFrame); ~psEffectAnchorKeyFrame(); /** @@ -69,10 +69,10 @@ IT_FLOOR, IT_CEILING, IT_LERP, - + IT_COUNT }; - + enum KEY_ACTION { KA_POS_X = 1, KA_POS_Y, KA_POS_Z, @@ -82,26 +82,32 @@ }; float actions[KA_COUNT]; - inline const char * GetActionName(size_t idx) + inline const char* GetActionName(size_t idx) { - switch (idx) + switch(idx) { - case KA_POS_X: return "Position X"; - case KA_POS_Y: return "Position Y"; - case KA_POS_Z: return "Position Z"; - case KA_TOTARGET_X: return "To Target X"; - case KA_TOTARGET_Y: return "To Target Y"; - case KA_TOTARGET_Z: return "To Target Z"; + case KA_POS_X: + return "Position X"; + case KA_POS_Y: + return "Position Y"; + case KA_POS_Z: + return "Position Z"; + case KA_TOTARGET_X: + return "To Target X"; + case KA_... [truncated message content] |
From: res <re...@gm...> - 2008-12-12 12:21:21
|
On 12.12.2008 13:12, mg...@us... wrote: > + stringSet = csQueryRegistryTagInterface<iShaderVarStringSet>(psCSSetup::object_reg, > + "crystalspace.shader.variablenameset"); That will only compile on CS trunk. > - csColor color((float)((newElem.colour>>16) & 255)/255.0F, > + csVector3 color((float)((newElem.colour>>16) & 255)/255.0F, > (float)((newElem.colour>> 8) & 255)/255.0F, > (float)((newElem.colour ) & 255)/255.0F); > - mesh->GetMeshObject()->SetColor(color); > + CS::ShaderVarStringID varName = stringSet->Request("color modulation"); > + csShaderVariable* var = mesh->GetSVContext()->GetVariableAdd(varName); > + if(var) > + { > + var->SetValue(color); > + } This will compile, but not work on CS 1.4. -f.r. |
From: Mike G. <xo...@gm...> - 2008-12-12 13:48:57
|
2008/12/12 res <re...@gm...> > On 12.12.2008 13:12, mg...@us... wrote: > >> + stringSet = >> csQueryRegistryTagInterface<iShaderVarStringSet>(psCSSetup::object_reg, >> + "crystalspace.shader.variablenameset"); >> > > That will only compile on CS trunk. trunk PS will only work with trunk CS now, so it's okay. Our 'stable' branch is on 1.4 and this change won't be merged over to it. -- -Mike |