aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-11-19 21:20:32 +0800
committerchai <chaifix@163.com>2018-11-19 21:20:32 +0800
commit22715652592b326feae3010a8bc80d6f8fadba50 (patch)
tree6c3a92254dde92b32a194ee757a6152c1ab00c7b /src
parentb1b5adfcbed66691aa6d1775d20c6aec6d1a4696 (diff)
*粒子系统
Diffstat (limited to 'src')
-rw-r--r--src/libjin/game/je_application.cpp2
-rw-r--r--src/libjin/graphics/particles/je_particle.cpp2
-rw-r--r--src/libjin/graphics/particles/je_particle_emitter.cpp12
-rw-r--r--src/libjin/graphics/particles/je_particle_system.cpp3
-rw-r--r--src/libjin/input/je_mouse.h2
-rw-r--r--src/libjin/math/je_math.h18
-rw-r--r--src/libjin/math/je_random.cpp6
7 files changed, 27 insertions, 18 deletions
diff --git a/src/libjin/game/je_application.cpp b/src/libjin/game/je_application.cpp
index 723a809..9460738 100644
--- a/src/libjin/game/je_application.cpp
+++ b/src/libjin/game/je_application.cpp
@@ -54,7 +54,7 @@ namespace JinEngine
if (_onDraw != nullptr)
_onDraw();
wnd->swapBuffers();
- sleep(1);
+ sleep(16);
}
quitloop:;
}
diff --git a/src/libjin/graphics/particles/je_particle.cpp b/src/libjin/graphics/particles/je_particle.cpp
index 53f4570..20e4b9e 100644
--- a/src/libjin/graphics/particles/je_particle.cpp
+++ b/src/libjin/graphics/particles/je_particle.cpp
@@ -37,7 +37,7 @@ namespace JinEngine
void Particle::update(float dt)
{
float t = life / lifeTime;
- // Lerp color
+ // Lerp color.
color.r = lerp<int>(colorStart.r, colorEnd.r, t);
color.g = lerp<int>(colorStart.g, colorEnd.g, t);
color.b = lerp<int>(colorStart.b, colorEnd.b, t);
diff --git a/src/libjin/graphics/particles/je_particle_emitter.cpp b/src/libjin/graphics/particles/je_particle_emitter.cpp
index d8fb78d..35d654e 100644
--- a/src/libjin/graphics/particles/je_particle_emitter.cpp
+++ b/src/libjin/graphics/particles/je_particle_emitter.cpp
@@ -57,9 +57,7 @@ namespace JinEngine
p->transform.setPosition(x, y);
}
else
- {
p->transform.setPosition(mDef.positionDef.position.position);
- }
// Init speed.
float r = 0;
if (mDef.directionDef.enableRandom)
@@ -72,27 +70,27 @@ namespace JinEngine
else
f = mDef.forceDef.force.force;
p->speed.set(f*cos(r), f*sin(r));
- // Init life time
+ // Init life time.
if (mPDef.lifeTimeDef.enableRandom)
p->lifeTime = rng.randf(mPDef.lifeTimeDef.life.random.floor, mPDef.lifeTimeDef.life.random.floor, ACCURACY_4);
else
p->lifeTime = mPDef.lifeTimeDef.life.life;
- // Init linear accelaration
+ // Init linear accelaration.
p->linearAcceleration = mPDef.linearAccelarationDef.linearAccelaration;
- // Init angular accelaration
+ // Init angular accelaration.
p->radialAcceleration = mPDef.radialAccelarationDef.radialAccelaration;
// Init Angular speed.
if (mPDef.angularSpeedDef.enableRandom)
p->angularSpeed = rng.randf(mPDef.angularSpeedDef.angularSpeed.random.floor, mPDef.angularSpeedDef.angularSpeed.random.ceil, ACCURACY_4);
else
p->angularSpeed = mPDef.angularSpeedDef.angularSpeed.angularSpeed;
- // Scale over time
+ // Scale over time.
if (mPDef.sizeOverTimeDef.enable)
{
p->scaleBegin = mPDef.sizeOverTimeDef.start;
p->scaleEnd = mPDef.sizeOverTimeDef.end;
}
- // Color over time
+ // Color over time.
if (mPDef.colorOverTimeDef.enable)
{
p->colorStart = mPDef.colorOverTimeDef.colorStart;
diff --git a/src/libjin/graphics/particles/je_particle_system.cpp b/src/libjin/graphics/particles/je_particle_system.cpp
index a81a3c9..942da99 100644
--- a/src/libjin/graphics/particles/je_particle_system.cpp
+++ b/src/libjin/graphics/particles/je_particle_system.cpp
@@ -38,8 +38,11 @@ namespace JinEngine
void ParticleSystem::render(float x, float y, float sx /* = 1 */, float sy /* = 1 */, float r /* = 0 */, float ax /* = 0 */, float ay /* = 0 */)
{
+ gl.push();
+ gl.translate(x, y);
for (Particle* p : mAliveParticles)
p->render();
+ gl.pop();
}
void ParticleSystem::setGraphic(const Graphic* graphic)
diff --git a/src/libjin/input/je_mouse.h b/src/libjin/input/je_mouse.h
index 3c4ad9b..a4e71fc 100644
--- a/src/libjin/input/je_mouse.h
+++ b/src/libjin/input/je_mouse.h
@@ -46,4 +46,4 @@ namespace JinEngine
#endif // defined(jin_input)
-#endif // __JE_MOUSE_H__
+#endif // __JE_MOUSE_H__ \ No newline at end of file
diff --git a/src/libjin/math/je_math.h b/src/libjin/math/je_math.h
index de57e36..ae4017f 100644
--- a/src/libjin/math/je_math.h
+++ b/src/libjin/math/je_math.h
@@ -48,12 +48,6 @@ namespace JinEngine
}
template<typename T>
- inline T abs(T a)
- {
- return a > 0 ? a : -a;
- }
-
- template<typename T>
inline T lowerBound(T a, T lower)
{
return a < lower ? lower : a;
@@ -77,6 +71,18 @@ namespace JinEngine
return a + f * (b - a);
}
+ template<typename T>
+ inline T abs(T a)
+ {
+ return a > 0 ? a : -a;
+ }
+
+ template<typename T>
+ inline T reverse(T a)
+ {
+ return -a;
+ }
+
} // namespace Math
} // namespace JinEngine
diff --git a/src/libjin/math/je_random.cpp b/src/libjin/math/je_random.cpp
index 216fd79..b9313d2 100644
--- a/src/libjin/math/je_random.cpp
+++ b/src/libjin/math/je_random.cpp
@@ -1,4 +1,5 @@
#include <math.h>
+#include "je_math.h"
#include "je_random.h"
namespace JinEngine
@@ -43,9 +44,10 @@ namespace JinEngine
float RandomGenerator::randf(float min, float max, int ac)
{
+ float floor = 0, ceil = max + reverse<float>(min);
uint32 a = pow(10.f, ac);
- uint32 n = rand(min*a, max*a);
- return (float)n / a;
+ uint32 n = rand(floor*a, ceil*a);
+ return (float)n / a + min;
}
}