Browse Source

Fix gravity and rotation in ParticleEmitter2D.

aster2013 11 years ago
parent
commit
a44291b557

+ 7 - 6
Source/Engine/Urho2D/ParticleEmitter2D.cpp

@@ -225,9 +225,10 @@ void ParticleEmitter2D::UpdateVertices()
     for (int i = 0; i < numParticles_; ++i)
     {
         Particle2D& p = particles_[i];
-
-        float c = Cos(p.rotation_);
-        float s = Sin(p.rotation_);
+        
+        float rotation = -p.rotation_;
+        float c = Cos(rotation);
+        float s = Sin(rotation);
         float add = (c + s) * p.size_ * 0.5f;
         float sub = (c - s) * p.size_ * 0.5f;
 
@@ -235,7 +236,7 @@ void ParticleEmitter2D::UpdateVertices()
         vertex1.position_ = Vector3(p.position_.x_ - add, p.position_.y_ + sub, zValue_);
         vertex2.position_ = Vector3(p.position_.x_ + sub, p.position_.y_ + add, zValue_);
         vertex3.position_ = Vector3(p.position_.x_ + add, p.position_.y_ - sub, zValue_);
-
+        
         vertex0.color_ = vertex1.color_ = vertex2.color_  = vertex3.color_ = p.color_.ToUInt();
 
         vertices_.Push(vertex0);
@@ -340,8 +341,8 @@ void ParticleEmitter2D::UpdateParticle(Particle2D& particle, float timeStep, con
         tangentialX = -tangentialY * particle.tangentialAcceleration_;
         tangentialY = newY * particle.tangentialAcceleration_;
 
-        particle.velocity_.x_ += (model_->GetGravity().x_ * worldScale + radialX + tangentialX) * timeStep;
-        particle.velocity_.y_ += (model_->GetGravity().y_ * worldScale + radialY + tangentialY) * timeStep;
+        particle.velocity_.x_ += (model_->GetGravity().x_ * worldScale + radialX - tangentialX) * timeStep;
+        particle.velocity_.y_ -= (model_->GetGravity().y_ * worldScale - radialY + tangentialY) * timeStep;
         particle.position_.x_ += particle.velocity_.x_ * timeStep;
         particle.position_.y_ += particle.velocity_.y_ * timeStep;
     }

+ 6 - 7
Source/Engine/Urho2D/ParticleModel2D.cpp

@@ -127,13 +127,13 @@ bool ParticleModel2D::Load(Deserializer& source)
     particleLifeSpan_ = Max(0.01f, rootElem.GetChild("particleLifeSpan").GetFloat("value"));
     particleLifespanVariance_ = rootElem.GetChild("particleLifespanVariance").GetFloat("value");
     
-    angle_ = 360.0f - rootElem.GetChild("angle").GetFloat("value");
+    angle_ = rootElem.GetChild("angle").GetFloat("value");
     angleVariance_ = rootElem.GetChild("angleVariance").GetFloat("value");
     
     gravity_ = ReadVector2(rootElem.GetChild("gravity"));
 
     radialAcceleration_ = rootElem.GetChild("radialAcceleration").GetFloat("value");
-    tangentialAcceleration_ = -rootElem.GetChild("tangentialAcceleration").GetFloat("value");
+    tangentialAcceleration_ = rootElem.GetChild("tangentialAcceleration").GetFloat("value");
     
     radialAccelVariance_ = rootElem.GetChild("radialAccelVariance").GetFloat("value");
     tangentialAccelVariance_ = rootElem.GetChild("tangentialAccelVariance").GetFloat("value");
@@ -167,7 +167,7 @@ bool ParticleModel2D::Load(Deserializer& source)
     maxRadiusVariance_ = rootElem.GetChild("maxRadiusVariance").GetFloat("value");
     minRadius_ = rootElem.GetChild("minRadius").GetFloat("value");
 
-    rotatePerSecond_ = -rootElem.GetChild("rotatePerSecond").GetFloat("value");
+    rotatePerSecond_ = rootElem.GetChild("rotatePerSecond").GetFloat("value");
     rotatePerSecondVariance_ = rootElem.GetChild("rotatePerSecondVariance").GetFloat("value");
     
     int blendFuncSource = rootElem.GetChild("blendFuncSource").GetInt("value");
@@ -182,10 +182,10 @@ bool ParticleModel2D::Load(Deserializer& source)
         }
     }
 
-    rotationStart_ = -rootElem.GetChild("rotationStart").GetFloat("value");
+    rotationStart_ = rootElem.GetChild("rotationStart").GetFloat("value");
     rotationStartVariance_ = rootElem.GetChild("rotationStartVariance").GetFloat("value");
     
-    rotationEnd_ = -rootElem.GetChild("rotationEnd").GetFloat("value");
+    rotationEnd_ = rootElem.GetChild("rotationEnd").GetFloat("value");
     rotationEndVariance_ = rootElem.GetChild("rotationEndVariance").GetFloat("value");
 
     return true;
@@ -373,8 +373,7 @@ Color ParticleModel2D::ReadColor(const XMLElement& element) const
 
 Vector2 ParticleModel2D::ReadVector2(const XMLElement& element) const
 {
-    // Flip y.
-    return Vector2(element.GetFloat("x"), -element.GetFloat("y"));
+    return Vector2(element.GetFloat("x"), element.GetFloat("y"));
 }
 
 }